【解决吧】DontDestroyOnLoad only works for root GameObjects or components on root GameObjects.

开发平台:Unity
编程平台:Visual Studio 2020以上
使用语言:C#

问题描述


|原译|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|
|--|--|
|现译|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|

备注:这是一个 Warnig + Normal 的警告组合消息。即时实际运行过程中达到效果,也仍需要注意这个问题的警告信息。

原因分析


  Unity 中 DontDestroyOnLoad() 用于场景发生变换时,保留该场景内特定对象至下一场景继续延用。对 非父对象(子对象)由于其本身不为根父对象,须解决父子层级关系后才可有效执行。而在一些情况中,例如 Scene 下根对象中,理论上使用 DontDestroyOnLoad(this.gameObject) 并不会违背 Unity 的解释。但仍然出现该类问题。

猜想(待验证):是否存在一个父对象未出现于 Scene 视图中。

解决方案:使用 transform.root 替代


public void Start()
{
    
    
	DontDesctroyOnLoad(this.gameObject.root);
}

  this.gameObject.root:返回该 GameObject 对象的最顶层级对象,如果没有则返回自身。绝不为 NULL。

猜你喜欢

转载自blog.csdn.net/qq_51026638/article/details/126599945