我有两个不同对撞机的敌人。第一个是盒子对撞机,它被用作敌人的日耳曼。
第二个是球体对撞机,我想用它来探测玩家和他的盟友。这个对撞机的属性IsTrigger设置为true ( BoxCollider没有)。
我的问题是,当我的玩家发射一个弹丸,它首先击中球对撞机。球体对撞机被当作希特勒盒来对待,我的敌人也会受到伤害。下面是抛射脚本:
void OnTriggerEnter (Collider col)
{
if (col.gameObject.tag == "Player")
{
AUnit a = col.gameObject.GetComponent<AUnit>();
if (a != null)
{
a.takeDamage(damage);
if (goThrough == false)
Destroy(gameObject);
}
}
}我的问题很简单,怎样才能只检测到BoxCollider而忽略SphereCollider?
发布于 2015-08-12 13:17:59
这可以通过使用基于层的碰撞检测来实现。
您将播放机设置为单层,将播放机抛出为另一层。
然后,您可以使两层在碰撞检测中相互忽略对方的。
发布于 2019-10-24 12:17:04
如果您不希望它们是基于层的,因为在某些情况下,如果没有大型的解决方案,这将无法完全工作,您可以使用以下解决方案,这也应该很好。
public class "ClassNameHere": MonoBehaviour
{
public BoxCollider2D Collider1;
public CircleCollider2D Collider2;
public CircleCollider2D Collider3;
private void OnCollisionEnter2D(Collision2D other)
{
if(other.collider==Collider1)
{
Debug.Log("1");
}
if(other.collider==Collider2)
{
Debug.Log("2");
}
if(other.collider==Collider3)
{
Debug.Log("3")
}
}
}使用这种方法,您将在与特定对撞机碰撞时执行特定的操作,即使它们位于同一游戏对象上。
但是请注意,Collider没有id变量或类似的东西,这允许统一检测同一游戏对象上相同类型的对撞机之间的差异。但是只要对撞机是另一种类型的,它就能工作。
如果希望在单个对象上使用相同类型的对撞机中的两个,但仍然希望注意到差异,则很可能必须转到该类型对撞机的统一类定义,并添加一个公共int、float、long或string ID,您可以在代码中获取这些ID,以获得与您交互的特定类型的对撞机。
https://stackoverflow.com/questions/31966157
复制相似问题