我正在为 iOS 制作一款游戏,您主要在屏幕上拖动大对象。当我在实际的 iPad/iPhone 上运行游戏一段时间(连续在屏幕上画圈拖动对象)时,每隔 5 分钟左右拖动的对象会卡顿约 10-30 秒。然后,它又恢复如丝般光滑的移动状态。
从视觉上看,游戏的帧速率似乎一度下降到 15 fps,但实际上它一直以坚如磐石的 60 fps 运行。然而,我注意到唯一移动不顺畅的是拖动的对象,而游戏的其余部分都运行得非常流畅。
这让我相信卡顿与 iOS 中的触摸输入有关。所以我开始查看 TouchMoved,发现它通常每 16 毫秒调用一次(因此触摸输入以 60 fps 运行)。到目前为止,一切都很好。
然后我注意到当对象开始卡顿时,touchesMoved 开始以奇怪的时间间隔被调用,在 8 毫秒到 50 毫秒之间剧烈波动。
因此,当触摸屏处于这种奇怪的状态时,有时 TouchMoved 会在上一次调用后仅 8 毫秒被调用,有时直到上一次调用后 50 毫秒才会被调用。当然,这会使拖动的对象看起来很不稳定,因为它的位置会以不规则的间隔更新。
您知道什么可能导致 TouchMoved 停止像通常那样定期调用吗?
这不是 Unity 中的错误。
操作系统内部的某些东西进入了错误状态,并且触摸拖动消息停止顺利流动。有时您会在一个框架中获得多个更新,有时则什么也得不到。
在 iPhone4 或更低版本上,或者游戏以 30Hz 帧速率运行时,不会出现此问题。
我在使用我在前一家公司工作时编写的内部引擎时遇到了这个错误。它首先在升级拼字游戏的 UI 系统后显现出来,您可以在屏幕上拖动图块。这太奇怪了,我永远无法确定确切的复制步骤,但不知何故,它们似乎与时间有关。
它也可以在《愤怒的小鸟》(除非他们现在已经修复了)和市场上的各种其他游戏中看到,基本上任何带有触摸拖动滚动或移动的游戏。对于《愤怒的小鸟》,只需进入一个关卡并开始横向滚动即可。大多数时候它会如丝般光滑,但也许十分之一的时候,它会很笨重。重新启动应用程序并重试。
解决方法是将几帧的输入更新频率降至 30Hz。这会以某种方式震动操作系统的内部结构,并给它时间来理顺自己,因此当你将其恢复到 60Hz 时,它会再次平稳运行。
每当您检测到已进入不良状态时就执行此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)