реализацию интерфейса через метод триггера? Пишу такой код, но он нерабочий:
void OnTriggerEnter2D(Collider2D col)
{
var tempMonoArray = col.gameObject.GetComponents<MonoBehaviour>();
foreach (var monoBehavior in tempMonoArray)
{
IDamagable tempColliable = monoBehavior as IDamagable;
if (tempColliable != null) tempColliable.TakeDamage(damage); break;
}
}
Переменная tempColliable все время возвращает null, хотя в классе есть реализация интерфейса.
TryGetComponent<IDamageble> попробуй (вместо всего безобразия с массивом и <MonoBehaviour>)
Без массива пробовал уже IDamagable obj = col.gameObject.GetComponent<IDamagable>(); все равно null все время возвращал. На форуме нашел ответ с массивом, но и он нерабочий. Хорошо, спасибо, попробую ваш способ.
Код рабочий, а твой сетап в Unity скорее всего нет. Смотри что за объект приходит и есть ли на нём (в юнити) твой IDamageable скрипт.
Какой объект приходит проверял уже через Debug.Log и скрипт есть с реализацией интерфейса, который подключен как компонент объекта. Если вместо проверки реализации интерфейса напишу проверку на тег col.CompareTag("Enemy"), то все работает. Но мне нужно именно через проверку реализации интерфейса проверять. Буду тестить и разбираться
Ты ведь буквально монобехи вытащил все с объекта. Продебажь, что там есть нужный, а если нет, то ищи проблему уже. Каст MonoBehaviour в IDamageable точно должен работать, если интерфейс реализован.
как так. это же ищет компонент
реализация правильная вроде
Он и интерфейсы находит отлично
Обсуждают сегодня