Menu
CoddyTech

显示与隐藏

本课属于 Coddy Unity 学习旅程的“Unity 脚本基础”单元。第 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

挑战

中等

按空格键隐藏桥,再让它显示出来。

  1. 在 Update() 中,当按下 Input.GetKeyDown(KeyCode.Space) 时,调用 bridge.SetActive(...) 来切换整座桥,包括碰撞体。
  2. 传入与当前状态相反的值:bridge.SetActive(!bridge.activeSelf);。

按“开始”,再按几次空格键:桥会消失,然后重新出现。接着按“检查”。

亲手试试

using UnityEngine;

public class BridgeSwitch : MonoBehaviour
{
    public GameObject bridge;

    void Update()
    {
        // 按下 Space 键会隐藏桥,再按一次就会重新显示。
    }
}

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器