C#/Unity 实例化类创建具有相同实例 ID 0 的副本

C#/Unity Instantiating class creating copies with same instance ID of 0

提问人:CR9GAMING 提问时间:3/30/2021 更新时间:3/30/2021 访问量:709

问:

下面的函数应该创建一个新实例并将其添加到列表中,但是在运行时,它会返回错误。当我创建多个实例时,所有实例都具有相同的 ID,这是 0,更改一个实例的变量也会更改其他实例的变量。你知道我做错了什么吗?SolarSystem_Managervar clone = Instantiate(_solar)nullreference_solar

private void createSolarSystem()
         {
             SolarSystem_Manager _solar = new SolarSystem_Manager();
             _solar.solarSystem = new SolarSystem(transform.GetComponent<Galaxy>(), Random.Range(9, 10), new List<LQPlanetManager>(), new SunManager());
             var clone = Instantiate(_solar);
             solarSystems.Add(clone);
         }
C# unity-game-engine nullreferenceexception 实例化

评论

1赞 hijinxbassist 3/30/2021
请提供有关您的其他课程的更多详细信息。太阳能系统管理器是 UnityEngine.Object 吗?Instantiate 仅适用于 UnityEngine.Object 类型。就更改所有“副本”中的变量更改而言,这些副本必须使用相同的 ref 实例来存储数据。
0赞 derHugo 3/30/2021
但是,如果是(我猜是)类型,则您不能使用它来创建它!您应该收到有关它的警告SolarSystem_ManagerUnityEngine.ObjectMonoBehaviournew

答:

0赞 NandoErni 3/30/2021 #1

不应使用 关键字实例化 Unity 对象。你应该在编辑器中制作一个SolarSystem_Manager的预制件,并将其存储在某个变量中:new

  1. 将以下内容添加到您的班级中:

    [SerializeField] private GameObject _solarSystemManagerPrefab;

  2. 在编辑器中,创建一个预制件并将其拖放到 ._solarSystemManagerPrefab

  3. 现在你可以像这样实例化你的预制件:

    GameObject clone = Instantiate(_solarSystemManagerPrefab)