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より小さくなることはありません。そのため、左端のレーンより左に移動することはありません。
チャレンジ
簡単Runner.Updateで、Aキーまたは左矢印キーが押されたとき(Input.GetKeyDown)、lane = Mathf.Max(-1, lane - 1)を設定します。- Dキーまたは右矢印キーが押されたときは、
lane = Mathf.Min(1, lane + 1)を設定します。 - 次に、前述のように
targetXを求め、controller.Moveでランナーをそこへ移動させます。 - 「プレイ」を押して、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プレイグラウンド