• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
Question by daola · Oct 30, 2020 at 09:28 PM · unity 5networking3dmirror

Replacing existing prefab with asset id...

I'm looking at guides from DipperDino (DipperDino guide) on Mirror multiplayer and during development there was an error that it doesn't have. I rechecked everything many times and couldn't fix it. The error sounds like "replacing existing prefab with asset id", referring to objects in Rosouces.SpawnablePrefabs. I left the NetworkManagerLobby class code below.

 using Mirror;
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using UnityEngine;
 using UnityEngine.SceneManagement;
 
 public class NetworkManagerLobby : NetworkManager
 {
     [SerializeField] private int minPlayers = 2;
     [Scene] [SerializeField] private string menuScene = string.Empty;
 
     [Header("Room")]
     [SerializeField] private NetworkRoomPlayerLobby roomPlayerPrefab = null;
 
     [Header("Game")]
     [SerializeField] private NetworkGamePlayerLobby gamePlayerPrefab = null;
     [SerializeField] private GameObject playerSpawnSystem = null;
 
     public static event Action OnClientConnected;
     public static event Action OnClientDisconnected;
     public static event Action<NetworkConnection> OnServerReadied;
 
     public List<NetworkRoomPlayerLobby> RoomPlayers { get; } = new List<NetworkRoomPlayerLobby>();
     public List<NetworkGamePlayerLobby> GamePlayers { get; } = new List<NetworkGamePlayerLobby>();
     // HERE CAN BE SPECTATOR PLAYERS LIST FOR OWN SPECTATOR LOGIC (LIKE RoomPlayer -> GamePlayers BUT SpectatorPlayers -> GamePlayers
 
     public override void OnStartServer() => spawnPrefabs = Resources.LoadAll<GameObject>("SpawnablePrefabs").ToList();
 
     public override void OnStopServer()
     {
         RoomPlayers.Clear();
     }
 
     public override void OnStartClient()
     {
         var spawnablePrefabs = Resources.LoadAll<GameObject>("SpawnablePrefabs");
 
         foreach (var prefab in spawnablePrefabs)
         {
             ClientScene.RegisterPrefab(prefab);
         }
     }
 
     public override void OnClientConnect(NetworkConnection conn)
     {
         base.OnClientConnect(conn);
 
         OnClientConnected?.Invoke();
     }
 
     public override void OnClientDisconnect(NetworkConnection conn)
     {
         base.OnClientDisconnect(conn);
 
         OnClientDisconnected?.Invoke();
     }
 
     public override void OnServerConnect(NetworkConnection conn)
     {
         if (numPlayers >= maxConnections)
         {
             conn.Disconnect();
             return;
             //TODO; show err lobby is full message
         }
 
         if (SceneManager.GetActiveScene().path != menuScene)
         {
             conn.Disconnect();
             return;
             //TODO; show err scene message
         }
     }
 
     public override void OnServerDisconnect(NetworkConnection conn)
     {
         if (conn.identity != null)
         {
             var player = conn.identity.GetComponent<NetworkRoomPlayerLobby>();
 
             RoomPlayers.Remove(player);
 
             NotifyPlayersOfReadyState();
         }
 
         base.OnServerDisconnect(conn);
     }
 
     public override void OnServerAddPlayer(NetworkConnection conn)
     {
         if (SceneManager.GetActiveScene().path == menuScene)
         {
             bool isLeader = RoomPlayers.Count == 0;
 
             NetworkRoomPlayerLobby roomPlayerInstance = Instantiate(roomPlayerPrefab);
 
             roomPlayerInstance.IsLeader = isLeader;
 
             NetworkServer.AddPlayerForConnection(conn, roomPlayerInstance.gameObject);
         }
     }
 
     public void NotifyPlayersOfReadyState()
     {
         foreach (var player in RoomPlayers)
         {
             player.HandleReadyToStart(IsReadyToStart());
         }
     }
 
     private bool IsReadyToStart()
     {
         if (numPlayers < minPlayers) { return false; }
 
         foreach (var player in RoomPlayers) //Loop every player in the lobby
         {
             if (!player.IsReady) { return false; }
         }
 
         //########Loop every player in the lobby########
         //foreach (var player in RoomPlayers) 
         //{
         //    CODE HERE;
         //}
 
         return true;
     }
 
     public void StartGame()
     {
         if(SceneManager.GetActiveScene().path == menuScene)
         {
             if(!IsReadyToStart()) { return; }
 
             ServerChangeScene("Scene_Tests_01");
         }
     }
 
     public override void ServerChangeScene(string newSceneName)
     {
         // From menu to scene
         if (SceneManager.GetActiveScene().path == menuScene && newSceneName.StartsWith("Scene_Tests"))
         {
             for (int i = RoomPlayers.Count - 1; i >= 0; i--)
             {
                 var conn = RoomPlayers[i].connectionToClient;
                 var gameplayerInstance = Instantiate(gamePlayerPrefab);
                 gameplayerInstance.SetDisplayName(RoomPlayers[i].DisplayName);
 
                 NetworkServer.Destroy(conn.identity.gameObject);
 
                 NetworkServer.ReplacePlayerForConnection(conn, gameplayerInstance.gameObject, true);
             }
         }
 
         base.ServerChangeScene(newSceneName);
     }
 
     public override void OnServerSceneChanged(string sceneName)
     {
         if (sceneName.StartsWith("Scene_Tests"))
         {
             GameObject playerSpawnSystemInstance = Instantiate(playerSpawnSystem);
             NetworkServer.Spawn(playerSpawnSystemInstance);
         }
     }
 
     public override void OnServerReady(NetworkConnection conn)
     {
         base.OnServerReady(conn);
 
         OnServerReadied?.Invoke(conn);
     }
 }


