はじめに
こんにちは!今日は、Unityでオブジェクトの動きを制限する方法について解説します。例えば、キャラクターやアイテムが特定の範囲から出ないようにしたい場合に便利です。とても簡単なので、一緒にやってみましょう!
Unityを触ったことがないという方はコチラの記事から見てみてください!
1.シーンにオブジェクトを配置する
まずは、シーンにオブジェクトを追加します。ここでは、Cube(キューブ)を使って説明します。
- Hierarchy(ヒエラルキー)ウィンドウで右クリックします。
- 「3D Object」を選び、「Cube」をクリックします。
これでシーンにキューブが追加されました。
2. スクリプトを作成する
次に、キューブの動かすスクリプトを作成します。
- Project(プロジェクト)ウィンドウで右クリックします。
- 「Create」を選び、「C# Script」をクリックします。
- スクリプトに「MovementController」という名前を付けます。
全体の説明
このスクリプトは「MovementController」という名前のクラスを定義しています。このクラスはUnityのMonoBehaviourクラスを継承しており、オブジェクトがユーザーの入力に応じて動くようにするためのものです。具体的には、キーボードの矢印キーやWASDキーでオブジェクトを動かすことができます。
各部分の説明
クラスと変数の宣言
- MovementController: クラスの名前です。MonoBehaviourを継承しているので、Unityのゲームオブジェクトにアタッチできます。
- public float speed: オブジェクトの移動速度を設定するための公開変数です。初期値は5.0fです。
Updateメソッド
- void Update(): Unityの特別なメソッドで、毎フレーム(1秒間に数十回)呼ばれます。この中に書かれた処理は常に実行されます。
- Input.GetAxis(“Horizontal”): キーボードの左右の矢印キーやA、Dキーの入力を取得します。戻り値は-1から1の間の値です。
- Input.GetAxis(“Vertical”): キーボードの上下の矢印キーやW、Sキーの入力を取得します。こちらも戻り値は-1から1の間の値です。
- moveHorizontalとmoveVertical: 入力された値に移動速度(speed)を掛けたものです。
移動の計算と適用
- Vector3 movement: X軸(左右)とZ軸(前後)の移動を表すベクトルです。Y軸(上下)は0に固定しています。
- transform.Translate: オブジェクトの位置を変更するメソッドです。
- movement * Time.deltaTime: フレームごとの移動量を一定にするため、
Time.deltaTime(前フレームからの経過時間)を掛けます。 - Space.World: ワールド座標系で移動することを指定します。
- movement * Time.deltaTime: フレームごとの移動量を一定にするため、
全体の動き
- 毎フレーム、キーボードの入力をチェックします。
- 入力に基づいて、オブジェクトの新しい移動方向を計算します。
- その方向に向かってオブジェクトを動かします。
using UnityEngine;
public class MovementController : MonoBehaviour
{
public float speed = 5.0f;
void Update()
{
float moveHorizontal = Input.GetAxis("Horizontal") * speed;
float moveVertical = Input.GetAxis("Vertical") * speed;
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
transform.Translate(movement * Time.deltaTime, Space.World);
}
}
スクリプトをオブジェクトにアタッチする
スクリプトをキューブに適用しましょう。
- Hierarchy(ヒエラルキー)ウィンドウでキューブをクリックします。
- Project(プロジェクト)ウィンドウで「MovementController」スクリプトを見つけます。
- 「MovementLimiter」スクリプトをドラッグして、キューブにドロップします。
動きに制限を加える
動きに制限を加えるには、オブジェクトの位置をチェックし、特定の条件下でのみ動かすようにします。例えば、オブジェクトが特定の範囲外に出た場合、それ以上移動できないように制限します。
全体の説明
このスクリプトは、ユーザーの入力に基づいてオブジェクトを動かし、さらにその位置を特定の範囲内に制限するものです。オブジェクトはキーボードの矢印キーやWASDキーで動かせますが、画面外に出ないように範囲が設定されています。
各部分の説明
- void Update(): Unityの特別なメソッドで、毎フレーム(1秒間に数十回)呼ばれます。この中に書かれた処理は常に実行されます。
- Input.GetAxis(“Horizontal”): キーボードの左右の矢印キーやA、Dキーの入力を取得します。戻り値は-1から1の間の値です。
- Input.GetAxis(“Vertical”): キーボードの上下の矢印キーやW、Sキーの入力を取得します。こちらも戻り値は-1から1の間の値です。
- moveHorizontalとmoveVertical: 入力された値に移動速度(speed)を掛けたものです。
移動の計算と制限
- Vector3 movement: X軸(左右)とZ軸(前後)の移動を表すベクトルです。Y軸(上下)は0に固定しています。
- newPosition: 現在の位置に移動分を足した新しい位置です。
Time.deltaTimeを掛けて、フレームごとの移動量を一定にします。 - Mathf.Clamp(newPosition.x, -10.0f, 10.0f): X軸の位置を-10.0と10.0の間に制限します。
- Mathf.Clamp(newPosition.z, -10.0f, 10.0f): Z軸の位置を-10.0と10.0の間に制限します。
- transform.position = newPosition: 計算された新しい位置をオブジェクトに適用します。
全体の動き
- 毎フレーム、キーボードの入力をチェックします。
- 入力に基づいて、オブジェクトの新しい移動方向を計算します。
- 新しい位置を計算し、その位置が指定された範囲内に収まるように制限します。
- 制限された位置をオブジェクトに適用します。
void Update()
{
float moveHorizontal = Input.GetAxis("Horizontal") * speed;
float moveVertical = Input.GetAxis("Vertical") * speed;
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
Vector3 newPosition = transform.position + movement * Time.deltaTime;
newPosition.x = Mathf.Clamp(newPosition.x, -10.0f, 10.0f);
newPosition.z = Mathf.Clamp(newPosition.z, -10.0f, 10.0f);
transform.position = newPosition;
}
このコードでは、Mathf.Clamp関数を使用して、オブジェクトのx座標とz座標が-10から10の範囲内に収まるようにしています。これにより、オブジェクトは指定された範囲内でのみ移動できます。
上下の動きに制限を加える
上下の動きに制限を加える場合も、同様のアプローチを使用します。ただし、y座標に対する制限を加えることになります。
newPosition.y = Mathf.Clamp(newPosition.y, 0.0f, 5.0f);
この行をUpdateメソッドに追加することで、オブジェクトの上下の動きも制御できるようになります。この場合、オブジェクトはy座標が0から5の範囲内でのみ移動できます。

