Top.Mail.Ru
Ответы

Unity. Как отключить видимость объекта в камере

Моя задача такова: я хочу через скрипт сделать так, чтобы камера не отрисовывала определённый объект, но НЕ используя теги и слои.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

Шейдеры помогут решить такую задачу, ценой быстродействия и времени разработки. Но...

Вы точно понимаете, для чего нужны тэги и слои?
Тэги - инструмент для прототипирования, без них вполне можно обойтись в любом проекте, они не обеспечивают уникальных возможностей.
Слои - ключевой инструмент для решения проблемы "объект А должен игнорировать объект Б", будь то физика или рендеринг.

Как решается ваша проблема:
1) заводится СЛОЙ единственной задачей которого будет скрывать рендереры для главной камеры - этот слой исключается из Culling Mask камеры.
2) к объектам, которые могут быть сокрыты, добавляется компонент, который хранит путь в иерархии до всех скрываемых рендереров на объекте.
3) сами дочерние объекты с рендерерами не должны быть нагружены лишними логическими компонентами, чтобы изменение их слоя никак не повлияло, например, на физику (вы, полагаю, как раз этой проблемы пытаетесь избежать, отказываясь от слоёв).
4) когда выполняется условие для скрытия / раскрытия объекта, управляющий компонент выносит свои дочерние рендереры на скрытый слой, или (при раскрытии) возвращает их на изначальный слой (не обязательно Default - можно сделать чтобы компонент запоминал слои рендереров перед сокрытием).

Если решение вам не подходит, пожалуйста, объясните почему избегаете слоёв - инструмента предназначенного именно для решения таких проблем.

Аватар пользователя
Мыслитель

Можно по имени:
GameObject.Find("object_name").SetActive(false);

можно по ссылке
public GameObject obj = null; //<- в инспекторе перетащить нужный объект в это поле
...
obj.SetActive(false);

если не подходит деактивация объекта, можно сделать невидимым через
GetComponent < Renderer >().enabled = false;

Без слоев никак
gameObject.layer = index; // индекс слоя