使用 Unity Mirror 开发局域网联机卡牌游戏时,可能会遇到错误 "Bt_Card(Clone) has already spawned. Don't call Instantiate for NetworkIdentities that were in the scene since the beginning (aka scene objects). Otherwise the client won't know which object to use for a SpawnSceneObject message."。这个错误是因为你在场景中已经有一个带有 NetworkIdentity 组件的对象,然后又尝试使用 NetworkServer.Spawn 来生成一个具有相同 NetworkIdentity 的新对象。这会导致客户端无法确定使用哪个对象来处理 SpawnSceneObject 消息。\n\n要解决这个问题,你可以尝试以下几个方法:\n\n1. 确保你只在需要生成新对象时调用 NetworkServer.Spawn。在使用 NetworkServer.Spawn 之前,检查一下是否已经存在一个具有相同 NetworkIdentity 的对象。如果存在,则不要调用 Instantiate。\n\n2. 如果你确实需要生成一个具有相同 NetworkIdentity 的新对象,你可以尝试在生成新对象之前调用 NetworkServer.UnSpawn 来取消生成原始对象。例如:\n\ncsharp\n// 在生成新对象之前取消生成原始对象\nif (originalObject != null)\n{\n NetworkServer.UnSpawn(originalObject);\n}\n\n// 生成新对象\nGameObject newObject = Instantiate(prefab);\nNetworkServer.Spawn(newObject);\n\n\n这样做会取消生成原始对象,并将其从场景中移除,然后再生成一个具有相同 NetworkIdentity 的新对象。\n\n3. 如果你确实需要同时在场景中存在多个具有相同 NetworkIdentity 的对象,你可以考虑使用 NetworkServer.SpawnObjects 来生成它们。这个方法可以用来生成多个具有相同 NetworkIdentity 的对象,而不会导致上述错误。例如:\n\ncsharp\n// 在场景中生成多个具有相同 NetworkIdentity 的对象\nGameObject[] objects = new GameObject[numObjects];\nfor (int i = 0; i < numObjects; i++)\n{\n objects[i] = Instantiate(prefab);\n NetworkServer.Spawn(objects[i]);\n}\n\n\n希望这些解决方法能帮助你解决问题。如果问题仍然存在,请提供更多的代码和上下文信息,以便我们能够更好地帮助你。

Unity Mirror 局域网卡牌游戏联机报错:Bt_Card(Clone) has already spawned.

原文地址: http://www.cveoy.top/t/topic/p3cO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录