キャッチャー
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 36/67。
この章では、Catch the Star という小さなゲームを作ります。レッスンごとに機能を1つずつ追加します。星が落ち、キャッチャーをその下で左右に動かし、星をキャッチするたびに得点が入り、次の星はより速く落ちてきます。星を3回取り逃すとゲーム終了です。すべての処理は、キャッチャーに設定する1つのスクリプト、Catcher にまとめます。最初の機能は移動です。キャッチャーは矢印キーで動き、床からはみ出しません。
数値を範囲内に収めるには、Mathf.Clamp(value, min, max) を使います。値が min より小さい場合は min を、max より大きい場合は max を返し、それ以外の場合は値そのものを返します。このカメラはプレイヤーを追って塔を上りますが、高さは2から12の間に保たれます。
[SerializeField] private Transform player;
void Update()
{
float y = Mathf.Clamp(player.position.y, 2f, 12f);
transform.position = new Vector3(transform.position.x, y, transform.position.z);
}Clamp は新しい数値を返すだけで、それ自体で何かを変更することはないため、結果を代入してください。そのフレーム内の変更をすべて行った後、位置を書き戻す前に Clamp を適用すれば、オブジェクトが範囲を超えた状態で表示されるフレームはありません。
チャレンジ
中級キャッチャー(青いバー)を動かしましょう。右矢印キーを押している間は右(+x 方向)へ、左矢印キーを押している間は左へスライドします。どちらも毎秒 speed 単位です。y と z は変化しません。
床は x = -5 から x = 5 まであり、キャッチャーの幅は 2 単位です。キャッチャー全体が常に床の上に収まるよう、x を制限しましょう。
Play を押し、ゲームをクリックして矢印キーを試してから、Check を押してください。
自分で試してみよう
using UnityEngine;
public class Catcher : MonoBehaviour
{
[SerializeField] private float speed = 6f;
void Update()
{
// 矢印キー: x 軸に沿って、毎秒 speed 単位で移動する。
// キャッチャー全体が床の上に収まるようにする(x は -5 から 5 まで、キャッチャーの幅は 2)。
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。