Menu
CoddyTech

Pokazywanie i ukrywanie

Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 48 z 85.

SetActive(false) wyłącza cały obiekt GameObject: nie jest rysowany, przestaje uczestniczyć w kolizjach, jego skrypty przestają otrzymywać wywołania Update(), a jego obiekty potomne również zostają wyłączone. SetActive(true) przywraca wszystko, a activeSelf informuje, czy obiekt jest włączony. Ten skrypt umieszczony na przycisku ukrywa drzwi wskazane w polu door po kliknięciu myszy:

public GameObject door;

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

Skrypt, który ukrywa własny obiekt za pomocą gameObject.SetActive(false), nie może go ponownie włączyć, ponieważ jego Update() przestaje działać. Dlatego przełącznik znajduje się na innym obiekcie, który ma referencję do obiektu, który pokazuje i ukrywa.

enabled wyłącza jeden komponent, pozostawiając resztę obiektu bez zmian. GetComponent<Renderer>().enabled = false sprawia, że obiekt staje się niewidoczny, ale jego collider nadal blokuje inne obiekty: to niewidzialna ściana. Skrypt z ustawieniem enabled = false nie otrzymuje już wywołań Update(), ale obiekt pozostaje w scenie, nadal jest rysowany i nadal uczestniczy w kolizjach, a jego pozostałe komponenty wciąż działają.

challenge icon

Wyzwanie

Średni

Spraw, aby naciśnięcie spacji ukrywało most i przywracało go.

  1. W Update(), po naciśnięciu Input.GetKeyDown(KeyCode.Space), wywołaj bridge.SetActive(...), aby przełączyć cały most wraz z koliderem.
  2. Przekaż wartość przeciwną do jego stanu: bridge.SetActive(!bridge.activeSelf);.

Naciśnij „Graj” i naciśnij kilka razy spację: most znika i pojawia się ponownie. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

public class BridgeSwitch : MonoBehaviour
{
    public GameObject bridge;

    void Update()
    {
        // Space ukrywa most, a kolejne naciśnięcie pokazuje go ponownie
    }
}

Wszystkie lekcje w sekcji Podstawy skryptów w Unity

Poćwicz samodzielnie: Edytor online Unity