显示与隐藏
本课属于 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() 调用,但对象仍留在场景中,依然会被绘制,也依然会发生碰撞,其他组件也会继续工作。
挑战
中等按空格键隐藏桥,再让它显示出来。
- 在
Update()中,当按下Input.GetKeyDown(KeyCode.Space)时,调用bridge.SetActive(...)来切换整座桥,包括碰撞体。 - 传入与当前状态相反的值:
bridge.SetActive(!bridge.activeSelf);。
按“开始”,再按几次空格键:桥会消失,然后重新出现。接着按“检查”。
亲手试试
using UnityEngine;
public class BridgeSwitch : MonoBehaviour
{
public GameObject bridge;
void Update()
{
// 按下 Space 键会隐藏桥,再按一次就会重新显示。
}
}
Unity 脚本基础中的所有课
自己练习: Unity 在线编辑器