Внезапно наткнулся на что то, что не могу понять и найти решение, хотя оно логически должно быть элементарным. Имею пулю, имею стены (на них висит компонент
Level). У пули в событии
OnCollisionEnter нужно узнать стену в которую попали и изменить у неё переменную
health.
Пишу вот так:
void OnCollisionEnter(Collision col)
{
string name = col.gameObject.name;
if (name == "wall_1" || name == "wall_2")
{
Level wall = col.gameObject.GetComponent<Level>();
if (wall)
wall.health--;
}
Debug.Log("bullet collided with: "+name);
m.FreeEntity(body, gameObject);
}
условие
if (wall), никогда не срабатывает, откуда логически следует, что я неправильно ищу нужный мне компонент на полученом при столкновении GameObject'ом. Если его убрать получаю много следующего мата от юнити:
NullReferenceException: Object reference not set to an instance of an object
Shot.OnCollisionEnter (UnityEngine.Collision col) (at Assets/Scripts/Shot.cs:49)
Само столкновение происходит прекрасно, в лог строка записывается, пуля удаляется. Переменная
health у компонента
Level является
public-переменной.
Долго гуглил, но наверно я плохой гуглер, не нашёл решения. Не пойму, что я делаю не так?