【问题标题】:Object resetting after loading a scene for the second time in Unity [duplicate]在Unity中第二次加载场景后对象重置[重复]
【发布时间】:2016-12-04 17:55:10
【问题描述】:

我有一个包含三个场景、两个关卡场景和一个菜单场景的游戏。当我第一次在关卡场景上按播放时,一切正常,但是当我进入菜单场景然后返回关卡场景时,

附加到 NetworkManager GameObject 的脚本上的引用已重置。例如,在下图中显示的脚本中,除了链接到我的资源中的预制件的引用之外,所有引用都已重置。

我尝试用代码分配每个变量,而不是手动分配,但即使这样也行不通。

这个游戏对象确实有 dontdestroyonload。为什么这些引用会在此对象上专门重置?

【问题讨论】:

  • 你所做的一切都是非常错误的 :) 幸运的是解决方案非常简单:stackoverflow.com/a/35891919/294884
  • @JoeBlow 你知道有什么教程可以教我如何进行过渡吗?我不确定如何将所有常规脚本、声音效果等放在预加载场景中。这个预加载场景是必需品吗?我可以在转换之间创建一个带有加载动画的场景吗?
  • @JoeBlow 我已经为这个游戏附加了一百多个脚本,而且它变得有点复杂。我不敢相信我竟然不知道这一点就走了这么远。
  • 嘿@aaronge - 对,像你这样有经验的程序员开始使用 Unity 在 Unity 中是完全正常的,因为 Unity 的文档为零,而且其中有一些非常愚蠢的东西,所以会发生这样的问题!我的意思是拥有一个没有“内置”预加载场景概念的游戏引擎是疯狂的,你知道吗?彻底的疯狂。当他们终于开始加入这个概念时,它真的会令人难以置信地减少 50% 的关于 Unity 的 QA 问题,呵呵。 Unity 就是这样 - 多年来他们拥有这个极其可怕的 UI 系统 - 但现在是一个非常好的系统(“终于”)。
  • 谢谢@JoeBlow。我最近添加了一个加载场景,但它不能正常工作。像你这样有经验的程序员会介意看看吗?

标签: unity3d


【解决方案1】:

我没有足够的代表发表评论,但是您是否在添加对对象的引用后保存了场景?

Answer(作者 Aaron Ge):我取消选中 Don't Destroy On Load and Run In Background,然后我的问题就解决了。我不确定这如何解决了我的问题,但确实如此。

可能的解释:http://answers.unity3d.com/questions/734445/scripts-in-other-scenes-still-executing.html

如果您对放置在场景中的对象使用 DontDestroyOnLoad,请确保您:

只加载该场景一次。这通常称为加载场景。该场景仅包含某些管理器对象,它会立即切换到菜单场景/其他...您永远不会再次加载第一个场景。

如果您想再次加载场景并且在一个或多个对象上使用了 DontDestroyOnLoad,则必须手动销毁对象。您无法阻止再次创建对象,因为它们是场景的一部分。通常,当您加载新场景时,所有对象都会自动销毁,DontDestroyOnLoad 可以防止这种情况发生。

【讨论】:

  • 是的,不是这样。 @杏仁
  • 如果您首先播放菜单场景而不是启动关卡并返回它,是否会出现同样的问题?
  • 不,我的菜单场景完全不受此影响。在我的关卡场景中,只有这个特定的游戏对象受到此问题的影响。 @杏仁
  • 请允许我澄清一下。如果您启动菜单场景,然后转到您的关卡场景,对象是否缺少参考? (自从我在 Unity 中工作以来已经有一段时间了,但除非游戏对象是静态场景的一部分,否则你必须动态创建它们,然后将它们分配给你的脚本引用 onstart()。)
  • 不,我可以从我的菜单场景开始,然后进入我的关卡场景,所有引用都完好无损@Almond
【解决方案2】:

我取消选中 Don't Destroy On Load and Run In Background,然后我的问题得到了修复。我不确定这如何解决我的问题,但它确实解决了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多