《怪物漫步》中的电池续航优化

请阅读我们对 Talofa Games 首席执行官 Jenny Xu 的专访,她在采访中阐述了打造无缝后台体验所面临的技术挑战及开发决策,包括团队如何利用 Unity 的 OnApplicationFocus 和 OnApplicationPause 钩子来保存游戏状态。
徐珍妮:当我们最初构思《怪兽漫步》时,我们试图解决的核心设计问题是:如何让步数——就像你在现实世界中迈出的每一步——让人感觉像是在玩游戏?它不像是一项繁琐的任务,不会让人觉得是硬塞进来的,也不像是一款健身应用和一款游戏这两种截然不同的东西,而真正像是一款通过在现实生活中变得更健康来玩的游戏。
最大的技术挑战在于,如何在背景数据传输、电池续航等各种平台限制条件下,让这些实时操作(例如实时数据)在游戏体验中显得真正流畅且浑然一体。对我们来说,关键在于实时步数追踪功能,以及如何设计得既不会让玩家感到过于严苛,也不会给予过多的奖励,同时又能切实促使他们坚持健身。
合并步态数据流
由于我们使用了 Unity,这确实大大简化了与 Android 和 iOS 原生插件的连接过程。我们正在处理来自 Android Health Connect、Google Fit、Garmin 等所有这些数据源的数据,并将它们整合到我们的游戏中。我们必须整合所有这些数据,并告知玩家,从他们上次进入游戏到下次打开游戏之间,我们估计他们进行了多少步操作。
幸运的是,Unity 确实为我们提供了调用原生 API 的能力。所以,我们甚至在某个时候还自己开发了一个计步器,因为我们不能指望他们一定有 Health Connect。我们不能假设他们安装了 Google Fit。也许他们什么都没有。我们开发了一个原生插件,它与 Unity 无缝集成,即使应用关闭后,它仍会在后台持续计步。
因此,我们不得不在 Unity 项目中构建一个近乎三层架构的解决方案来支持这一功能。同时,也不能消耗太多电量,或者一直运行在后台,否则玩家可能会直接卸载。
在平衡我们所获取的所有数据方面,情况也是一样的。因为苹果,你有“Apple Health”,它支持原生的前台步数统计,比如当应用打开且手机在晃动时,可能是玩家迈出了一步,但此时“Apple Health”也在同步记录这一步。
那么,该如何合并冗余数据呢?该如何做到既不过分奖励,也不过分惩罚?找到那个最佳平衡点,能够根据玩家所使用的设备型号来满足他们的需求,并让这种体验充满魔力——这才是最艰难的技术挑战。
优化电池续航时间
由于《怪物漫步》是一款基本上全天都在后台运行的游戏,我们不得不设计出既能推动游戏进程,又不会导致手机过热的系统。即便是 iOS 和 Android 之间,后台行为也大相径庭。
因此,在保存玩家状态时,我们必须格外谨慎。而且,由于我们需要在后台处理大量步数和健康数据,我们必须让玩家产生一种错觉:即使他们暂时离开,他们的怪物仍然会陪伴在身边,即使应用程序已被关闭。
因此,我认为这很大程度上取决于设计框架。此外,我们还非常谨慎地处理进程关闭问题,确保后台线程停止运行,这样用户就不会看到应用处于打开状态却在消耗电量。
因此,我们利用了 Unity 中的许多钩子,例如 OnApplicationFocus 和 OnApplicationPause,并利用这些时机快速保存状态。然后每次他们回来,我们就会查看上次保存的数据,继续游戏,再查看他们的步数,然后对他们说:“嘿,你们和你们的小怪物朋友一起走了这么多路呢。”欢迎回来。
