通过脚本在 Unity3D 中隐藏/取消隐藏对象

Posted

技术标签:

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

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

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

SetActive(false);

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

GameObject.Find("gameObjectName");

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

【问题讨论】:

setactive 不影响查找,检查对象名称是否正确且唯一 这是个名字:XwingScene 他是独一无二的。没有其他像这样调用的对象,当我在设置 SetActive(false) 后尝试访问它时,它返回 null `这不是网格,所以它没有网格渲染器。`你的意思是它有包含网格的孩子吗? 【参考方案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 是每个游戏对象的一部分。但并不是每个游戏对象都有一个渲染器,在这种情况下它是空的。好消息是任何可见的场景对象(如您所描述的)都必须具有渲染器。

以上是关于通过脚本在 Unity3D 中隐藏/取消隐藏对象的主要内容,如果未能解决你的问题,请参考以下文章

在unity3d里怎样隐藏物体?

unity3D ngui 插件 关于隐藏和显示游戏对象的问题

谷歌脚本表隐藏/取消隐藏

unity3D中GameObject.Find()Transform.Find查找隐藏对象分析

Unity3d如何写一个用可视化的按钮控制物体的显示和隐藏的脚本?

Unity3d如何写一个用可视化的按钮控制物体的显示和隐藏的脚本?