当我有这个版本的代码时:
void Update()
{
RaycastHit hit = new RaycastHit();
for (int i = 0; i < Input.touchCount; ++i)
{
if (Input.GetTouch(i).phase.Equals(TouchPhase.Ended))
{
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position);
if (Physics.Raycast(ray, out hit))
{
hit.transform.gameObject.SendMessage("IncrementCounter");
}
}
}
}
它工作正常,一键后计数器为1,两次点击后计数器为2,没关系。
我想使用FixedUpdate()而不是Update(),因为在我看来,Update()太慢了。换句话说,输入读取速度太慢 - 当我想非常快地点击三次时,计数器的增量太慢。
我尝试使用FixedUpdate(),但是我遇到了错误 - &gt;一键后,计数器等于三或有时两个。
有什么想法吗?
答案 0 :(得分:0)
这就是FixedUpdate,Update和Input如何交互的本质。在您的情况下,游戏循环可能如下所示:
- Unity重置Input.touchCount - Unity读取触摸输入,检测触摸,并将Input.touchCount设置为1 - Unity确定物理模拟落后3帧,因此发生火灾 --- FixedUpdate - 您的代码递增计数器 --- FixedUpdate - 您的代码递增计数器 --- FixedUpdate - 您的代码递增计数器 - 物理现在被赶上了,所以Unity开火了 ---更新
由于iOS设备被锁定为vsync,因此您对处理输入的速度有一个硬性限制(60fps - 每隔约16ms一次)。如果每个Update运行多个FixedUpdates,你可能不会达到60fps,所以你可以从那里开始 - 如果你达到60fps并且它仍然太慢你就会遇到问题。