軸
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 13/67。
Input.GetAxis("Horizontal")は左右の矢印キー(およびAとD)を、-1から1までの1つの数値に変換します。左が-1、右が1、どちらも押していないときは0です。Input.GetAxis("Vertical")は、下と上の矢印キー(SとW)でも同じことをします。1回呼び出すだけでifを2つ使う必要がなくなり、ゲームパッドのスティックでも追加のコードなしで同じ軸を操作できます。
数値は急に変化しません。Unityのデフォルト設定では、1秒あたり3の速さで目標値に近づくため、キーを押してから1に達するまでに3分の1秒、キーを離してから0に戻るまでにも、さらに3分の1秒かかります。この滑らかな変化によって、ホバークラフトは穏やかに加速し、滑るように停止します。
public float speed = 5f;
void Update()
{
float h = Input.GetAxis("Horizontal");
transform.position += new Vector3(h * speed * Time.deltaTime, 0, 0);
}Input.GetAxisRaw("Horizontal")は滑らかな変化を省きます。毎フレーム、値は正確に-1、0、1のいずれかになり、移動はすぐに始まり、すぐに止まります。重みのある感触にしたいものにはGetAxisを、キレのある操作にはGetAxisRawを使いましょう。左右両方の矢印キーを押すと、どちらを使っても値は0になります。これは、2つの方向が相殺されるためです。(Unity 6のプロジェクトでは、「キーで操作する」で設定したActive Input Handlingの設定は、軸にも適用されます。)
チャレンジ
簡単ローバーは加速・減速なしで、きびきびと動く必要があります。矢印キー(またはWASD)で、x軸に沿って左右に、z軸に沿って上下に、毎秒speedユニットの速度で操作します。キーを押した瞬間に最高速度で動き始め、キーを離した瞬間に停止します。
Playを押し、ゲーム画面をクリックして操作したら、Checkを押します。
自分で試してみよう
using UnityEngine;
public class Rover : MonoBehaviour
{
public float speed = 4f;
void Update()
{
// Horizontal は x 方向に、Vertical は z 方向に移動させます。イージングはありません。
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。