[Unity]解決單次偵測方向鍵造成腳色瞬間移動的問題

Posted by John on 2016-04-05
Words 368 and Reading Time 1 Minutes
Viewed Times

1

最近在做Unity腳色移動控制時遇上了一個問題: 一般讓角色移動的方式有兩類:

  1. 給物體加個Force/Velocity
  2. 偵測一次方向鍵移動一次

第一種情況不會有延遲的問題,因為只需要偵測方向鍵即可改變移動方向跟移動向量

問題在於第二種,因為Unity的Update與FixedUpdate是以每一幀為單位,但這樣會遇到一個問題, 假設我在玩遊戲時我想使玩家連續移動,於是我按了5下右鍵,這時有可能在第一幀移動了一個單位, 但剩下的4格單位卻在下一幀一瞬間移動完,造成有瞬間移動大量距離的情形。 於是我用Timer去計時,修改成: 每一秒只偵測一次按鍵,然後動作完就把所有的設定清除掉。

ResetInputAxes: 在一帧中重置所有的输入,重置输入指令之后所有的方向轴都被设置为0并且所有的 按键都被设置为0。

(網址來源:http://www.ceeger.com/Script/Input/Input.ResetInputAxes.html)

這樣就可以解決問題了,概念有點像C/C++的fflush清空前一次輸入的Buffer。

2

time = time + Time.deltaTime;
if (time > 1f)//每一秒執行一次
{
if (Input.GetKeyDown(KeyCode.UpArrow))
{}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{}
else if (Input.GetKeyDown(KeyCode.DownArrow))
{}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{}
Input.ResetInputAxes();//重製所有輸入
}

>