はじめに
こんにちは、Unityでゲーム開発を楽しんでいるみなさん!
ゲームを作っていると、「キャラクターが画面外に出ちゃった!」という経験、ありませんか?特に2Dゲームでは、キャラクターの動きを制御するのがとても大切です。画面の外に出てしまうと、プレイヤーが操作しづらくなったり、ゲームの楽しさが損なわれる原因になりますよね。
そこで今回は、Unityでキャラクターを画面内に収める方法を一緒に学んでいきましょう!必要なのは少しのスクリプトだけなので、初心者の方でも安心してチャレンジできます。この記事を読めば、キャラクターの移動範囲を簡単に制御できるようになりますよ。
準備ができたら、さっそく始めましょう!
Unityを触ったことがないという方はコチラの記事から見てみてください!
1. プロジェクトの準備
2Dプロジェクトを開いたらまずは、Unityでプレイヤーオブジェクトを作成します。
プレイヤーの配置
- ヒエラルキー(Hierarchy)ウィンドウで右クリックし、「2D Object」→「Sprite」を選びます。
- 作成されたスプライトオブジェクトを「Player」と名前を変更します。
- インスペクター(Inspector)ウィンドウでスプライトレンダラー(Sprite Renderer)コンポーネントを見つけ、スプライトを設定します(任意の画像を使用できます)。
2. スクリプトを作成する
次に、プレイヤーの動きを制御するスクリプトを作成します。
- プロジェクトウィンドウを右クリック「Create」→「C#Script」を選択し、
PlayerMoveと名前を付けます。 - スクリプトを開き、以下のコードを入力します。
① using文
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
- これはUnityでスクリプトを書くときに最初に出てくるお約束みたいな部分です。
- **
UnityEngine**を使うことで、ゲームオブジェクトを動かしたり、キー入力を受け取ったりできます。
② [SerializeField] float speed;
[SerializeField] float speed;
- **
speed**はプレイヤーの移動スピードを調整するための変数です。 [SerializeField]をつけることで、この変数をUnityのインスペクターで設定できるようになります。- たとえば、Unityエディタでこのスクリプトがついたオブジェクトを選択すると、
speedの値を変更できます。ゲーム中に速さを調整したいときに便利です。
③ void Update()
void Update()
- **
Update()**は、Unityが毎フレーム(1秒間に数十回)自動で呼び出す関数です。 - この中に書かれたコードは、常に動いていると考えてください。プレイヤーの操作をチェックするのに使います。
④ 移動の計算
float moveX = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
float moveY = Input.GetAxis("Vertical") * Time.deltaTime * speed;
- ここでは、プレイヤーが矢印キーやゲームパッドで入力した値を受け取っています。
- **
Input.GetAxis("Horizontal")**は「左右の入力」。 - **
Input.GetAxis("Vertical")**は「上下の入力」。
- **
- 入力の値に**
speedとTime.deltaTime**を掛けています。- **
Time.deltaTime**は、前のフレームから今のフレームまでにかかった時間を表しています。これを掛けることで、スムーズで安定した動きを実現しています。
- **
⑤ 移動範囲を制限
transform.position = new Vector2(
Mathf.Clamp(transform.position.x + moveX, -7.0f, 7.0f),
Mathf.Clamp(transform.position.y + moveY, -4.5f, 4.5f)
);
- **
transform.position**で、オブジェクトの現在位置を指定しています。 - 新しい位置を**
Vector2**(X座標とY座標)として計算します。 - **
Mathf.Clamp**は、数値を特定の範囲内に収めるための便利な関数です。- たとえば、**
Mathf.Clamp(x, -7.0f, 7.0f)**は、xの値を「-7.0」から「7.0」の範囲内に制限します。
- たとえば、**
- このコードでは、プレイヤーが画面外に出ないように範囲を指定しています。
- X軸の範囲:-7.0 ~ 7.0。
- Y軸の範囲:-4.5 ~ 4.5。
⑥ 全体の流れ
- 毎フレーム、**
Update()**が呼び出されます。 - プレイヤーの入力を受け取り、どれだけ移動するか計算します。
- 新しい位置を計算し、画面の範囲内に収めます。
- プレイヤーの位置を更新します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
[SerializeField] float speed;
void Update()
{
float moveX = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
float moveY = Input.GetAxis("Vertical") * Time.deltaTime * speed;
transform.position = new Vector2(
//移動範囲を制限する
Mathf.Clamp(transform.position.x + moveX, -7.0f, 7.0f),
Mathf.Clamp(transform.position.y + moveY, -4.5f, 4.5f)
);
}
}スクリプトをアタッチする
- Playerオブジェクトをヒエラルキーで選択します。
- 作成したPlayerControllerスクリプトをドラッグ&ドロップして、インスペクターウィンドウのPlayerオブジェクトにアタッチします。
4. テストプレイする
以上の設定が完了したら、再生ボタンをクリックしてゲームをプレイしてみましょう。プレイヤーキャラクターが画面の端からはみ出さないことを確認してください。
これで、プレイヤーキャラクターが画面外に出ないようにする方法を学びました!簡単にできますので、ぜひ自分のゲームに取り入れてみてください。質問や不明な点があれば、コメントで教えてくださいね。それでは、楽しいゲーム開発を!
おすすめのアセット
2Dシューティングゲームに興味がある方は、Unity Asset Storeにある2D Plane Shooting Game Sampleもおすすめです!このアセットには、今回学んだようなキャラクター移動や制御の実践例が含まれており、学びながら使える便利なテンプレートです。これを活用すれば、さらに効率よくゲームを開発できますよ。
ゲーム作りを楽しみながら、少しずつスキルを磨いていきましょう!✨
あわせて読みたい
- 🔁 Unityでオブジェクトをスライドさせて切り替える方法!【初心者向け】
画面内でのオブジェクト切り替えをスムーズにする方法を解説。UI連携にも応用可能! - 🧱 Unity初心者向け!キューブが壁に沿って動く簡単スクリプト作成ガイド
画面端や壁沿いの移動処理を学びたい方におすすめです。 - 🚷 Unity初心者でも簡単!二段ジャンプを防ぐ仕組みを作ろう
キャラクターの行動制限を学ぶならこのチュートリアル! - 🎯 Unity初心者向け!クリックで動きを一時停止&再開する方法
プレイヤー入力による動作制御の基本がわかります。 - ⬆️ Unity初心者向け:ジャンプ&壁に張り付く機能を簡単実装!
画面端の移動+ジャンプ処理を組み合わせた応用にも。
よくある質問
- Qプロジェクトウィンドウを右クリック「Create」→「C#Script」を選択し、
PlayerMoveと名前を付けます。 - A
Mathf.Clampの範囲を画面サイズに応じて動的に設定する方法を検討してください。Camera.mainを使って画面サイズを取得するのが便利です。
- Qキャラクターが移動しません。
- A
スクリプトがアタッチされているか、
Speedが0になっていないか確認してください。
- Qこのスクリプトは3Dゲームでも使えますか?
- A
基本的には2Dゲーム用ですが、3Dでも
Vector3を使えば似たように制御できます。







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