我有两个不同的对手的敌人。 第一个是Box Collider,它被用作敌人的命中箱。
第二个是球形碰撞器,我想用它来探测玩家及其盟友。此对撞机将属性IsTrigger设置为true(BoxCollider不要)。
我的问题是,当我的玩家发射射弹时,它首先击中球体对撞机。 Sphere Collider被视为一个hitbox,我的敌人会受到伤害。 这是弹丸脚本:
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?
答案 0 :(得分:3)
这可以通过使用Layer-Based Collision Detection来实现。
您将播放器设置为一层,并将播放器设置为另一层。 然后,您可以在碰撞检测中使两个图层彼此忽略。
答案 1 :(得分:1)
如果您不希望它们基于层工作,因为在某些情况下这无法完全起作用,并且您无法使用较大的解决方法,则可以使用以下解决方案,该解决方案也应该会很好地工作。
public class "ClassNameHerë": 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)
}
}
}
使用此方法,即使它们与同一个游戏对象碰撞,当与特定的对撞机碰撞时,您也会执行某些操作。
但是请注意,对撞机没有id varialbe或类似的东西,它使团结能够检测同一游戏对象上相同类型对撞机之间的差异。但只要对撞机的型号不同,它就可以工作。 如果您要在单个对象上使用2个相同类型的对撞机,但仍想注意区别,则您很有可能必须对该类型对撞机使用unity的类定义,并添加一个公共int,float,long或string ID,您可以获取代码以获取与之交互的特定类型的对撞机。