UnityUnityメモ

Unity初心者必見!特定範囲内でランダムに動かすスクリプトの作り方

Unity

1. はじめに

Unityを使ってゲームを作るとき、オブジェクトが動き回る仕組みを加えると、ゲームにダイナミックな要素を追加できます。特に、特定の範囲内でオブジェクトをランダムに動かす機能は、NPC(Non-Player Character)の動きやアイテムのランダムな配置に使えたりと、応用範囲がとても広いです。

でも、「ランダムな動きを作るなんて難しそう」と感じるかもしれません。実は、Unityではたった数行のC#スクリプトを使うだけで、簡単に実現できるんです!

本記事では、Unity初心者の方でもわかるように、シンプルなステップで特定範囲内をランダムに動くオブジェクトを作る方法を解説します。一緒に、ゲームにちょっとした「動き」を追加してみましょう!

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



2. プロジェクトの準備

まずはUnityを起動して新しいプロジェクトを作成しましょう!以下の手順に沿って準備を進めていきます。

プロジェクトを作成

  1. Unity Hubを開き、「新しいプロジェクト」ボタンをクリックします。
  2. テンプレートの中から「3D」を選択し、プロジェクト名を入力します。例:「RandomObjectMovement」。
  3. 保存場所を指定して「プロジェクトを作成」ボタンをクリックします。

これで新しいプロジェクトが作成され、Unityエディタが立ち上がります。


平面オブジェクトを追加(舞台の作成)

次に、オブジェクトが動き回るための「舞台」を用意します。平面オブジェクトをシーンに追加しましょう。

  1. Hierarchy(ヒエラルキー)ウィンドウで右クリックします。
  2. メニューから「3D Object」→「Plane」を選択します。
  3. シーンに白い平面が追加されましたね!

この平面がオブジェクトが動き回るエリアになります。サイズを変更したい場合は以下の手順で調整できます。

  • Inspector(インスペクター)ウィンドウで「Scale」の値を変更します。
    • 例: X:10, Y:1, Z:10 に設定すると平面が広がり、広い舞台になります。

保存を忘れずに!

ここまでの作業を保存しておきましょう。

  1. メニューバーから「File」→「Save As」を選択します。
  2. シーン名を「MainScene」などわかりやすい名前にして保存します。

これでプロジェクトの準備は完了です!次は動くオブジェクトを追加して、いよいよスクリプトを作成していきます。



3. ランダムに動くオブジェクトの作成

まずは、ランダムに動かす対象となるオブジェクトをシーンに追加しましょう。ここではわかりやすいように「Sphere」(球体オブジェクト)を使用します。以下の手順に従って作成してください。

① Sphereオブジェクトを追加する

  1. ヒエラルキー(Hierarchy)ウィンドウを確認してください。このウィンドウは現在のシーン内に存在するオブジェクトを一覧で表示しています。
  2. ヒエラルキーウィンドウの空白部分で右クリックします。
  3. メニューが表示されるので、**「3D Object」→「Sphere」**を選択します。
  4. シーン内に球体(Sphere)が追加されます。

② Sphereの位置を調整する

追加されたSphereが、平面(Plane)の上に浮いている状態を確認します。次の手順で位置を調整しましょう。

  1. ヒエラルキーウィンドウで「Sphere」をクリックします。
  2. インスペクター(Inspector)ウィンドウの「Transform」セクションに注目します。
  3. 「Position」の値を次のように設定してください:
    • X: 0
    • Y: 0.5
    • Z: 0
  4. この設定により、球体が平面の中央に浮かぶ形で配置されます。

③ 名前を変更する(任意)

シーン内に複数のオブジェクトが存在するとわかりにくくなるため、わかりやすい名前をつけておくと便利です。

  1. ヒエラルキーウィンドウで「Sphere」を選択します。
  2. 右クリックして「Rename」を選択、またはキーボードのF2キーを押します。
  3. 名前を「MovingSphere」などに変更しましょう。

これでランダムに動くオブジェクトの準備は完了です!次のステップでは、この球体を動かすスクリプトを作成していきます。楽しみにしてくださいね!



4. スクリプト作成

では、オブジェクトをランダムに動かすためのスクリプトを作成していきましょう。以下の手順に従って、初心者の方でも簡単にスクリプトを作成できるように解説します!


(1) スクリプトを作成する

  1. プロジェクトウィンドウを表示
    Unityエディタの画面下部または左側にある「Project」ウィンドウを確認してください。このウィンドウではプロジェクト内のファイルを管理します。
  2. 新しいスクリプトの作成
    プロジェクトウィンドウで右クリックして、「Create」→「C# Script」を選択します。すると、新しいスクリプトファイルが作成されます。
  3. スクリプトに名前を付ける
    作成されたスクリプトの名前を「SphereMove」に変更します。名前を変更するには、スクリプト名をダブルクリックして編集してください。

(2) スクリプトをオブジェクトにアタッチする

  1. アタッチ先のオブジェクトを選択
    ヒエラルキー(Hierarchy)ウィンドウで、ランダムに動かしたいオブジェクト(今回の例ではSphere)を選択します。
  2. スクリプトをドラッグ&ドロップ
    プロジェクトウィンドウから先ほど作成した「SphereMove」スクリプトを、選択したSphereにドラッグ&ドロップしてください。
    ドロップが成功すると、インスペクター(Inspector)ウィンドウの下部に「SphereMove」スクリプトが表示されます。

(3) アタッチが正しく行われたか確認

  • インスペクターウィンドウを開き、SphereMoveスクリプトがリストに追加されていることを確認してください。
  • これで、スクリプトが正しくオブジェクトに適用されました!

