Input.GetKeyDownとFixedUpdateは一緒にしないほうがいいっぽい

TOC

Unityで2Dのスクロールゲームを作っています。
スペースキーを押したとき、Jumpするように、次のようなコードを書きました。

1
2
3
4
5
6
7
void FixedUpdate()
{
if (Input.GetButtonDown("Jump"))
{
// 処理
}
}

しかし、ジャンプするときと、しないときがあり、

Linecastの問題かと思ってググっていたところ、

を見つけました。

サイトによると、FixedUpdateではInput.GetKeyDownはしないほうがいいらしいです。

理由は、FixedUpdateで、Inputの値がとれるタイミングとは限らないかららしいです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool IsDownJumpButton = false;
void Update()
{
if (Input.GetButtonDown("Jump"))
{
IsDownJumpButton = true;
}
}
void FixedUpdate()
{
if (IsDownJumpButton)
{
// 処理
IsDownJumpButton = false; // チェックしたよ
}
}