unity3d 中的能源效率 - 暂停应用程序等待用户交互
Posted
技术标签:
【中文标题】unity3d 中的能源效率 - 暂停应用程序等待用户交互【英文标题】:Energy efficiency in unity3d - halting app waiting for user interaction 【发布时间】:2014-10-09 20:12:31 【问题描述】:我正在寻找一种方法让我的 unity3d 应用在等待用户交互(触摸、鼠标或键盘事件)或计时器(分钟刻度)时休眠。
这款应用比游戏更接近电子书阅读器。最好将用户交互描述为 99% 的时间都在阅读非动画的文字墙。有时会有背景声音(最多 5% 的时间),它是通过交互启用的。目标平台为 android、ios 和 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
7月28-30号!Aspen Energy Analyzer:通过热集成提高能源利用效率培训上海开班!