Unity3d 在场景之间移动某些对象的统一模式?

Unity3d 在场景之间移动某些对象的统一模式?,unity3d,Unity3d,我正在寻找一种在场景之间转换的模式,将一个对象的一个实例移动到下一个场景,然后将其返回到前一个场景,但不破坏前一个场景中的其他对象。以下是上下文: 当我的游戏加载时,它连接到我的服务器,以获取玩家可以控制的角色列表,并从预设中动态实例化它们。 加载脚本将每个角色游戏对象移动到主场景,然后加载该场景。 现在,主场景中有可以与之交互的角色。到目前为止,一切顺利。其中一个命令是拾取特定角色并将其发送到具有自己的任务场景的任务中。 我可以将该角色移动到任务场景,并在任务完成后将其移回。但是,其他不在任务

我正在寻找一种在场景之间转换的模式,将一个对象的一个实例移动到下一个场景,然后将其返回到前一个场景,但不破坏前一个场景中的其他对象。以下是上下文:

当我的游戏加载时,它连接到我的服务器,以获取玩家可以控制的角色列表,并从预设中动态实例化它们。 加载脚本将每个角色游戏对象移动到主场景,然后加载该场景。 现在,主场景中有可以与之交互的角色。到目前为止,一切顺利。其中一个命令是拾取特定角色并将其发送到具有自己的任务场景的任务中。 我可以将该角色移动到任务场景,并在任务完成后将其移回。但是,其他不在任务中且不应该在任务场景中的角色现在被销毁,因为主场景已卸载。 我正在寻找一种模式来实现这一点。我读到的大部分内容都建议使用DontDestroyOnLoad,但这实际上会将所有角色移动到所有场景中,这会导致任务场景中的角色太多。另一种选择可能是创建一个包含所有角色信息的游戏对象,在场景之间传递这些信息,并在每个场景中使用逻辑来重新实例化该场景中的相应角色。这感觉像是一个很大的开销,因为我没有其他理由不断擦拭和重新创建它们。也许第三种选择是重组我的游戏,使任务场景只是添加到主场景中,并显示为某种覆盖,以阻止/捕获输入。这听起来很混乱,而且可能会有针对Android的性能问题


有人对此有好的模式吗?

将评论转化为答案

可以从任何场景访问静态变量。根据需要的每种类类型的数量,您可以实例化一个静态类,也可以实例化类的静态列表/数组。向其中添加对象后,您可以从任何位置访问它们


只要这不会成为数千个大型对象的内存问题,例如,对于您的目的来说,这应该可以很好地工作,一些角色无论如何都需要在整个游戏中保持。

使用场景管理器,您可以创建一个空场景,在这个空场景中,您可以放置所有要保留的对象

卸载第一个场景(不是您创建的场景)并加载下一个场景后

加载下一个场景时,将所有对象从创建的场景转移到刚刚加载的场景

PS:您同时有多个场景加载。有关更多信息,请查看此链接:

每个角色是否需要多个实例?静态声明就可以了,只要你不需要2个弓箭手或者其他什么。是的,我需要多个角色,这就是为什么我有这个问题,移动一个角色相对简单。每个角色都是一个探索者。你,玩家,可以雇佣他们导致不止一个,你可以让他们冒险。每次探险只能有一个探险者,其他探险者在不冒险时需要留在主场景中。静态列表应该可以工作。创建它们时,将它们添加到列表中。是的,我发现有多个字符。我假设每个角色类型有一个类,但每个类1向导可能只有一个实例,一个弓箭手,一个小偷,等等。啊,不,我有一个类资源管理器,其中可能有n个实例,可能最多有一个合理的数字,比如10个太多的嘴,超出了这个数量!。但静态变量的用途并非如此。此外,它还会导致数据丢失。游戏对象集合在重新加载后将无法生存。所以不,这不是一个合适的答案。我总是在发帖前研究,除非这真的很愚蠢。这是我发帖前的推荐信。好吧,尽管有超过20票的赞成票,但这并不意味着它是正确的。我猜其中19个是初学者,他们只是很高兴有一个有效的解决方案。但这并不意味着它是正确的。静电有不同的用途。PlayerPrefs和DontDestroyOnLoad用于在场景或会话中保存数据。我并不是说您的信息不正确。我只是展示我的作品来展示我是如何想出这个主意的。根据答案,它似乎被接受并准确无误。仅供参考-我并没有百分之百地接受答案。我在我的singleton GameManager状态机中有一个探索者列表,基本上,对于每个场景,我都实例化探索者预置,并在GameManager中引用该探索者的统计信息。到目前为止工作得很好。列表本身不是静态的,但它是单例的一部分。