Я создаю игру, в которой есть враги, я хочу иметь выстрелы в голову, чтобы у меня было 2 коллайдера: один в голову и один в тело. Я не могу найти какой-либо хороший способ сказать, что есть что в коде.
Я думал о решении, но мне не нравится it- другой тип коллайдера для головы и другой тип для тела (например, многоугольные и коробочные коллайдеры). Это работает, но я не думаю, что это достаточно хорошо (если я хочу добавить больше коллайдеров или иметь два одинаковых типа, которые не будут работать).
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
}
}
Я хочу как-то пометить коллайдеры, чтобы я мог различить их.
Вам необходимо создать открытые переменные типа BoxCollider2D и назначить коллайдеры. Когда происходит коллизия, вызовите оператор IF внутри OnTriggerEnter, чтобы увидеть, какой из них столкнулся. Это будет работать независимо от того, есть ли другие типы коллайдеров.
public class Example : MonoBehaviour
{
public BoxCollider2D box01;
public BoxCollider2D box02;
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.IsTouching(box01))
{
Debug.Log("1");
}
else if(collision.IsTouching(box02))
{
Debug.Log("2");
}
}
}
isTouching - это метод Unity, который возвращает логическое значение в зависимости от сравниваемого коллайдера.