在一个物体看不见之后毁坏它

本文关键字:之后 看不见 一个 | 更新日期: 2023-09-27 18:22:12

我有一个项目,我正在加载两个道路平面(一个接一个),以创建一条无尽的道路。我还有一个脚本附加到相机上,它可以创建树。所有的代码都运行得很好,树是正确创建的,但我想在它们离开相机的视线后销毁它们。

我的代码:

void generateSideTress()
{
    GameObject treeObj = GameObject.Instantiate(sideTres[Random.Range(0, sideTres.Length - 1)]) as GameObject;
    treeObj.transform.position = new Vector3(Random.Range(-80,-60), 0, playerObj.transform.position.z + 780);
    treeObj.transform.Rotate(0, Random.Range(0, 36) * 10, 0);
}

我想,如果我在一秒钟后摧毁它们(如下),可能会奏效,但事实并非如此;我毁了自己。

Destroy(treeObj, 1);

在一个物体看不见之后毁坏它

似乎在销毁正确的对象(在本例中为树)时遇到了问题。

因此,为树创建一个类Tree。然后把它挂在你的树上。在里面,你想检查你离视线有多远。

public class Tree : MonoBehaviour
{
    void Update()
    {
        if(Vector3.Distance(transform.position, Camera.main.transform.position) > 500)
            Destroy(gameObject);
    }
}

不要破坏它们,这会影响你的性能,没有必要这样做。

相反,查找如何禁用和游戏对象,因为你只需要有一个列表/数组,然后列表中有x个游戏对象,当它们不需要在场景中时,你禁用它并将其放在列表的后面,然后当你的游戏需要再次使用时,你只需重新打开它。。。

然后你不必一次又一次地在游戏中设置游戏对象

尼古拉

您可以添加一个空游戏对象作为相机的子对象,然后在其上附加一个带有is trigger true的长方体碰撞器。空的游戏对象将始终跟随摄影机,因为它是孩子。

脱离视线只是意味着树木脱离了相机的视野,所以当它们退出触发器时,你可以摧毁它们。

因此,以下是您需要采取的步骤:

  1. 创建空游戏对象作为摄影机的子对象
  2. is trigger设置为true的情况下,在其上放置一个长方体碰撞器,将其定位为适合摄影机视图
  3. 使用函数OnTriggerExit(Collider other)向其中添加脚本
  4. 如果对方是一棵树,就摧毁对方