unity 隐藏 gameobject

2015年01月20日 10:34 0 点赞 0 评论 更新于 2025-11-21 14:53

在开发过程中,我们常常会遇到这样的情况:一些常用的操作,在真正需要使用时却一时想不起来。例如,在 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 及其子对象。

作者信息

feifeila

feifeila

共发布了 3994 篇文章