通过脚本在 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 ngui 插件 关于隐藏和显示游戏对象的问题
unity3D中GameObject.Find()Transform.Find查找隐藏对象分析