0

如何检测一个游戏对象是否同时与其他两个特定对象发生碰撞?

这是我打算做的,但它不起作用:

void OnCollisionEnter (Collision col)
{

if(col.gameObject.name == "object1" && "object2")
    {
        Destroy(gameObject);
    }
}

如何更正这段代码?

4

2 回答 2

1

如果您与 2 个对象发生碰撞,则 OnCollisionEnter 方法将被调用两次,因此您必须跟踪它们的游戏对象或名称。

List<string> contacts = new List<string>();
void OnCollisionEnter (Collision col)
{
    contacts.Add(col.gameObject.name);
    if(contacts.Contains("object1") && contacts.Contains("object2"))
    {
        Destroy(gameObject);
    }
}
void OnCollisionExit(Collision col)
{
    contacts.Remove(col.gameObject.name);
}

但请记住添加参考以使列表正常工作

using System.Collections.Generics;
于 2015-10-04T14:48:47.473 回答
0

如果您正在检查有关 collison 触发的任何事件的碰撞,例如Collider.OnCollisionEnter Collider.OnCollisionStay Collider.OnCollisionExit,您可以从事件传递的参数中获取所有ContactCollision

Collision.contacts您可以gameObject通过枚举ContactPoints inCollision.contacts和 this 来获得 : ContactPoint.otherCollider.gameObject并检查其名称:)

希望它有所帮助:)

更多信息:碰撞联系人 - Unity Docs

于 2015-10-03T14:45:02.247 回答