【问题标题】:Hide/Unhide object in Unity3D via script通过脚本在 Unity3D 中隐藏/取消隐藏对象
【发布时间】:2014-10-24 17:01:02
【问题描述】:

我想在一切开始之前将我的部分场景设置为隐藏, 所以可以说我有一些isHidden(我试图找到)属性,我之前设置为true,或者在我的场景的第一帧。

在某些时候我想取消隐藏它并触发动画,我知道如何触发动画。 我发现隐藏对象的唯一方法是将其设置为:

SetActive(false);

它确实隐藏了,但是当我稍后在脚本中尝试使用它访问它时

GameObject.Find("gameObjectName");

它返回空值。 那么,通过脚本隐藏或隐藏GameObject 的正确方法是什么? 这不是Mesh,所以它没有网格渲染器。

【问题讨论】:

  • setactive 不影响查找,检查对象名称是否正确且唯一
  • 这是个名字:XwingScene 他是独一无二的。没有其他像这样调用的对象,当我在设置 SetActive(false) 后尝试访问它时,它返回 null
  • `这不是网格,所以它没有网格渲染器。`你的意思是它有包含网格的孩子吗?

标签: unity3d gameobject


【解决方案1】:

使用 Renderer.enabled

bool enabled;
Description

Makes the rendered 3D object visible if enabled.

示例代码:

public class ExampleClass : MonoBehaviour {
    void Show() {
        renderer.enabled = true;
    }
    void Hide() {
        renderer.enabled = false;
    }
    void HideChildren()
    {
         Renderer[] lChildRenderers=gameObject.GetComponentsInChildren<Renderer>();
         foreach ( Renderer lRenderer in lChildRenderers)
         {
              lRenderer.enabled=false;
         }
    }
    void ShowChildren()
    {
         Renderer[] lChildRenderers=gameObject.GetComponentsInChildren<Renderer>();
         foreach ( Renderer lRenderer in lChildRenderers)
         {
              lRenderer.enabled=true;
         }
    }


}

【讨论】:

  • 每个游戏对象都有一个渲染器?
  • Gameobject.renderer 是每个游戏对象的一部分。但并不是每个游戏对象都有一个渲染器,在这种情况下它是空的。好消息是任何可见的场景对象(如您所描述的)都必须具有渲染器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多