unity3d 中的能源效率 - 暂停应用程序等待用户交互

Posted

技术标签:

【中文标题】unity3d 中的能源效率 - 暂停应用程序等待用户交互【英文标题】:Energy efficiency in unity3d - halting app waiting for user interaction 【发布时间】:2014-10-09 20:12:31 【问题描述】:

我正在寻找一种方法让我的 unity3d 应用在等待用户交互(触摸、鼠标或键盘事件)或计时器(分钟刻度)时休眠。

这款应用比游戏更接近电子书阅读器。最好将用户交互描述为 99% 的时间都在阅读非动画的文字墙。有时会有背景声音(最多 5% 的时间),它是通过交互启用的。目标平台为 androidios 和 webplayer。

即使是使用普通 FPS 渲染单个纹理也会消耗相当多的能量(用手测量,字面意思是 - 设备很热)。

我的主要问题是我不想一直渲染相机,但我确实需要以尽可能小的延迟对用户输入做出反应 - 因此降低 FPS 在这里效果不佳(输入等待下一帧)。

那么,我怎样才能以节能的方式停止等待用户输入的应用程序?也欢迎仅适用于一个平台的提示(例如集成本机 API)。

【问题讨论】:

【参考方案1】:

Unity 内部架构类似于游戏。那里是一个由 Update() 和 Render() 组成的无限循环,它运行得尽可能快。可能,您可以使用自定义插件更改此行为,因此有选项№1。

选项№1。 Unity(仍然)是单线程的。但它是在多线程托管环境中。您可以在脚本中调用 Sleep 并且应用程序将休眠一段时间,而不会调用 Update() 也不会调用 Render()。问题是 Unity 在同一个线程中运行其输入。但理论上您可以创建自定义插件并实现在另一个线程中运行的输入。因此,您将能够使用 WaitFor(customInput) 之类的东西将 Unity 置于条件睡眠状态。当然,您需要为每个平台单独实现插件。

这不是一个简单的答案,对吧?然而,还有另一种选择。

选项№2。如果您简化工作,您可以降低功耗(很明显,我知道)。首先,您的应用程序不需要每秒 60 帧。在质量设置中查找 Application.targetFrameRate 和 vsync(请注意,vsync 会覆盖 targetFrameRate)。其次,缓存你的结果。您可以将复杂场景预渲染到渲染目标中,然后呈现在屏幕上而不是源场景中,直到进行相当大的更改。

【讨论】:

虽然不完美,但这是您可以针对此问题获得的最接近的答案。很抱歉忘记将此标记为已回答。【参考方案2】:

你可以使用:

Thread.sleep(noofmillisecs)

即使只使用 2 毫秒 Thread.sleep(2) 也可以节省能源,因为它每帧都会调用一次。如果您有 30fps (ios),它将在 40% 的时间内使应用程序处于休眠状态。如果您收到用户输入,您可以降低或停止睡眠一段时间,并在没有时恢复。

【讨论】:

以上是关于unity3d 中的能源效率 - 暂停应用程序等待用户交互的主要内容,如果未能解决你的问题,请参考以下文章

Unity3d OnApplicationPause与OnApplicationFocus

Unity3D Application模拟进入前后台及暂停

Unity3D中暂停时的动画及粒子效果实现

7月28-30号!Aspen Energy Analyzer:通过热集成提高能源利用效率培训上海开班!

Unity3d游戏开发Unity中的Time.timeScale

6月17-19号Aspen Energy Analyzer:通过热集成提高能源利用效率培训,工艺省钱就靠它!