问题是某些物体没有被对撞机探测到。我是对象池这些游戏对象,而不是实例化它们。它们由波浪汇集而成,每波有20-30个物体.
问题就在这里:第一波--所有的东西都被对撞机的碰撞探测到了。然后第二波和其余的波被对撞机忽略。有些可能被发现,但大多数都被忽略了。第二波直到第一波中的所有游戏物体都是setActive(false)时才开始,当它们击中OnCollisionEnter的对撞机时。
当禁用对象池或启用对象池时,没有什么不同,我检查了第一波和第二波中的两个游戏对象,它们都是相同的,刚体和对撞机都启用了默认设置,从第一次生成开始。
我遗漏了什么?为什么只有第一波对象池游戏对象工作,而不是重用的对象。
private void OnCollisionEnter(Collision collision)
{
if (collision.transform.GetChild(0).gameObject.tag == "Enemy")
{
Debug.Log("P: " + collision.contacts[0].point + " | N: " + collision.contacts[0].normal);
// Allow ALL Enemies to not be stopped by Impact
Physics.IgnoreCollision(collision.collider, GetComponent<Collider>());
}
}要生成的对象池代码。
GameObject enemy = ObjectPooler.SharedInstance.GetPooledObject("Enemy");
if (enemy!= null)
{
enemy.SetActive(true);
}要销毁的对象池代码
enemy.SetActive(false);我写了另一篇关于这个问题的文章,但在那篇文章中,我认为这是另一个问题,但它必须是这个问题,因为无论我在第一波中有多少物体,它们都会被探测到。只有2,3,4波被忽略。这些波中只有一些被检测到,而我猜被检测到的是对象池尚未使用的新游戏对象。请帮帮忙
发布于 2020-02-03 05:24:47
当敌人与玩家(想必)发生碰撞时,你会设置机器人对撞机来忽略对方。但是当你重生敌人时,你并不是在重置机器人与对撞机之间的无知。你可以通过
Physics.IgnoreCollision(collision.collider, GetComponent<Collider>(), true/false);
其中,真意味着对撞机会忽略对方,而伪平均对撞机会相互碰撞。
在链接中阅读更多关于Physics.IgnoreCollision的信息。
https://stackoverflow.com/questions/60033361
复制相似问题