Menu
CoddyTech

Показать и скрыть

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 34 из 67.

SetActive(false) выключает весь GameObject: он не отображается, больше не сталкивается с другими объектами, скрипты на нём перестают получать вызовы Update(), и его дочерние объекты тоже выключаются. SetActive(true) возвращает всё обратно, а activeSelf показывает, включён ли объект. Этот скрипт на кнопке скрывает дверь из своего поля door при щелчке мышью:

public GameObject door;

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        door.SetActive(false);
    }
}

Скрипт, который скрывает собственный объект с помощью gameObject.SetActive(false), не может включить его обратно, потому что его Update() больше не выполняется. Поэтому переключатель находится на другом объекте и хранит ссылку на объект, который он показывает и скрывает.

enabled выключает один компонент, не затрагивая остальную часть объекта. GetComponent<Renderer>().enabled = false делает объект невидимым, но его коллайдер по-прежнему блокирует другие объекты: получается невидимая стена. Скрипт с enabled = false больше не получает вызовы Update(), но объект остаётся в сцене — по-прежнему отображается и сталкивается с другими объектами, а остальные его компоненты продолжают работать.

challenge icon

Задание

Средне

Скрипт рычага хранит мост в своём поле bridge. Сделай так, чтобы клавиша Space управляла мостом: первое нажатие скрывает его, следующее возвращает, и так далее — одно переключение на каждое нажатие.

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

Нажми Play, несколько раз нажми Space, затем Check.

Попробуйте сами

using UnityEngine;

public class BridgeSwitch : MonoBehaviour
{
    public GameObject bridge;

    void Update()
    {
        // Space скрывает мост, а повторное нажатие снова его показывает
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы скриптинга в Unity