Решение
Решение вашей проблемы - создать базовый класс Enemy, который хранит здоровье и, возможно, содержит некоторые виртуальные функции поведения. Для каждого типа врага ваш вражеский класс наследовал бы от базового класса врага.
Например:
Enemy.cs
public class Enemy : Monobehaviour {
public int health;
};
EnemyType1.cs
public class EnemyType1 : Enemy {
//Unique enemy behaviour goes here
};
Это означает, что вы можете использовать
target.GetComponent<Enemy>().health;
, чтобы получить доступ к здоровью любого врага, не зная точно, что это такое.
Рекомендация
Вызов GetComponent очень ресурсоемкий, так что я лично сделал бы это
target.SendMessage("applyDamage", damageToDo, SendMessageOptions.DontRequireReceiver);
, и тогда в вашем вражеском классе вы получите
public class Enemy : Monobehaviour {
private int health;
public void applyDamage(int amount) {
health-=amount;
}
};
Документы единства хорошо объясните, что такое SendMessage и как его использовать. Таким образом, он пытается вызвать эту функцию в любом скрипте, связанном с объектом, и передаст ему аргумент. Если вам нужно отправить несколько аргументов, вам придется создать структуру и отправить ее вместо этого. Последний аргумент в SendMessage означает, что если он столкнется с чем-то, у кого нет функции, это не заставит игру выдать исключение, и cra sh