繁体   English   中英

如何为所有同级游戏对象禁用碰撞?

[英]How can I disable collisions for all sibling game objects?

我有一个生成器,每秒生成一个气球。 我想阻止这些气球与其他气球碰撞。 我可以看到如何从父级循环遍历子对象,但是我不知道如何在共享同一父级的其他子级对象之间循环。 所有气球都在同一父对象中生成。

目前我有这个,但显然不起作用。 我也尝试了transform.parent.transform但这也不起作用。 它仅产生一个气球,并且脚本在同一行上中断“对象未设置为对象的实例”。

var NewBalloon = Instantiate(balloons[0], transform.position, Quaternion.Euler(new Vector3(-90, 0, 0)));
NewBalloon.transform.parent = GameObject.Find("Balloons").transform;

foreach(Transform child in transform.parent)
{
      Physics.IgnoreCollision(NewBalloon.GetComponent<Collider>(), child.GetComponent<Collider>());
}

并非完全按照我的意图进行,但是我发现,如果转到"Edit" > "Project Settings" > "Physics" (在5.5版上),则可以禁用气球/气球的复选框,以阻止它们碰撞彼此。

编辑:这似乎是最好的方法。 无需为其添加脚本,它运行完美。

但我不知道如何遍历共享同一父对象的其他子对象。

不用了!

这真的很容易。 只需创建一个图层,然后将气球预制件放到该图层中即可。 假设是第9层。

现在,在Awake函数中运行此命令,以忽略该层中每个气球之间的碰撞:

Physics.IgnoreLayerCollision(9, 9, true);

如果要识别Collison,请运行以下命令:

Physics.IgnoreLayerCollision(9, 9, false);

而已。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM