Я просто повторю то, что все остальные здесь сказали:
Неактивный объект в Unity действительно неактивен , то есть он не получает никаких обновлений, не может сталкиваться с вещамии все вещи MonoBehaviour, которые обычно вызывают ваш код, тоже не работают.Вы должны вручную повторно активировать объект, используя ссылку, которую вы где-то кэшировали.
Но , вместо того, чтобы просто отключить весь объект, вы можете отключить компоненты , которые вы не хотите быть активными.
Пример:
private void OnTriggerEnter2D(Collider2D collision)
{
tapObject.GetComponent<Renderer>().enabled = false;
}
private void OnTriggerExit2D(Collider2D collision)
{
tapObject.GetComponent<Renderer>().enabled = true;
}
Это только деактивирует ваш компонент рендерера, но оставляет все остальное как есть.Таким образом, ваш объект все еще может сталкиваться, и он по-прежнему регистрируется, например, OnTriggerExit
.
Имейте в виду, что GetComponent<T>()
- это довольно дорогая операция , поэтому кэширование ссылок на компоненты - хорошая идея.Лучшим решением было бы начать со ссылки, создав для нее переменную и назначив ее в инспекторе.
Пример:
//Set in inspector
public Renderer renderer
private void OnTriggerEnter2D(Collider2D collision)
{
renderer.enabled = false;
}
private void OnTriggerExit2D(Collider2D collision)
{
renderer.enabled = true;
}