UnityUnityメモ

Unityで3Dオブジェクトの移動範囲を座標指定で制御!初心者向け解説

Unity

1. はじめに

Unityでゲームを作る際に、プレイヤーキャラクターやアイテムを動かす仕組みを作るのは、とても基本的で重要なスキルです。でも、「動かしたいけど、範囲を制御したい」と思ったことはありませんか?例えば、プレイヤーが画面外に行ってしまうのを防ぎたい場合や、特定のエリア内だけで動くようにしたい場合などです。

今回の記事では、Unityを使って「左右キーでオブジェクトを動かし、特定の座標で止める方法」をわかりやすく解説します!ゲーム開発の初心者でも簡単に実装できる手順を一緒に進めていきますので、安心してくださいね。


記事を読むと、以下のことができるようになります:

  • オブジェクトを左右に動かす方法
  • 移動範囲を座標で制御する方法
  • Unityのスクリプト作成とアタッチの基本

これをマスターすれば、ゲームの操作性を自由自在にコントロールできるようになります。まずは、Unityのプロジェクトを開いて、一緒に始めていきましょう!

Unityを触ったことがないという方はコチラの記事から見てみてください!



2. 準備: Unityプロジェクトの設定

ここでは、Unityプロジェクトをセットアップして、移動するキューブオブジェクトを作成する方法を解説します。初心者の方でもわかりやすいように、手順を丁寧に説明しますね!


2-1. Unityプロジェクトを開く

まずはUnityを起動しましょう。

  1. Unity Hubを開き、画面左上の「New Project」(新しいプロジェクト)をクリックします。
  2. テンプレート選択画面が表示されたら、「3D Core」を選択します。プロジェクト名は「MoveObject」としておきましょう(もちろんお好きな名前でもOKです!)。
  3. プロジェクトを保存する場所を指定し、「Create Project」(プロジェクトを作成)をクリックします。

これで新しいUnityプロジェクトが開きます。


2-2. キューブオブジェクトの作成

続いて、ゲーム内で移動させるオブジェクトを作成します。

  1. ヒエラルキー(Hierarchy)ウィンドウを確認
    • 画面左上にあるヒエラルキーウィンドウを見てください。ここにゲーム内のオブジェクトが一覧表示されます。
  2. 右クリックでオブジェクトを追加
    • ヒエラルキーウィンドウ内で右クリック → 「3D Object」→「Cube」を選択します。
    • シーンビュー(Scene View)に白いキューブが追加されます。
  3. キューブの名前を変更
    • 追加したキューブをヒエラルキーウィンドウで選択し、右クリック →「Rename」を選択して名前を「Player」に変更しましょう。名前をつけることで、後でわかりやすくなります。
  4. 位置の確認
    • インスペクター(Inspector)ウィンドウを確認して、キューブの位置が (0, 0, 0) に設定されていることを確認します。

これで、移動するキューブオブジェクトの準備は完了です!
次のステップでは、このキューブを動かすためのスクリプトを作成していきます。楽しみにしていてくださいね! 😊



3. スクリプトの作成

Unityでオブジェクトを移動させるためには、C#スクリプトを作成してオブジェクトに動きを指定します。ここでは、「MovePlayer」という名前のスクリプトを作成し、特定の範囲内でオブジェクトを移動させる方法を解説します。


3-1. スクリプトの新規作成

  1. プロジェクトウィンドウを開く
    Unityエディターの下部にある「Project」ウィンドウを確認してください。ここでは、プロジェクト内のファイルやフォルダーを管理できます。
  2. 新しいスクリプトを作成
    プロジェクトウィンドウで、空いている場所を右クリックします。次に、以下の手順に従いスクリプトを作成します。
    • 右クリック →「Create」→「C# Script」を選択
    • スクリプト名を「MovePlayer」に変更してください。
  3. スクリプトの編集
    作成した「MovePlayer」スクリプトをダブルクリックして、コードエディター(通常はVisual Studio)で開きます。

