Unity3d 我必须使用onPause/onStart/onDestroy吗

Unity3d 我必须使用onPause/onStart/onDestroy吗,unity3d,lifecycle,Unity3d,Lifecycle,我正在Unity中开发一款移动益智游戏,当我退出游戏到主屏幕并返回时-游戏从同一个位置继续,看起来很好(没有覆盖onPause/onStart),我是否遗漏了什么?退出时是否需要存储变量?人们通常储蓄什么?我担心将来会有虫子 我错过了什么 对 退出时是否需要存储变量 对 我担心将来会有虫子 是的,你会的。您将遇到丢失变量问题。这是你负责实施的责任。只是因为现在一切看起来都很好,工作正常并不意味着什么。这种行为在不同的平台和设备上有所不同,还取决于后台+当前可用ram上已经运行了多少应用程序。通常

我正在Unity中开发一款移动益智游戏,当我退出游戏到主屏幕并返回时-游戏从同一个位置继续,看起来很好(没有覆盖onPause/onStart),我是否遗漏了什么?退出时是否需要存储变量?人们通常储蓄什么?我担心将来会有虫子

我错过了什么

退出时是否需要存储变量

我担心将来会有虫子

是的,你会的。您将遇到丢失变量问题。这是你负责实施的责任。只是因为现在一切看起来都很好,工作正常并不意味着什么。这种行为在不同的平台和设备上有所不同,还取决于后台+当前可用ram上已经运行了多少应用程序。通常,您使用一个类来存储类中的所有重要变量,然后序列化并保存它们

请参阅解释如何执行此操作并提供包装器以轻松保存和加载任何类的文章。当团结即将中断时,您必须保存游戏状态。这些功能可用于检测此问题,您必须了解:


您必须决定使用哪一个来保存数据。有时,由于每个平台中每个平台的行为,您必须使用多个。阅读每个平台上的文档,了解他们在每个平台上的工作是值得的

我假设你说的是一个移动设备——你确定你实际上是在关闭应用程序(即打开正在运行的进程来杀死它),还是只是暂时挂起它,然后再回到它?如果你没有真正关闭它,应用程序将驻留在内存中,当你返回时不会丢失任何数据。但如果你真的关闭了应用程序,它将丢失你所有的游戏状态数据,除非它被保存在其他地方。所谓“关闭”,我的意思是-接听电话,甚至开始玩一个新的应用程序,然后在一小时后回到我的应用程序。。。例如,在iPhone上,当退出到主屏幕时,没有人真正关闭应用程序。在这种情况下,你实际上不是关闭应用程序,而是挂起应用程序,因为你的手机会将其保留在内存中(直到用完为止,此时它开始清除数据,为最近使用的应用程序腾出空间)。然而,关闭手机实际上会将其关闭。如果您的目的是即使在应用程序停止和重新启动的情况下仍保留游戏状态,则需要编写代码将数据保存到静态文件,然后在游戏启动时重新加载该文件。人们自己关闭应用程序——由于内存有限,他们通常会关闭空闲的应用程序,这样性能就不会受到影响。好吧,我明白了,我需要将每个类保存到一个json文件中。我是否需要为我拥有的每个类创建一个不同的包装器,或者是否有一些工具可以推荐(可能来自资产存储),可以自动扫描所有内容并进行恢复。另外,关于游戏对象的首选项(有些没有附加脚本),保存所有活动游戏对象(它们的转换/其他信息)的最佳方式是什么?否。我提供的包装器使用C#generic,这意味着它可以保存任何类而无需修改。在你剩下的问题中,我经常被问到这个问题。不要保存场景中的所有内容。保存需要保存的内容。此外,不保存变换。创建一个简单的类,该类保存该变换的位置、旋转和比例,并且应该保存该变换。我建议您创建一个SaveManager脚本,每个游戏对象在创建时都会注册到该脚本。您可以将每个对象添加到SaveManager中的列表中,以便以后可以保存它们。不保存场景中的所有对象是什么意思?我必须保存:游戏期间添加的新游戏对象(克隆),以及场景开始时随场景一起出现的对象(至少是它们的信息),不仅包括变换,还包括定义对象的其他信息。关于我的类,我想我现在必须把每个私有变量都改成一个序列化字段,对吗?你不能保存游戏对象。保存附加到它们的脚本。这就是我的意思。正如我的回答所建议的,每个附加到游戏对象的脚本都应该有一个类来存储它们的数据。这些类不应继承自MonoBehavior。这简化了节约。最后一个问题我都不知道。您可以做一个简单的测试,看看私有变量是否有效。我所知道的是,您只需将
[Serializable]
添加到类的顶部。现在,如果您不想使用存储要保存的内容但只想保存所有内容的SaveManger。它很复杂,需要反思和更多的工作。请参阅帖子中的评论。这个评论部分越来越长了。这篇帖子问你是否必须使用onpause-onstart-ondestroy,所以我提供了必须使用的函数。