GameObject 不在层次结构中,但其脚本的 Update 被调用?

问题描述 投票:0回答:3

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

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

我在更新中添加了这一行:

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对象

unity-game-engine invisible gameobject
3个回答
0
投票

实例化预制游戏对象时,由于某种原因,它是使用隐藏标志创建的。为了解决这个问题,我们添加了代码:

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);

没有工作。


0
投票

(抱歉,如果这不是正确的写法,但注释太短,无法格式化)

我认为这并不完全正确。

这个隐藏的游戏对象不是通过脚本创建的。我将预制件拖到场景中,然后不知何故我没有完全删除预制件。 (或者甚至没有删除,只是将其隐藏)

它在层次结构中消失了,但并未完全删除。 在我们通过脚本使对象可见后,现在它是可见的。 (但仅限于播放模式,所以我无法删除它,因为它在场景视图中不可见)

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

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

-FlameStrike - 带有动画、FlameStrike.cs 脚本等的游戏对象。

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

但是当我们找到剩下的隐藏物体后,它是这样的:

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

(就像将粒子系统对象的粒子系统组件添加到此 FlameStrike 对象中一样)

然后将其隐藏。有这个的热键吗? :D 因为这不是脚本相关的问题,我在编辑器中这样做了。


0
投票

我刚刚遇到了类似的问题:

  • 在编辑器中进入播放模式
  • 实例化()一个对象
  • 设置
    instance.hideFlags = HideFlags.DontSaveInBuild | HideFlags.DontSaveInEditor
  • 退出播放模式
  • 再次进入播放模式(不执行任何操作)

旧对象仍在调用 Update()。

我的解决方法是不设置这些标志,如果

Application.isPlaying

© www.soinside.com 2019 - 2024. All rights reserved.