我正在创建一个有敌人的游戏,我希望游戏中有爆头,所以我有2个对撞机:一个撞到头部,一个撞到身体。我找不到任何好的方法来判断代码中的哪个。
我想到了一个解决方案,但我不喜欢它-头部的碰撞器类型不同,而身体的碰撞器类型也不同(例如多边形和盒子碰撞器)。它可以工作,但我认为它不够好(如果我想添加更多对撞机,或者有两个同类型的对撞机不起作用)。
virtual protected void OnTriggerEnter2D(Collider2D collider2D)
{
if (collider2D.gameObject.tag.Equals("Zombie"))
{
Destroy(gameObject);//destroy bullet
Zombie zombie = collider2D.gameObject.GetComponent<Zombie>();
if (collider2D is BoxCollider2D)
zombie.HeadShot(demage);//headshot
else zombie.BulletHit(demage);//normal hit
}
}
我想要一种以某种方式标记对撞机的方法,以便在它们之间进行区分。
答案 0 :(得分:0)
您需要创建BoxCollider2D类型的公共变量并分配对撞机。发生冲突时,请在 OnTriggerEnter 内调用IF语句,以查看发生冲突的情况。无论是否存在更多相同类型的对撞机,这都将起作用。
0 matches found
isTouching是一种Unity方法,该方法根据正在比较的对撞机返回布尔值。
答案 1 :(得分:0)
我建议不要将所有对撞机都添加到同一GameObject
上,而是给每个对撞机自己的子对象GameObject
(这样一来,您还可以在场景视图中轻松查看哪些对撞机属于哪个轮廓;))
然后,您可以使用带有枚举的类来定义您在那里拥有的对撞机类型:
public class BodyPart : MonoBehaviour
{
public BodyPartType Type;
}
public enum BodyPartType
{
Head,
LeftArm,
RightArm,
Body,
LeftLeg,
RightLeg
}
并将其附加到每个对撞机旁边的所有身体部位。
那么你可以做类似的事情
virtual protected void OnTriggerEnter2D(Collider2D collider2D)
{
if (collider2D.gameObject.tag.Equals("Zombie"))
{
Destroy(gameObject);//destroy bullet
// Note you then should use GetComponentInParent here
// since your colliders are now on child objects
Zombie zombie = collider2D.gameObject.GetComponentInParent<Zombie>();
var bodyPart = collider2D.GetComponent<BodyPart>();
switch(bodyPart.Type)
{
case BodyPartType.Head:
zombie.HeadShot(demage);//headshot
break;
// you now could differ between more types here
default:
zombie.BulletHit(demage);//normal hit
break;
}
}
}