Перейти к содержимому

Unity как скрыть объект

  • автор:

Создание и уничтожение игровых объектов (GameObjects)

Некоторые игры имеют постоянное количество объектов на сцене, однако обычно персонажи, сокровища и другие объекты создаются и удаляются во время игры. В Unity, игровой объект (GameObject) может быть создан используя функцию Instantiate, которая делает копию существующего объекта:-

public GameObject enemy; void Start() < for (int i = 0; i < 5; i++) < Instantiate(enemy); >> 

Заметьте, что объект с которого берется копия не обязан присутствовать на сцене. Гораздо чаще используется префаб, который был перетащен на открытую переменную (public variable) из файлов проекта в панели Project. Также, копируя игровой объект (GameObject), вы копируете все компоненты оригинального объекта.

Также есть функция Destroy, которая уничтожит объект после того, как загрузка кадра будет завершена или опционально после короткой паузы:-

void OnCollisionEnter(Collision otherObj) < if (otherObj.gameObject.tag == "Missile") < Destroy(gameObject,.5f); >> 

Заметьте что функция Destroy может уничтожать отдельные компоненты без влияния на сам объект. Частая ошибка — писать что-то вроде этого:-

 Destroy(this); 

…что на самом деле уничтожит только вызывающий скриптовый компонент, вместо того, чтобы уничтожить игровой объект, к которому присоединен этот скрипт.

Как в редакторе Unity скрыть объект на сцене, но что бы в игру он попал

Есть галка рядом с названием объекта в инспекторе — она скрывает объект в редакторе и в игру он не попадает. Как сделать что бы попадал, включать/выключать постоянно не вариант. Нашел скриншот http://answers.unity3d.com/questions/578323/hide-object-in-editor-only.html, где такое взять? Есть еще в Блендере отдельно глаз скрыть в редакторе, отдельно в рендере.

#1
20:56, 2 июля 2017

По той же ссылке есть простое решение с использованием Layers

#2
21:13, 2 июля 2017

Удалить / скрыть объект

Убрать (удалить) объект можно через функцию Destroy() .

private void OnTriggerEnter(Collider other) < // Убрать текущий объект Destroy(gameObject); // Убрать указанный объект Destroy(GameObject.Find("Cube")); // Удалить объект, которого коснулись if (other.tag == "Enemy") < Destroy(other.gameObject); >>

Через данный код можно реализовать сбор предметов или уточнижение врагов.

Также можно указать, через какое время надо удалить объект.

private void OnTriggerEnter(Collider other) < // Убрать текущий объект через 2 секунды Destroy(gameObject, 2); >

Скрыть объект

Скрыть объект можно через функцию gameObject.SetActive() .

private void OnTriggerEnter(Collider other) < // Скрыть текущий объект gameObject.SetActive(false); // Скрыть объект, которого коснулись if (other.tag == "Enemy") < other.gameObject.SetActive(false); > >

Объект просто скрывается, его можно в любой момент снова показать в игре.

При выполнении функции gameObject.SetActive() также снимется галочка активности объекта.

Unity. gameObject.SetActive

Обновлено: 05 февраля 2021

Комментарии

Авторизуйтесь, чтобы добавлять комментарии

как скрыть объект, а принятую им тень оставить

Я новичек в вирее, поэтому прошу сильно не пинать. Мне нужно, чтобы принимающаяя тень поверхность (пусть гладкая стена), при окончательном результате отсутствовала, а тень, которая на нее падает от других предметов оставалась.

Mug
Активный участник

Рейтинг 17

Наводка — нужно использовать стандартный материал Matte/Shadow, либо виреевский VRayMtlWrapper, которые имеет параметры, аналогичные первому.
Более подробно поищи в нете, да и на рендере покапайся.

MWG
Модератор форума

Рейтинг 124

Стене присваиваете любой материал.
Потом в окне проекции правый клик на стене.
Врей пропертис
Справа вверху ставите галку «матте обжект».
Чуть ниже: «Альфа контрибушн» — «-1»
И еще ниже ставите галки «Шадов» и «Аффект альфа».
Файл сохраняете в формат. поддерживающий альфа-канал — png, tga.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *