ランナー
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 60/67。
この章では、小さなゲーム「ブロックを避けろ」を作ります。空からブロックが落ちてくる中、レーンに沿ってランナーを操作し、ブロックに触れるとランが終了します。ゲーム全体は1つのスクリプト、Runnerで構成され、各レッスンで機能を追加していきます。操作、ブロックの落下、ブロックの削除、衝突、そしてスコアです。
最初の機能は、レーンから外れない操作です。Catch the Starで学んだMathf.Clamp(value, min, max)を使います。値が範囲より小さい場合はminを、範囲より大きい場合はmaxを返し、それ以外の場合は値そのものを返します。Clampをどこに置くかが重要です。このチャージメーターはSpaceを押している間に増え、押していない間に減り、0から10の範囲を超えることはありません。
[SerializeField] private float charge = 0f;
void Update()
{
if (Input.GetKey(KeyCode.Space))
{
charge += 4f * Time.deltaTime;
}
else
{
charge -= 2f * Time.deltaTime;
}
charge = Mathf.Clamp(charge, 0f, 10f);
transform.localScale = new Vector3(0.5f, charge, 0.5f);
}Clampは値を変更した後に適用します。先にClampすると、値がそのフレームの終わりに上限を一歩超えてしまうことがあり、バーはその値を使って描画されます。Mathf.Clampは渡された変数を変更するのではなく、新しい数値を返すため、結果を変数に代入し直してください。
チャレンジ
中級ランナーを使って「ブロックをかわそう」を始めます。Inspector で Runner スクリプトに speed (6) と laneEdge (4) を設定します。
- 左右の矢印キーで、ランナーが x 軸上を毎秒
speed単位の速さで移動します。 - x は
-laneEdgeより小さくもlaneEdgeより大きくもならないため、レーンから外れません。
Play を押し、ゲームをクリックしてレーンの両端まで走り、Check を押します。
自分で試してみよう
using UnityEngine;
public class Runner : MonoBehaviour
{
[SerializeField] private float speed = 6f;
[SerializeField] private float laneEdge = 4f;
void Update()
{
// 矢印キーでx方向に移動し、その後xがレーン内に収まるようにする
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。