【发布时间】:2013-11-14 17:43:46
【问题描述】:
所以,Unity 并没有在 android 上做很多节奏游戏。我决定找出原因,并将其编程为作业(无论如何都是它的基础)。我最重要的障碍是用户输入。正如我们所知,输入是基于统一的帧速率,而音乐游戏(我假设)更喜欢按钮按下和动作之间尽可能小的延迟。
如果我们看音乐,在大约 15 到 20 毫秒的延迟时,人耳会听到“不合拍”的声音。
我听说 Android Unity 游戏以 30FPS 运行(因为 60FPS 会耗尽电池电量),简单的数学表明:1000/30 = 33ms 每帧。在 15 毫秒内计算我们可能不会注意到,我们处于可能发生灾难的 18 毫秒。假设我们总是在任何给定时刻达到这个 30FPS。
当我从用户那里获得输入时,我可以在完全相同的帧上播放该输入的声音。但是,我们可能会延迟 18 毫秒。
现在有一种方法可以从鼠标和键盘获取 DIRECT 控件,它使用 OnGui() 而不是 Update() 来获取键盘或鼠标点击的事件。问题是,android 可能无法使用这个,(这也不适用于游戏手柄)并且这些方法听起来非常奇怪,尤其是当我们尝试从 OnGui() 方法播放声音时。
我的问题: 你会怎么做,为什么?我们应该接受可能的 18 毫秒关闭,并假设我们达到 30FPS,还是应该寻找一种可靠的方式直接获取输入,而不是等待更新到来?
感谢您提供的任何见解,我还没有找到任何有用的文章。 -笑脸
编辑 我只是用节拍器做了一些基本的测试,在编辑器中以 100FPS(应该是每帧 10 毫秒)在 unity 内的节拍器上点击我的空格键。我得到的结果太可怕了。 快速敲击:我的节拍器滴答声接近 20 毫秒,但没有更接近。 敲击节拍:我的目标滴答声至少有 200 毫秒。除非我对这种节奏感到困惑,否则这是错误的。
目前我使用 Debug.Log 将我的测试数据写入日志。任何人都可以帮我确认这是否是原因(导致一些长时间的延迟?我知道调试没有那么优化),或者时间真的那么糟糕吗?
提前致谢, -笑脸
【问题讨论】:
-
Reliable, real-time input is a problem for Unity。就您的个人测试而言,大多数人都没有意识到
Debug.Log是一个非常 昂贵的调用(通常需要 5+ms)。它通常值得用于开发,但我不建议将其用于任何性能基准测试。 -
关于此的新信息:新的 Unity 输入系统应该是再次探索输入准确性的全新方式!
标签: c# android unity3d playback