【问题标题】:unity Spawn scene object not found未找到统一生成场景对象
【发布时间】:2017-12-28 00:32:55
【问题描述】:
【问题讨论】:
标签:
c#
unity3d
networking
unity-networking
【解决方案1】:
你没有在 Network Manager -> Spawn Info 下注册任何“Spawnable prefabs”
将你想要生成的预制件放在那里,你就可以通过网络生成它。
【解决方案2】:
随着项目的发展,场景中可能会有几十个 NetworkIdenties 需要注册,很容易漏掉一些,这也是常见的“Spawn scene object not found”错误的原因之一。
我编写了这个编辑器脚本来检查是否有任何SceneObjects 没有在 NetworkManager 中注册。将其添加到编辑器文件夹中,然后使用“工具”菜单运行它。
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEditor;
public class CheckUNETSceneRegistered : ScriptableObject {
const string menuName = "UNET SceneObjects Registration Check";
[MenuItem("Tools/Check UNET SceneObjects are Registered")]
static void DoCheck()
{
NetworkManager networkManager = FindObjectOfType<NetworkManager>();
if(networkManager == null)
{
EditorUtility.DisplayDialog(menuName, "No NetworkManager found", "OK", "");
return;
}
List<string> registeredPrefabNames = new List<string>(networkManager.spawnPrefabs.Count);
foreach (GameObject g in networkManager.spawnPrefabs)
registeredPrefabNames.Add(g.name);
int i = 0;
foreach (NetworkIdentity uv in FindObjectsOfType<NetworkIdentity>())
{
if (!registeredPrefabNames.Contains(PrefabUtility.GetPrefabParent(uv.gameObject).name))
{
Debug.LogError("Found " + uv.name + " in the scene, but its prefab " + PrefabUtility.GetPrefabParent(uv.gameObject).name + " was not registered");
i++;
}
}
EditorUtility.DisplayDialog(menuName, ( i>0 ? "Found " + i + " unregistered Scene Objects. See Logs." : "All OK" ), "OK", "");
}
}
【解决方案3】:
我遇到了同样的问题,我的问题来自于我的网络管理员有一个联网对象。取消联网对象的子节点,然后它就可以正常工作了。
【解决方案4】:
我遇到了同样的问题,但对我来说,解决方案是我在 NetworkManager 上有 NetworkIdentity 组件...删除后它工作正常。