3-2. コードを記述

以下のコードをスクリプトに入力してください。このコードは、オブジェクトを左右キーで動かし、指定した範囲(-2~2)内に収める動きを実現します。

using UnityEngine;

public class MovePlayer : MonoBehaviour
{
    // オブジェクトの移動速度
    public float speed = 5f;

    // オブジェクトの移動範囲
    private float maxX = 2f;
    private float minX = -2f;

    void Update()
    {
        // 水平入力を取得し、移動量を計算
        float move = Input.GetAxis("Horizontal") * speed * Time.deltaTime;

        // 現在の位置に移動量を加算して新しい位置を計算
        float newPosition = transform.position.x + move;

        // 移動範囲を超えないように制限
        if (newPosition > maxX)
        {
            newPosition = maxX;
        }
        else if (newPosition < minX)
        {
            newPosition = minX;
        }

        // オブジェクトの位置を更新
        transform.position = new Vector3(newPosition, transform.position.y, transform.position.z);
    }
}

3-3. コードのポイント

  1. 移動速度の調整
    • speedの値を変更することで、オブジェクトの移動速度を調整できます。
    • 例えば、speed = 10fにすると、オブジェクトがより速く移動します。
  2. 移動範囲の設定
    • maxXminXの値を変更することで、オブジェクトが移動できる範囲を簡単に変更できます。
    • 例えば、maxX = 3fminX = -3fにすると、範囲が広がります。
  3. 入力検知
    • Input.GetAxis("Horizontal")は、左右キー(またはAキー・Dキー)で移動する入力を取得します。

スクリプトを保存したら、次の手順でオブジェクトにアタッチして動作を確認しましょう!次の章で、スクリプトをオブジェクトに設定する方法を解説します。



4. スクリプトのアタッチ

次に、作成したスクリプトをキューブ(Player)にアタッチしていきます。アタッチとは、スクリプトをオブジェクトに紐づける作業のことです。これにより、スクリプトの機能がオブジェクトに適用されるようになります。


スクリプトをアタッチする手順

  1. ヒエラルキー(Hierarchy)ウィンドウで「Player」を選択
    • 先ほど名前を変更したキューブ(Player)をクリックして選択します。
  2. プロジェクト(Project)ウィンドウでスクリプトを探す
    • プロジェクトウィンドウを開き、作成した「MovePlayer」スクリプトを確認します。
  3. スクリプトをドラッグ&ドロップ
    • 「MovePlayer」スクリプトをマウスでクリックし、そのままヒエラルキー内の「Player」にドラッグします。
    • ドロップすることで、スクリプトがPlayerにアタッチされます。
  4. インスペクター(Inspector)ウィンドウで確認
    • 「Player」を選択した状態でインスペクターを確認します。
    • 「MovePlayer (Script)」という項目が追加されていれば、スクリプトのアタッチは完了です。

注意点

  • スクリプトをドラッグ&ドロップする場所に注意
    • 「Player」以外のオブジェクトにドロップすると、意図した動作をしない場合があります。
    • 必ず「Player」を選択してアタッチしてください。
  • エラーが出る場合の確認ポイント
    • スクリプト内にエラーがある場合、インスペクターに「警告マーク」が表示されます。その場合は、スクリプトのコードにスペルミスや記述ミスがないか確認してください。

これで、Playerオブジェクトにスクリプトが正しく紐づけられました!次は、実際にプレイモードで動作確認を行ってみましょう。スクリプトが機能していれば、左右キーを使ってキューブが動くはずです。



5. 動作確認

さあ、いよいよ作成したスクリプトをテストしてみましょう!以下の手順に沿って動作を確認してください。

5-1. プレイモードに切り替え

  1. Unityエディター上部にある再生ボタン(▶︎)をクリックします。
    • 再生ボタンをクリックすると、Unityのプレイモードが開始します。シーン内のオブジェクトが実際に動作する様子を確認できます。
  2. シーンビューで、キューブ(Player)が正しい位置にあることを確認しましょう。

