2017年8月17日

Unity マウス操作はTime.deltaTimeしてはいけない


前回はInput.GetAxisについて書いたので、ついでにマウス操作で最近ハマった罠についても一応メモメモ…



大抵の場合、Inputから受け取った入力値を実際に使うときはフレームレートを考慮しますよね。

Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;

そのクセが染みついていると、マウス操作に関しても何も考えずついついこういうことをしたくなります。

Input.GetAxis("MouseX") * mouseSpeed * Time.deltaTime;

しかし、通常、Inputでマウスの移動量を取得する場合はフレームレートを考慮する必要はありません。

理由は単純で、たとえばかわいいかわいいマウスちゃんを1秒間に10cm動かすとします。そのとき、もしゲームが10fpsで動作していれば1フレームあたりに認識される移動量は1cm分です。もし100fpsで動作していれば1フレームあたりの移動量は0.1cm分になるはずです。つまり、わざわざTime.deltaTimeをかけて毎フレームの移動量を計算しなくてもフレームごとの入力値は変わるということです。逆にTime.deltaTimeをかけてしまうと、fpsが高くなるほどマウスの反応が鈍くなるという事態に陥ります。

実際、Input.GetAxisの公式マニュアルページで紹介されている例を見てみると、"Vertical"や"Horizontal"を使っている1つ目の例ではTime.deltaTimeをかけているのに、"Mouse X""Mouse Y"を使用した2つ目の例ではTime.deltaTimeをかけていません。

というわけで、知っている人にはあたりまえの話、知らない人には「言われてみれば…」という話でした。

0 件のコメント:

コメントを投稿