проблема с OnBecame*
Проблема в том, что имею объект (группа), в котором лежат части (с MeshRenderer), а у самой группы его нет, так как он там и не нужен в принципе, так-как части и есть собранный объект:
Но этот код отказывается работать:
public class B : MonoBehaviour {
bool t = false;
void Update() {
if (t) {
print(1);
}
}
void OnBecameVisible() {
t = true;
}
void OnBecameInvisible() {
t = false;
}
}
Но как только я вешаю MeshRenderer на Group, начинает работать.
Почему так происходит?
Мне MeshRenderer не нужен на Group, он там бесполезен в принципе - это обычная группа, чтобы все лежало вместе и можно было передвинуть все части.
Как быть?
Ответы (1 шт):
Посмотрите документацию по OnBecameVisible:
Этот метод вызывается у всех скриптов, которые прикреплены к объектам, на которых есть Renderer.
Иными словами, то, на что вы жалуетесь - документированное поведение метода. Без наличия компонента Renderer юнити будет сложно определить "форму" объекта на сцене. А не зная форму, юнити не может понять попадает ли объект в камеру. Они могли бы сделать внутри механизм, который пробегался бы по дочерним элементам и каким-то образом, на основе дочерних Renderer прикидывал форму, но есть подозрение, что это было бы сильно затратно по ресурсам.
Выходов из вашей ситуации может быть несколько:
- Вешать скрипт на дочерние элементы, вместо родительской группы
- Написать скрипт, в котором вы будете задавать некоторый радиус объекта и вручную проверять попадает ли объект в указанную камеру, без методов а ля
OnBecomeVisible