5-2. キーボードで操作する

  1. キーボードの「右矢印キー」を押してみてください。
    • キューブが右方向に動くはずです。
    • キューブが画面右側の範囲(maxX)で止まるか確認してください。
  2. 次に「左矢印キー」を押します。
    • キューブが左方向に動くはずです。
    • キューブが画面左側の範囲(minX)で止まるか確認しましょう。

5-3. 想定外の動作があった場合

もしキューブが動かない、または範囲外に行ってしまう場合は、以下を確認してください:

  • スクリプトが正しくアタッチされているか
    • Playerキューブにスクリプトがドラッグ&ドロップされているか確認しましょう。
  • スクリプト内のコードに誤りがないか
    • 特に、maxXminXの値や、Input.GetAxis("Horizontal")のスペルミスを確認してください。
  • スピード値が適切か
    • speedが非常に小さいと動きが遅くて確認しづらい場合があります。インスペクターから適切な値(例: 5)に設定してください。

5-4. 動作の微調整

動作確認が終わったら、必要に応じて以下の調整を行いましょう:

  • 移動範囲の変更
    • スクリプト内のmaxXminXを編集すると、キューブが動ける範囲を広げたり狭めたりできます。
    • 例: maxX = 3f;に変更すると、右端の移動範囲が広がります。
  • スピードの調整
    • スクリプト内のspeed値を変更して、移動速度を速くしたり遅くしたりできます。
    • 例: speed = 10f;に設定すると、スピーディーな移動が可能です。

すべてが正しく動作していれば成功です!これで、特定の範囲内でオブジェクトを移動させる基礎が身につきましたね。次は、ジャンプや他のキー操作を追加して、さらに楽しい動きを実装してみてはいかがでしょうか?



よくある質問

Q
オブジェクトが動かないのはなぜ?
A

以下のポイントを確認してみましょう:

  • スクリプトが正しくアタッチされているか確認
    ヒエラルキーウィンドウで「Player」オブジェクトを選択し、インスペクターでスクリプトがアタッチされているか確認してください。スクリプトをドラッグ&ドロップしていない場合、動作しません。
  • スペルミスがないか確認
    コード内でInput.GetAxis("Horizontal")の部分や変数名にスペルミスがないか確認してください。
  • Unityエディターの設定
    再生前にプロジェクトが正しく保存され、エディターが動作しているかチェックしてください。
Q
移動範囲を変更するには?
A

スクリプト内の以下のコードを編集するだけで、移動範囲を簡単に変更できます。

private float maxX = 2f; // 最大範囲
private float minX = -2f; // 最小範囲

例えば、移動範囲を-5~5にしたい場合、上記の数値をそれぞれ-5f5fに変更してください。

Q
縦方向に移動させるには?
A

縦方向の移動を追加する場合は、以下のようにコードを変更してください:

float moveY = Input.GetAxis("Vertical") * speed * Time.deltaTime;
float newPositionY = transform.position.y + moveY;
transform.position = new Vector3(transform.position.x, newPositionY, transform.position.z);

このコードをUpdateメソッド内に追加することで、上下キー(デフォルトでは「W」と「S」キー)で縦方向にも移動できるようになります。

おすすめのアセット

Ultimate Asset Bundleは、ゲーム開発に必要なさまざまなアセットを網羅した究極のパッケージです。このコレクションには、3Dモデル、アニメーション、エフェクト、サウンド、UIなど、多岐にわたるアセットが含まれています。初心者からプロまで、あらゆるレベルの開発者が利用可能です。

このバンドルの特徴は、幅広いジャンルのプロジェクトに対応できる点です。リアルなキャラクターモデルや、細部まで作り込まれた環境オブジェクト、動きのあるアニメーションや効果音など、ゲームの世界を豊かにする要素が満載です。