我有一个项目,我正在装载两架公路飞机(一个接一个),以创建一条无尽的道路。我还有一个脚本连接到相机,创建树木。所有的代码都完美无缺,树木被正确创建,但我想在它们离开相机的视线后将它们摧毁。
我的代码:
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);
答案 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
为真。空的游戏对象将始终跟随相机,因为它是孩子。
远离视线只意味着树木越过摄影机视野,因此当它们退出触发器时你可以将它们摧毁。
以下是您需要采取的步骤:
is trigger
设置为true的位置放置一个盒子对撞机,将其放置在适合相机视图的位置。OnTriggerExit(Collider other)