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都会被破坏
这将不是可扩展的方法。您会发现,随着越来越多的GameObject在场景中活跃起来,它对您的游戏性能产生了严重影响。
我建议您添加一个延伸到所有游戏区域边界并位于此“ -5” z位置的平面。为飞机提供对撞机触发器,并销毁所有触摸飞机的物体。留下没有纹理的平面(又名不可见)。
这将消除在每帧中发生的更新中将带来的巨大负担。
归档时间: |
|
查看次数: |
77 次 |
最近记录: |