OnTriggerEnter - это метод монобихического жизненного цикла.Вы не должны вызывать это из своего собственного кода;он будет автоматически вызываться при обнаружении столкновений.
Более того, логика в вашем коде сейчас кажется неправильной, это ...
"Каждый кадр проходит по всем жестким телам в сцене, и если найден 1на 10-м слое уничтожьте FoodGO "
Просто удалите весь метод обновления и вставьте if
в свой метод Collision, и он должен работать:
[RequireComponent(typeof(Rigidbody), typeof(Collider))]
public class FoodEat : MonoBehaviour
{
private void OnTriggerEnter(collider other)
{
Debug.Log(other.gameObject.name + " on layer " + other.gameObject.layer);
if (other.gameObject.layer == 10)
Destroy(this.gameObject);
}
}
Несколькозаслуживающие внимания изменения вашего кода:
- Я удалил FoodGO, так как это GameObject, к которому прикреплен этот скрипт, вы можете получить к нему доступ, просто написав
gameObject
или this.gameObject
. - Я удаляю ссылку Rigidbody, поскольку она больше не используется, и, следовательно, весь метод Start ().
- Поскольку для работы этого кода требуется Rigidbody и коллайдер, я добавил атрибут [RequireComponent] в верхней части,что заставит Unity сообщить вам, если вы забыли добавить эти компоненты к объекту, к которому вы присоединяете этот скрипт.
- Я добавил Debug.Log, который печатает имя и слой на существе, которое сталкивается с едой,так йовы можете отладить и убедиться, что он работает как положено