unity 隐藏 gameobject
在开发过程中,我们常常会遇到这样的情况:一些常用的操作,在真正需要使用时却一时想不起来。例如,在 Unity 中隐藏 GameObject 这一操作,就可能会让很多开发者在需要时犯难。因此,我将相关方法总结如下。
隐藏单个 GameObject
方法一:禁用渲染器
通过禁用 GameObject 的渲染器,可以让该对象在场景中不可见,但它仍然存在于场景中,其脚本和碰撞体等其他组件依然可以正常工作。示例代码如下:
gameObject.renderer.enabled = false;
需要注意的是,在 Unity 5 及更高版本中,renderer 已被弃用,应使用 GetComponent<Renderer>() 来获取渲染器组件,代码如下:
gameObject.GetComponent<Renderer>().enabled = false;
方法二:禁用 GameObject
直接禁用 GameObject 会使其及其所有子对象在场景中完全不可见,并且该对象上的所有组件(包括脚本、碰撞体等)都会停止工作。示例代码如下:
gameObject.SetActive(false);
隐藏子对象
若要递归地隐藏一个 GameObject 及其所有子对象,可以使用 SetActiveRecursively 方法(该方法在 Unity 5 及更高版本中已被弃用)。在旧版本中,示例代码如下:
gameObject.SetActiveRecursively(false);
在 Unity 5 及更高版本中,需要手动遍历子对象并逐个禁用,示例代码如下:
using UnityEngine;
public class HideChildren : MonoBehaviour
{
void Start()
{
HideAllChildren(transform);
}
void HideAllChildren(Transform parent)
{
foreach (Transform child in parent)
{
child.gameObject.SetActive(false);
HideAllChildren(child);
}
}
}
通过上述方法,你可以根据具体需求灵活地隐藏 Unity 中的 GameObject 及其子对象。