軸
CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 20/85。
Input.GetAxis("Horizontal")は、左右の矢印キー(およびAキーとDキー)を-1から1までの1つの数値に変換します。左は-1、右は1、どちらも押していないときは0です。Input.GetAxis("Vertical")も同じように、下と上の矢印キー(SキーとWキー)を数値に変換します。1回呼び出すだけで2つのifを置き換えられ、ゲームパッドのスティックでも追加のコードなしで同じ軸を操作できます。
数値は瞬時には変わりません。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」の設定は、軸にも適用されます。)
チャレンジ
簡単イージングなしで、ローバーをきびきびと動かします。
Update()で、float h = Input.GetAxisRaw("Horizontal");とfloat v = Input.GetAxisRaw("Vertical");を読み取ります。new Vector3(h * speed * Time.deltaTime, 0, v * speed * Time.deltaTime)をtransform.positionに加算します。
「プレイ」を押し、ゲーム画面をクリックして、矢印キーまたはWASDで操作します。ローバーはすぐに動き始め、すぐに停止します。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class Rover : MonoBehaviour
{
public float speed = 4f;
void Update()
{
// Horizontal は x 方向に、Vertical は z 方向に動かし、イージングはありません。
}
}
Unityスクリプトの基礎のすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド