Input.touchCount在FixedUpdate()中不起作用

时间:2016-08-01 12:37:33

标签: c# unity3d input

当我有这个版本的代码时:

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;一键后,计数器等于三或有时两个。

有什么想法吗?

1 个答案:

答案 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并且它仍然太慢你就会遇到问题。