スクリプトの作成とアタッチが完了したので、次はスクリプトの中身を編集して、オブジェクトがランダムに動く機能を実装していきます!続けて確認していきましょう。



5. スクリプトの実装

それでは、作成したスクリプトにコードを記述していきましょう。このコードを使えば、オブジェクトが特定の範囲内をランダムに移動するようになります。コードの解説も含めて、一緒に見ていきましょう!

スクリプトの編集

  1. プロジェクトウィンドウで作成した「SphereMove」スクリプトをダブルクリックして開きます。すると、スクリプトがコードエディタ(通常はVisual Studio)で開きます。
  2. 以下のコードをコピーして、エディタ内に貼り付けてください。
using UnityEngine;

public class SphereMove : MonoBehaviour
{
    private float time;  // 次の動きまでの時間を管理する変数
    private float vecX;  // X軸方向の移動先座標
    private float vecZ;  // Z軸方向の移動先座標

    void Update()
    {
        // 毎フレーム時間を減少させる
        time -= Time.deltaTime;

        // 時間が0以下になったら新しい座標を設定
        if (time <= 0)
        {
            // X軸とZ軸の移動先をランダムに設定
            vecX = Random.Range(-4.5f, 5.0f);
            vecZ = Random.Range(-4.5f, 5.0f);

            // オブジェクトを新しい位置に移動
            this.transform.position = new Vector3(vecX, 0.5f, vecZ);

            // 次の動きまでの時間をリセット
            time = 1.0f;
        }
    }
}

コードの解説

  • time
    この変数は「次に動くまでの時間」を管理します。Time.deltaTimeを使って、毎フレーム経過時間を引いていきます。
  • Random.Range
    これはUnityのランダム数生成機能です。Random.Range(-4.5f, 5.0f)は、X軸やZ軸でランダムな値を生成します。この範囲内にオブジェクトが移動するようになります。値の範囲はお好みで調整可能です。
  • this.transform.position
    このプロパティを使って、オブジェクトの位置を直接変更します。Y座標を固定している(0.5f)ので、オブジェクトが平面の上で移動します。
  • time = 1.0f;
    新しい動きが発生するまでのインターバルを設定しています。この値を小さくすれば、オブジェクトがより頻繁に動きます。

スクリプトを保存

編集が完了したら、スクリプトを保存(Ctrl + S)してUnityに戻りましょう。Unityがスクリプトの変更を自動で検知してくれます。


これでスクリプトの編集は完了です!次は、Unityエディタで実際にこのスクリプトを動かして、オブジェクトがランダムに動くかを確認してみましょう!



6. 動作確認

さあ、スクリプトの準備ができたら、いよいよ動作確認をしてみましょう!ここでは、Unityエディタを使って実際にオブジェクトがランダムに動くかどうかを確認する手順を説明します。


1. ゲームを再生する

Unityエディタの上部にある「▶」ボタン(Playボタン)をクリックして、ゲームを実行します。シーン内のオブジェクトがどのように動くか確認できるモードに切り替わります。

2. シーンビューで確認

シーンビューまたはゲームビューで、Sphereがランダムに移動していることを確認しましょう。スクリプトに記載した通り、一定の間隔(1秒ごと)で、Sphereが新しい位置に移動するはずです。

  • Sphereが動いていない場合は、以下を確認してみてください:
    • スクリプトが正しくアタッチされているか:HierarchyウィンドウのSphereオブジェクトを選択し、Inspectorウィンドウでスクリプトが表示されていることを確認します。
    • スクリプト内のコードが正しいか:ランダムな座標範囲やTime.deltaTimeの設定が正しいか確認してください。

3. 動きの調整

動きが意図通りでない場合は、スクリプトの以下の部分を調整してみましょう:

vecX = Random.Range(-4.5f, 5.0f);
vecZ = Random.Range(-4.5f, 5.0f);

この範囲を変更すると、Sphereが移動するエリアを拡大または縮小できます。例えば、Random.Range(-10f, 10f)に変更すると、Sphereがより広い範囲を動き回るようになります。

4. ゲームを停止する

動作確認が終わったら、Playボタンを再度クリックしてゲームを停止します。これでUnityエディタは編集モードに戻ります。


以上の手順で、オブジェクトがランダムに移動する動作を確認できます!問題が発生した場合は、FAQセクションやエラーコンソールのメッセージを参考にトラブルシューティングを行いましょう。


これで「動作確認」のステップは完了です!次は、さらに応用して複数のオブジェクトを動かしたり、移動範囲をカスタマイズしてみてくださいね!



よくある質問

Q
ランダムな動きがうまくいきません。原因は何ですか?
A

スクリプトが正しくアタッチされているか、オブジェクトの座標範囲が適切か確認してください。

Q
複数のオブジェクトをランダムに動かすには?
A

Prefabを使用し、同じスクリプトを複数のオブジェクトに適用することで可能です。

Q
他の形状のオブジェクトでも使用できますか?
A

はい、Sphere以外の形状でも同様にスクリプトを適用すれば動作します。

おすすめのアセット

Hypercasual Puzzle Game Engineは、初心者でも簡単にパズルゲームを作れるUnityアセットです。このエンジンを使えば、プログラミングの知識がなくてもオリジナルのパズルゲームを開発できます。直感的な操作で、ステージの作成やパズルの設計ができるため、ゲーム制作が初めての人にもおすすめです。

主な特徴として、カスタマイズ可能なパズル要素や、豊富なテンプレート、使いやすいユーザーインターフェースが挙げられます。さらに、このエンジンにはアニメーションやサウンドエフェクトも含まれており、ゲームにリッチな表現を追加することができます。