如何检测一个游戏对象是否同时与其他两个特定对象发生碰撞?
这是我打算做的,但它不起作用:
void OnCollisionEnter (Collision col)
{
if(col.gameObject.name == "object1" && "object2")
{
Destroy(gameObject);
}
}
如何更正这段代码?
如果您与 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;
如果您正在检查有关 collison 触发的任何事件的碰撞,例如Collider.OnCollisionEnter
Collider.OnCollisionStay
Collider.OnCollisionExit
,您可以从事件传递的参数中获取所有Contact
点Collision
Collision.contacts
您可以gameObject
通过枚举ContactPoint
s inCollision.contacts
和 this 来获得 :
ContactPoint.otherCollider.gameObject
并检查其名称:)
希望它有所帮助:)
更多信息:碰撞联系人 - Unity Docs