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

时间:2014-08-16 06:14:13

标签: android ios windows unity3d power-management

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

该应用程序比电子书阅读器更接近游戏。用户交互最好描述为99%的时间读取非动画文本墙。有时会有背景声音(最多5%的时间),它通过交互启用。目标平台是android,ios和webplayer。

使用普通FPS渲染一个单一纹理可以消耗相当多的能量(用手测量,字面意思是 - 设备是温暖的)。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

您可以使用:

Thread.sleep(noofmillisecs)

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