Menu
CoddyTech

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

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

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

Задание

Средне

Сделай так, чтобы клавиша Space скрывала мост и возвращала его обратно.

  1. В Update() при нажатии Input.GetKeyDown(KeyCode.Space) вызови bridge.SetActive(...), чтобы переключать состояние всего моста, включая коллайдер.
  2. Передай противоположное значение его состояния: bridge.SetActive(!bridge.activeSelf);.

Нажми «Играть» и несколько раз нажми Space: мост исчезает и появляется снова. Затем нажми «Проверить».

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

using UnityEngine;

public class BridgeSwitch : MonoBehaviour
{
    public GameObject bridge;

    void Update()
    {
        // Space скрывает мост, а следующее нажатие снова показывает его
    }
}

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

Потренируйтесь самостоятельно: Песочница Unity