更新到Unity 2018.3.0f2后,我无法在游戏运行时找到GameObjects预制件。在以前的版本中,我只是使用以下行:
GameObject prefabObject =
PrefabUtility.GetCorrespondingObjectFromSource(gameObject);
但是在更新之后,此函数仅返回null,因此我尝试了新函数:
但是它们全部返回null,但是我确定我会将预制件作为参数移交。有什么想法我在这里做错了吗?
答案 0 :(得分:0)
一旦编辑器开始播放(Application.isPlaying = true),与场景游戏对象的预制链接将中断(蓝色游戏对象变为灰色),因此您无法从中获取与预制相关的信息。
如果您确实需要在运行时访问此类信息的情况,则应将其另存为脚本组件中的序列化变量,以便以后在运行时可用。
例如:这是Mirror(Unity网络插件)正在做的简化工作,它通过发布资产ID相关的东西来帮助区分每个预制件,以在运行时在网络中生成事物。
[SerializeField] string m_AssetId; void OnValidate() // Which will be called on build or editor play { #if UNITY_EDITOR // Deposit UnityEditor API dependent into some field m_AssetId = UnityEditor.AssetDatabase.GetAssetPath( gameObject ); #endif }
无论如何,如果您要测试或寻找原始预制件,请运行编辑器脚本。 UnityEditor.PrefabUtility 很难找到使用它们的完整示例。
有关示例如何使用它们的信息,请参阅我的git存储库。