Comment
Dominik-L
AnasHussain
Kachimov

People who like this

3 Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image AnasHussain · Nov 12, 2020 at 08:17 AM 0
Share

I am also facing the same issue.. Leaving this comment here just so i can come back here is someone answers..

avatar image Kachimov · Nov 16, 2020 at 09:41 PM 0
Share

Same problem

1 Reply

· Add your reply
  • Sort: 
avatar image

Answer by betomaluje · Dec 09, 2020 at 07:46 AM

@reseeman , @AnasHussain and @Kachimov . I'm no expert on Mirror but I also followed the same tutorial and got a bunch of warnings when going back to the lobby after a round. What I did to remove all those was basically try to clear the list whenever we start the client or server. Also I'm using the same spawnPrefabs list for both:

         ...
         public override void OnStartServer()
         {
             spawnPrefabs.Clear();
             spawnPrefabs = Resources.LoadAll<GameObject>("SpawnablePrefabs").ToList();
         }
 
         public override void OnStartClient()
         {
             spawnPrefabs.Clear();
             spawnPrefabs = Resources.LoadAll<GameObject>("SpawnablePrefabs").ToList();
 
             ClientScene.ClearSpawners();
 
             foreach (var prefab in spawnPrefabs)
             {
                 ClientScene.RegisterPrefab(prefab);
             }
         }
         ...

If one hosts the game, it will call OnStartServer and also OnStartClient... I know it's not the best but at least now I don't have that problem of replacing prefabs

I really hope this helps and if anyone has a better approach please let us know :D

Comment
Ken-Cone
YesYesYeswanth

People who like this

2 Show 4 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Ken-Cone · Jan 05, 2021 at 03:54 AM 0
Share

that worked for me, mostly. I had three warnings: "Empty" was replaced two times and "RoomPlayer" was replaced once. When I cleared the lists (with the edits above) two of those warnings went away. Still working to clear the third replacement now... Thanks @betomaluje !

avatar image Jemersonn Ken-Cone · Jan 28, 2021 at 02:26 AM 0
Share

I still have the exact same problem. Without the lines shown above I get 3 errors, 2 for player and 1 for RoomPlayer. With the lines above, I only get 1 error for the player. Did you find any solutions or workarounds?

avatar image Ken-Cone Jemersonn · Jan 28, 2021 at 04:15 AM 0
Share

I know I don't have the error anymore, and after looking at the code for the last ten minutes I can't for the life of me remember how it was solved. :(
However, later in the tutorial, we add a NetworkRoomPlayer prefab. That might have taken care of it for me. It might be that as I moved forward in the tutorials it got cleaned up. I'm sorry to not be of more help here.

Show more comments

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

329 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Unet/Mirror. Spawn different prefab in local and server/rest of clients 0 Answers

Replacing existing prefab with asset id... 2 Answers

Unity Mirror Networkfunctions doesnt work on non-player Objects? 0 Answers

Unity Mirror Network Discovery Stop Joining 0 Answers

Animations playing only in the Host and not on the clients - Unity Mirror Networking. 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges