现在我面对着一个幽灵物体。
我删除的对象附加了一个脚本。但由于某种原因,脚本的更新函数总是被调用。
我在更新中添加了这一行:
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对象。
实例化预制游戏对象时,由于某种原因,它是使用隐藏标志创建的。为了解决这个问题,我们添加了代码:
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);
没有工作。
(抱歉,如果这不是正确的写法,但注释太短,无法格式化)
我认为这并不完全正确。
这个隐藏的游戏对象不是通过脚本创建的。我将预制件拖到场景中,然后不知何故我没有完全删除预制件。 (或者甚至没有删除,只是将其隐藏)
它在层次结构中消失了,但并未完全删除。 在我们通过脚本使对象可见后,现在它是可见的。 (但仅限于播放模式,所以我无法删除它,因为它在场景视图中不可见)
它有一些有趣的组件/属性。 原故事:
FlameStrike - 用于缩放目的的容器(空游戏对象)
-FlameStrike - 带有动画、FlameStrike.cs 脚本等的游戏对象。
--粒子系统-一部分。具有这个确切名称的系统。
所以我不明白我做了什么。它删除了预制件的一些部分,但也混合了一些部分,
(就像将粒子系统对象的粒子系统组件添加到此 FlameStrike 对象中一样)
然后将其隐藏。有这个的热键吗? :D 因为这不是脚本相关的问题,我在编辑器中这样做了。
我刚刚遇到了类似的问题:
instance.hideFlags = HideFlags.DontSaveInBuild | HideFlags.DontSaveInEditor
旧对象仍在调用 Update()。
我的解决方法是不设置这些标志,如果
Application.isPlaying