Menu
CoddyTech

3つのレーン

Coddyの「Unityゲーム:スカイレーン」コースのレッスン 1/20。

このコースでは、1つのゲームを作り上げます。レッスンごとに機能を追加していきます。ランナーは空高くにある道路を走ります。障害物やバー、壁が次々と現れ、各レーンにはコインが並び、走り続けるほど道路の速度が上がります。

このプロジェクトには、すでに4つのスクリプトがあります。プレイヤーに付いている Runner、Road、GameManager、そして Coin です。今のところ、ほとんどは空で、レッスンごとにコードを追加していきます。5つ目のスクリプトで、カメラに付いている CameraFit は用意されています。縦長のスマートフォン画面で表示範囲を広げ、3つのレーンすべてが収まるようにするため、変更する必要はありません。

ランナーは前進しません。左、中央、右の3つのレーン間を移動するだけです。レーンは -1、0、1 の整数で表し、x軸上の位置を求めます。

float targetX = lane * laneWidth;

ランナーには CharacterController が付いているため、controller.Move(motion) で移動します。Move に渡すのはこのフレームで移動する距離であり、移動先の位置ではありません。targetX に到達するには、ランナーの現在位置と目標位置の差だけ移動します。

float x = targetX;
Vector3 move = new Vector3(x - transform.position.x, 0f, 0f);
controller.Move(move);

Mathf.Max(-1, lane - 1) は lane - 1 と同じですが、-1より小さくなることはありません。そのため、左端のレーンより左に移動することはありません。

challenge icon

チャレンジ

簡単
  1. Runner.Updateで、Aキーまたは左矢印キーが押されたとき(Input.GetKeyDown)、lane = Mathf.Max(-1, lane - 1)を設定します。
  2. Dキーまたは右矢印キーが押されたときは、lane = Mathf.Min(1, lane + 1)を設定します。
  3. 次に、前述のようにtargetXを求め、controller.Moveでランナーをそこへ移動させます。
  4. 「プレイ」を押して、AキーとDキーを試します。

自分で試してみよう

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;

    public int lane;

    private CharacterController controller;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        // ここでレーンを切り替える
    }
}

Unityゲーム:スカイレーンのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド