UnityUnityメモ

Unity入門:オブジェクトの周りをランダムに移動させる方法を解説!

Unity

はじめに

Unityでゲームを作るとき、「オブジェクトを自由に動かしてみたい!」と思ったことはありませんか?特に、ランダムに動くオブジェクトを作ると、ゲームの中にリアリティや面白さが生まれます。今回はそんな仕組みを簡単に作る方法をご紹介します。

この記事では、「Sphere(赤い球体)」が「Cube(青い立方体)」の周りをランダムに移動する仕組みをUnityで作ります。オブジェクトの配置からスクリプトの書き方まで、初心者でもわかるように丁寧に解説していきますので安心してくださいね。

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

1. オブジェクトの準備

まずはUnityで基本的なシーンを設定していきます。ここでは、床(Plane)、移動の中心となるCube(青)、そしてランダム移動するSphere(赤)を配置していきます。


手順 1: Plane(床)の配置

  1. Unityを起動し、新しい3Dプロジェクトを作成します。
  2. ヒエラルキー(Hierarchy)ウィンドウで右クリック → 3D Object → Plane を選択します。
  3. シーンビューに「床」が追加されます。
  4. 名前をわかりやすく「Floor」に変更しましょう。

手順 2: Cube(青)の配置

  1. ヒエラルキーウィンドウで右クリック → 3D Object → Cube を選択します。
  2. シーンビューにCubeが表示されます。これがランダム移動の中心となるオブジェクトです。
  3. 名前を「Target」に変更します。
  4. マテリアルの設定(任意):
    • プロジェクトウィンドウで右クリック → Create → Material を選び、「BlueMaterial」と名前をつけます。
    • マテリアルの色を青に変更し、Cubeにドラッグ&ドロップして適用します。

手順 3: Sphere(赤)の配置

  1. ヒエラルキーウィンドウで右クリック → 3D Object → Sphere を選択します。
  2. Sphereがシーンに追加されます。このオブジェクトがランダムに移動します。
  3. 名前を「MovingSphere」に変更します。
  4. マテリアルの設定(任意):
    • プロジェクトウィンドウで右クリック → Create → Material を選び、「RedMaterial」と名前をつけます。
    • マテリアルの色を赤に変更し、Sphereにドラッグ&ドロップして適用します。

手順 4: カメラとライトの調整(必要に応じて)

  • カメラ:シーン全体が見えるように位置と角度を調整してください。
  • ライト:オブジェクトが見やすくなるように調整します。

これで初期設定は完了です!次はランダムに移動するスクリプトを作成していきましょう。



2. スクリプトの作成

Sphereをランダムに動かすためのスクリプトを作成します。簡単な手順で進めていきましょう!


手順 1: スクリプトを作成する

  1. プロジェクトウィンドウ(画面下のエリア)を右クリックします。
  2. メニューから「Create」→「C# Script」を選択します。
  3. 新しく作成されたスクリプトに「RandomMovement」という名前を付けます。

手順 2: スクリプトを編集する

  1. 「RandomMovement」スクリプトをダブルクリックして、スクリプトエディタ(通常はVisual Studio)が開きます。
  2. 以下のコードをコピーして貼り付けます。
using System.Collections;
using UnityEngine;

public class RandomMovement : MonoBehaviour
{
    public Transform target; // CubeのTransformを設定するための変数
    public float moveRange = 5f; // ランダムに移動する範囲
    public float moveInterval = 1f; // 移動間隔

    private void Start()
    {
        // ランダム移動を開始
        StartCoroutine(MoveRandomly());
    }

    IEnumerator MoveRandomly()
    {
        while (true)
        {
            // Cubeの周りでランダムな位置を計算
            Vector3 randomPosition = target.position + new Vector3(
                Random.Range(-moveRange, moveRange),
                Random.Range(-moveRange, moveRange),
                Random.Range(-moveRange, moveRange)
            );

            // Sphereの位置を更新
            transform.position = randomPosition;

            // 次の移動まで待機
            yield return new WaitForSeconds(moveInterval);
        }
    }
}

手順 3: スクリプトの解説

スクリプトには次のような役割があります:

  • target
    Cube(青)の位置を取得するための変数です。Inspectorで設定します。
  • moveRange
    Sphere(赤)がランダムに移動する範囲を設定します。この値を変更することで移動可能な距離を調整できます。
  • moveInterval
    Sphereが次に移動するまでの間隔を秒単位で設定します。
  • MoveRandomlyメソッド
    Coroutine(コルーチン)を使用して、指定された範囲内でランダムな位置を計算し、Sphereを移動させます。

コード全体の説明

このスクリプトは以下のような動きをします:

  1. ゲームが始まると、自動的にランダムな場所へ移動し続ける。
  2. Cube(キューブ)の周りを一定の範囲内でランダムに動く。
  3. 移動の間隔は指定された時間ごとに行われる。

各部分の説明

変数の定義

  • target: ランダムに移動する範囲の中心となるCubeの位置を指定します。
  • moveRange: 移動する範囲の広さを指定します。値が大きいほど広い範囲を移動します。
  • moveInterval: 移動と移動の間の時間間隔を秒単位で指定します。

スタートメソッド

  • Startメソッドは、ゲームが始まったときに最初に実行されます。
  • StartCoroutine(MoveRandomly())で、MoveRandomlyというコルーチン(繰り返し実行される処理)を開始します。

MoveRandomlyコルーチン

  • IEnumeratorはコルーチンの戻り値の型です。
  • while (true)で無限ループを作り、スフィアがずっと動き続けるようにします。
  • Vector3 randomPositionはランダムな位置を計算します。
    • Random.Range(-moveRange, moveRange)を使って、moveRangeの範囲内でランダムな数値を生成します。これをCubeの位置(target.position)に足し合わせて、ランダムな位置を決定します。
  • transform.position = randomPositionでスフィアの位置を更新します。
  • yield return new WaitForSeconds(moveInterval)で、指定された時間だけ待機します。

全体の動き

  1. ゲーム開始時にStartメソッドが呼ばれ、MoveRandomlyコルーチンが開始されます。
  2. コルーチン内で、無限ループによりスフィアは常にランダムな位置に移動し続けます。
  3. moveIntervalで指定された時間ごとに移動するため、スフィアの動きがゆっくりとなります。

手順 4: スクリプトを保存する

コードの編集が終わったら、スクリプトを保存します。Ctrl + S(Windows)または Cmd + S(Mac) を押すか、ファイルメニューから「Save」を選びます。


これでスクリプトの作成は完了です!次は、このスクリプトをSphereに適用して動作確認をしましょう!



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

次に、作成したスクリプトをSphereに適用して動作するように設定します。

  1. スクリプトをアタッチする
    • プロジェクトウィンドウで、先ほど作成した「RandomMovement」スクリプトを見つけます。
    • このスクリプトをドラッグして、作成したSphereにドロップします。
  2. TargetフィールドにCubeを設定する
    • Sphereを選択したまま、インスペクター(Inspector)ウィンドウを確認します。
    • スクリプトがアタッチされているのを確認し、「Target」というフィールドにCubeを設定します。
    • Cubeをヒエラルキーからドラッグして、インスペクターの「Target」フィールドにドロップしてください。



4. 実行と確認

いよいよ完成した仕組みを動かしてみましょう!以下の手順で実行できます。

  1. 再生ボタンをクリック
    Unityの上部にある再生ボタン(▶)をクリックして、プレイモードを開始します。
  2. Sphereの動きを確認
    シーンビューまたはゲームビューで、赤いSphereが青いCubeの周りをランダムに動き回る様子を確認してみましょう。

これで、SphereがCubeの周りをランダムに動き回る動作を作ることができたはずです!問題があれば、スクリプトや設定をもう一度確認してみましょう。



よくある質問

Q
Sphereが全然動かないんだけど?
A

スクリプトが正しくアタッチされているか、また「Target」にCubeが設定されているか確認してください。

Q
移動範囲を広げたい場合はどうすればいいの?
A

スクリプト内のRandom.Rangeの範囲を変更してください。例えば、Random.Range(-5f, 5f)とすると移動範囲が広がります。

Q
移動速度を速くしたい場合は?
A

yield return new WaitForSeconds(1.0f);の値を小さくしてください。例えば、yield return new WaitForSeconds(0.5f);とすると0.5秒おきに移動します。