在物体看不见之后摧毁它?

时间:2014-09-17 22:08:56

标签: c# unity3d

我有一个项目,我正在装载两架公路飞机(一个接一个),以创建一条无尽的道路。我还有一个脚本连接到相机,创建树木。所有的代码都完美无缺,树木被正确创建,但我想在它们离开相机的视线后将它们摧毁。

我的代码:

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);

3 个答案:

答案 0 :(得分:1)

似乎你遇到了问题,破坏了正确的对象,在本例中是一棵树。

因此,为树Tree创建一个类。然后将它附加到您的树预制件上。在里面你想要检查你离视线有多远。

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

    }
}

答案 1 :(得分:1)

不要破坏它们,它会影响你的表现,而且没有必要。

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

然后你不必一次又一次地将游戏对象安装到你的游戏中

尼古拉

答案 2 :(得分:0)

您可以将空游戏对象添加为摄像机的子对象,然后在其上附加一个框架对撞机,其中is trigger为真。空的游戏对象将始终跟随相机,因为它是孩子。

远离视线只意味着树木越过摄影机视野,因此当它们退出触发器时你可以将它们摧毁。

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

  1. 创建空游戏对象作为相机的孩子
  2. is trigger设置为true的位置放置一个盒子对撞机,将其放置在适合相机视图的位置。
  3. 使用函数OnTriggerExit(Collider other)
  4. 向其添加脚本
  5. 如果其他是树,则销毁其他树。