Mob*_*dde 0 c# unity-game-engine
我正在创建一个程序生成的游戏,它将永远生成新的“地形”,这样做我的游戏开始滞后,所以我尝试卸载一些块,稍后我想再次加载(如果玩家再次回到那个特定位置)...
这是我的卸载代码:
GameObject _tmp = MapGeneration.Map[Mathf.Abs(y)][x];
DestroyImmediate(MapGeneration.Map[Mathf.Abs(y)][x].gameObject);
MapGeneration.Map[Mathf.Abs(y)][x] = _tmp;
Run Code Online (Sandbox Code Playgroud)
后来当我尝试再次实例化该块时:
Instantiate(MapGeneration.Map[Mathf.Abs(y)][x].gameObject, new Vector3(x, y, 0), Quaternion.identity);
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
MissingReferenceException:“GameObject”类型的对象已被销毁,但您仍在尝试访问它。您的脚本应该检查它是否为空,或者您不应该销毁该对象。UnityEngine.Object.Internal_InstantiateSingle(UnityEngine.Object数据,Vector3位置,四元数旋转) UnityEngine.Object.Instantiate(UnityEngine.Object原始,Vector3位置,四元数旋转)MapGeneration.Update()(位于Assets/Scripts/MapGeneration.cs:53 )
小智 5
您不想销毁该对象,而是想禁用它,以便它不占用处理资源。使用Destroy()
意味着该物体消失了,完全消失了。
看一下SetActive()
。
http://docs.unity3d.com/ScriptReference/GameObject.SetActive.html
它本质上是相当于检查器面板中对象/组件左上角的小复选框的代码。当不活动时,引擎将“跳过”它,但这还包括 和 等函数Find()
,GetComponent()
因此在将游戏对象设置为不活动之前,请确保您有一个存储的对游戏对象的引用,否则您将无法再次“发现”它。
归档时间: |
|
查看次数: |
2528 次 |
最近记录: |