2017-08-23 107 views
1

我正在Unity开发移动益智游戏,当我退出我的游戏到主屏幕并返回时,游戏从同一个地点继续,看起来没问题(没有重写onPause/onStart),我错过了什么?退出时是否需要存储变量?人们通常会拯救什么?我害怕将来会有错误。我是否必须使用onPause/onStart/onDestroy

+0

我假设你正在谈论移动设备 - 你确定你确实关闭了应用程序(即打开正在运行的进程来杀死它),还是暂时暂停它然后回到它?如果你没有真正关闭它,应用程序将驻留在内存中,并且在返回时不会丢失任何数据。但是如果你真的关闭了应用程序,那么它将失去你所拥有的任何游戏状态数据,除非它被保存在其他地方。 – Serlite

+0

“关闭它”我的意思是回答电话,甚至开始播放一个新的应用程序,然后在一小时后回到我的应用程序...例如,在iPhone上,没有人真正关闭应用程序,当退出到家中屏幕。 – SHAI

+0

在这种情况下,您并没有真正关闭该应用程序 - 您将其暂停,因为您的手机会将其保存在内存中(直到它用完为止,此时它将开始清除数据以为最近使用的应用程序腾出空间)。但是,关闭手机将实际关闭它。如果您的意图是即使在应用程序停止并重新启动的情况下也保留游戏状态,那么您需要编写代码以将数据保存到静态文件,然后在游戏启动时重新加载该文件。人们自己关闭应用程序 - RAM有限,他们通常会关闭闲置的应用程序,因此性能不会受到影响。 – Serlite

回答

2

我错过了什么?

我需要的时候退出来存储变量?

恐怕要在未来的错误。

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

请参阅this发布说明如何做到这一点,并提供一个包装,以轻松保存和加载任何类。当Unity即将中断时,您必须保存游戏状态。这些都是可以用来检测这个功能,你必须知道:

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

+0

好吧,我明白我需要将每个类保存到json文件。是否需要为我拥有的每个课程创建不同的包装,或者是否有一些可以自动扫描一切并恢复的工具(可能来自资产商店)。另外,游戏对象首选项(有些没有附加脚本)是什么保存所有活动的gameobjects(他们的变换/其他信息)的最佳方式是什么? – SHAI

+0

不是。我提供的包装器使用C#泛型,这意味着它可以保存任何类而不用修改。对于你的问题的其余部分,我被问到这一点。不要在场景中保存所有内容。保存你需要保存的内容。此外,您不保存变换。你创建一个简单的类来保存这个变换的位置,旋转和缩放,并且你应该保存。我建议你创建一个SaveManager脚本,每个GameObject在创建时注册它们。您可以将每个对象添加到SaveManager中的列表中,以便稍后保存它们。 – Programmer

+0

你是什么意思,不保存场景中的所有内容?我必须保存:在游戏期间添加的新游戏对象(克隆),以及那些在开始时与场景一起出现(至少是他们的信息)的人,不仅是变换,还有其他定义对象的信息。关于我的类,我想我现在必须将每个私有变量都改为SerializeField了吗? – SHAI

相关问题