GameObject不在hieararchy中,但是它的脚本更新被称为?

时间:2016-02-02 09:09:39

标签: unity3d invisible gameobject

现在我面对一个幽灵物体。

我删除了一个附加到对象的脚本。但由于某种原因,脚本的更新功能总是被调用。

我将此行添加到更新:Debug.Log(name),其名称为Flamestrike,但是当我在层次结构中搜索它时,没有结果。

如果我将其位置设置为0,1,0(因此它应该可见),它在游戏中也不可见。

所以请帮助我,因为它让我发疯:(

修改

Debug.Log("a");
if(transform.parent == null) {
    transform.SetParent(GameObject.Find("Canvas").transform);
    Debug.Log("Canvas");
}

我也试过这个,它打印Canvas,所以它将其父设置为Canvas ,但我无法在Canvas下看到任何Flamestrike对象。 / p>

2 个答案:

答案 0 :(得分:0)

实例化预制GameObject时,出于某种原因,它是使用隐藏标志创建的。为了解决这个问题,我们添加了代码:this.gameObject.hideFlag = HideFlags.None;,它允许对象最终显示在层次结构中。

我能找到的唯一其他来源是这个答案,基本上没有解释它为什么会出现。 http://answers.unity3d.com/questions/921819/instantiated-prefabs-not-showing-up-in-hierarchy.html(引自下文)

  

发现问题,不知道为什么但是:这两种方式都有效(预制   是其他地方定义的GameObject。

     

Player1 = Instantiate(prefab) as GameObject;

     

Instantiate(prefab) as GameObject;

     

由于某种原因原型:

     

Instantiate(prefabName, position, rotation);

     

不工作。

答案 1 :(得分:0)

(对不起,如果这不是正确的写法,但评论太短,无法格式化)

我认为这不完全正确。

这个隐藏的gameObject不是通过脚本创建的。我把预制件拖到了现场,然后不知怎的,我没有完全删除预制件。 (或者甚至没有删除,只是把它隐藏起来)

它在hieararchy中消失了,但没有完全删除。 在我们通过脚本显示对象后,现在它是可见的。 (但仅限于播放模式,因此我无法删除它,因为它在场景视图中不可见)

它有一些有趣的组件/属性。 原始故事:

FlameStrike - 用于缩放目的的容器(空游戏对象)

-FlameStrike - 一个带动画的游戏对象,FlameStrike.cs脚本等。

- 粒子系统 - 一个部分。具有这个确切名称的系统。

但是在我们找到剩下的隐藏对象后,它是这样的: enter image description here

所以我不明白我做了什么。它删除了预制件的某些部分,但也混合了一些部件,

(比如将粒子系统对象的粒子系统组件添加到此FlameStrike对象中)

然后将其隐藏起来。这有热门吗? :D因为它不是与脚本相关的问题,所以我在编辑器中这样做了。