【问题标题】:unity Spawn scene object not found未找到统一生成场景对象
【发布时间】:2017-12-28 00:32:55
【问题描述】:

你好,所以我用这个视频制作了一个简单的网络https://unity3d.com/learn/tutorials/topics/multiplayer-networking/merry-fragmas-30-multiplayer-fps-foundation

我在预制件上保存了网络身份并将其放入游戏管理器中

但是当我尝试作为客户端连接时,是的,我有一个正在运行的主机,但是当我作为客户端连接时,我得到了这个

未找到 1 的生成场景对象 UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate()

http://imgur.com/a/t3Qpp

【问题讨论】:

    标签: 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 组件...删除后它工作正常。

          【讨论】:

            猜你喜欢
            • 2015-11-01
            • 1970-01-01
            • 1970-01-01
            • 2022-10-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-01
            • 1970-01-01
            相关资源
            最近更新 更多