進行方向を操作する
Coddyの「Unityゲーム:3Dスネーク」コースのレッスン 2/14。
ヘビは矢印キーまたはWASDで方向転換します。カメラはボードの手前の端から見下ろすため、画面上方向は+z、つまりVector3.forwardに沿い、下方向はVector3.backです。Vector3.upは空を指します。これで頭を動かすと、ボードから浮き上がってしまいます。
方向転換はキーを押すたびに1回行われるため、Input SystemのwasPressedThisFrameでキーを読み取ります。キーを押すとdirectionだけが変わります。次のティックでStep()が引き続き頭を動かすため、ヘビの動きのリズムは保たれます。Dを押したときに画面右方向へ進むローバーの例:
Keyboard keyboard = Keyboard.current;
if (keyboard != null && keyboard.dKey.wasPressedThisFrame)
{
heading = Vector3.right;
}キーボードではInput Systemに軸がありません。矢印キーと文字キーは別々のキーなので、||でつなぎます。キーボードがないデバイスではKeyboard.currentがnullになるため、最初に一度読み取り、チェックしてください。
チャレンジ
簡単Snakeにusing UnityEngine.InputSystem;を追加します。Update()の先頭でKeyboard.currentを読み取ります。上矢印キーまたはWキーを押すとdirectionがVector3.forwardに設定され、下矢印キーまたはSキーではVector3.backに、左矢印キーまたはAキーではVector3.leftに、右矢印キーまたはDキーではVector3.rightに設定されます。Step()はそのままにします。頭は次のティックで向きを変えます。
Playを押し、ゲームをクリックして操作してから、Checkを押します。
自分で試してみよう
using UnityEngine;
public class Snake : MonoBehaviour
{
public float tick = 0.15f; // 2回の移動の間隔(秒)
private float timer;
private Vector3 direction = Vector3.right;
void Update()
{
timer += Time.deltaTime;
if (timer >= tick)
{
timer -= tick;
Step();
}
}
void Step()
{
transform.position += direction;
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。