プレイモードで動かしてみて、キューブが設定した範囲から出ないことを確認してください。これで、Unityでオブジェクトの動きを簡単に制限できるようになりましたね。お疲れ様でした!
🎮 思い通りに動くキャラ操作を実現したいなら…
物理演算ベースで超快適なキャラクター操作が手に入る!
『Easy Character Movement 2』なら、ジャンプ・坂道・滑り・ジャンプ制限など、Unity初心者でもスムーズに導入できます。
面倒なスクリプトの手間もほとんど不要で、移動範囲の制限やカメラ連動もカンタン設定。
👇ゲームの操作感をワンランク上にしたい人はこちらをチェック!
👉 Easy Character Movement 2 を今すぐチェック
あわせて読みたい
- 🔁 UnityでCubeを十字キーで転がそう!Rigidbodyを使った簡単チュートリアル
十字キーでの移動方法とRigidbodyの扱いが学べる初心者向けチュートリアルです。 - 🔄 UnityでCubeを動かして衝突オブジェクトの名前を取得する方法【初心者向け】
オブジェクト同士の接触イベントを使って名前を取得する方法を解説しています。 - 🚫 Unity初心者向け!衝突でスクリプトを停止する簡単なテクニック
オブジェクトの移動や挙動を制限するロジックの入門として最適です。 - 🟦 Unity初心者向け!キューブが壁に沿って動く簡単スクリプト作成ガイド
オブジェクトの動きを壁や境界に沿わせるスクリプトを作成できます。 - 🎮 Unityで簡単なプレイヤー操作を実装!左右キーで回転&上下キーで移動する方法
基本的な移動+回転処理の導入にピッタリなチュートリアルです。







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。