如何销毁高度以下的游戏物体

Mil*_*lan 0 c# unity-game-engine

我正在尝试销毁任何处于一定高度以下的游戏对象(比方说-5)。

我尝试了foreach方法,该方法接受所有游戏对象,然后使用if比较它。如果比较为真,那么简单Destroy(go);

public float MinimalYLocation; 
GameObject[] Objects;

void Start () {
  Scene scena = SceneManager.GetActiveScene(); 
  Objects = scena.GetRootGameObjects(); 
}

void Update () {
  foreach (GameObject gobject in Objects) {
    float Height = gobject.transform.position.y;
    if (Height < MinimalYLocation){
      Destroy(gobject);
    }
  }
} 
Run Code Online (Sandbox Code Playgroud)

我设置了一个场景,其中包含3个不同高度的立方体和一个摄像机。脚本在相机中。当第一个立方体掉落时,它被破坏了。然后,我收到大量垃圾邮件进行管理:

MissingReferenceException:类型为“ GameObject”的对象已被破坏,但您仍在尝试访问它。

并且第二和第三个立方体没有被破坏。预期的响应是,所有游戏对象接触高度-5都会被破坏

Asy*_*nok 5

这将不是可扩展的方法。您会发现,随着越来越多的GameObject在场景中活跃起来,它对您的游戏性能产生了严重影响。

我建议您添加一个延伸到所有游戏区域边界并位于此“ -5” z位置的平面。为飞机提供对撞机触发器,并销毁所有触摸飞机的物体。留下没有纹理的平面(又名不可见)。

这将消除在每帧中发生的更新中将带来的巨大负担。

  • 哪种项目限制可以防止这种情况发生?您是否有一位教练明确说不允许这样做? (2认同)