UnityUnityメモ

Unityでマウスクリックするたびにランダムな色のボールを生成する方法

Unity

はじめに

Unityはゲーム開発初心者にも優しいツールですが、さらに一歩進んでスクリプトを使うと、もっと楽しいことができます!例えば、クリックするたびにランダムな色のボールを生成できたらどうでしょう?今回はそんな仕組みを作ってみましょう。

「プログラミングなんて難しそう」と思うかもしれませんが、大丈夫!この記事では、初心者にも分かりやすい手順で進めていきます。Unityの基本操作を学びながら、楽しくスクリプトに触れてみましょう。

それでは、早速始めましょう!

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



必要な準備

ボールを生成する仕組みを作る前に、Unityプロジェクトの準備をしましょう。以下の手順に沿って進めてください!


1. Unityプロジェクトを作成

  1. Unity Hubを開く
    Unity Hubを起動し、「新しいプロジェクト」をクリックします。
  2. テンプレートを選択
    テンプレートから「3D」を選び、プロジェクト名を入力します(例: RandomBallSpawner)。保存場所を選んで「作成」をクリックします。

2. プレハブ(Prefab)の準備

  1. ボールの3Dオブジェクトを作成
    ヒエラルキー(Hierarchy)ウィンドウで右クリック →「3D Object」→「Sphere」を選択します。これでシーンに球体が追加されます。
  2. ボールをプレハブ化
    • プロジェクトウィンドウ(Project)で「Assets」フォルダを開きます。
    • 球体をドラッグ&ドロップして「Assets」フォルダに配置します。これでプレハブとして保存されました。
    • 作成したプレハブの名前を「Ball」に変更しておきましょう。

3. カメラの設定(必要に応じて)

  1. カメラの位置を調整
    • シーンビューでカメラを選択し、「Transform」コンポーネントの位置を調整します。例えば、Position(0, 5, -10) に設定すると、ボール生成位置が見やすくなります。
  2. カメラの向き
    • カメラを選択した状態で「Rotate Tool」を使い、カメラが球体を正面から映すように調整します。

4. 必要なフォルダを作成

  1. Scriptsフォルダの作成
    プロジェクトウィンドウで右クリック →「Create」→「Folder」を選択し、「Scripts」という名前のフォルダを作成します。

これで準備完了です!次は、ボールを生成するスクリプトを作成していきましょう。




スクリプトの作成

それでは、マウスクリックでボールを生成し、その色をランダムに変えるスクリプトを作成していきましょう。以下の手順に沿って進めてください!


1. スクリプトファイルを作成

  1. Scriptsフォルダを開く
    プロジェクトウィンドウで、先ほど作成した「Scripts」フォルダを開きます。
  2. 新しいスクリプトを作成
    • フォルダ内で右クリック →「Create」→「C# Script」を選択。
    • 名前を「BallSpawner」に変更します。

2. コードを記述

  1. スクリプトを開く
    作成した「BallSpawner」スクリプトをダブルクリックして開きます。通常、Visual Studioや別のコードエディタが起動します。
  2. 以下のコードを貼り付ける
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallSpawner : MonoBehaviour
{
    public GameObject prefab; // ボールのプレハブ
    private Vector3 mousePosition; // マウス位置

    void Update()
    {
        // マウス左クリックを検知
        if (Input.GetMouseButtonDown(0))
        {
            // マウスのスクリーン座標を取得
            mousePosition = Input.mousePosition;
            mousePosition.z = 10.0f; // カメラからの距離を設定

            // ワールド座標に変換してボールを生成
            GameObject obj = Instantiate(prefab, Camera.main.ScreenToWorldPoint(mousePosition), Quaternion.identity);

            // ボールの色をランダムに設定
            obj.GetComponent<Renderer>().material.color = new Color(Random.value, Random.value, Random.value, 1.0f);
        }
    }
}

1. 必要なライブラリを読み込む

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
  • UnityEngine:Unityでゲームオブジェクトやコンポーネントを操作するのに必要なライブラリです。
  • System.CollectionsSystem.Collections.Generic:リストやコレクションの操作が必要なときに使いますが、今回のスクリプトでは実際には使われていません。

2. クラスと変数の宣言

public class BallSpawner : MonoBehaviour
{
public GameObject prefab; // ボールのプレハブ
private Vector3 mousePosition; // マウス位置
}
  • public GameObject prefab;
    • Unityエディタで設定できる「ボールの雛形(プレハブ)」を入れる変数です。
    • publicなので、Unityのインスペクターで設定可能です。
  • private Vector3 mousePosition;
    • マウスの位置を保存するための変数です。
    • **Vector3**は3D空間の座標を扱うデータ型です(x, y, z)。

3. Updateメソッドで動きをチェック

void Update()
{
// マウス左クリックを検知
if (Input.GetMouseButtonDown(0))
{
// マウスのスクリーン座標を取得
mousePosition = Input.mousePosition;
mousePosition.z = 10.0f; // カメラからの距離を設定

// ワールド座標に変換してボールを生成
GameObject obj = Instantiate(prefab, Camera.main.ScreenToWorldPoint(mousePosition), Quaternion.identity);

// ボールの色をランダムに設定
obj.GetComponent<Renderer>().material.color = new Color(Random.value, Random.value, Random.value, 1.0f);
}
}

ここがスクリプトのメイン部分です!

  1. マウスの左クリックを検知if (Input.GetMouseButtonDown(0))
    • Input.GetMouseButtonDown(0)は、マウス左クリックが押された瞬間を検知する条件です。
    • 0が左クリック、1が右クリック、2が中クリックです。
  2. マウスの位置を取得mousePosition = Input.mousePosition; mousePosition.z = 10.0f; // カメラからの距離を設定
    • **Input.mousePosition**は、マウスの位置をスクリーン座標(2D)で取得します。
    • **mousePosition.z**は奥行き(カメラからの距離)を設定しています。これがないと3D空間に変換できません。
  3. スクリーン座標をワールド座標に変換してボールを生成GameObject obj = Instantiate(prefab, Camera.main.ScreenToWorldPoint(mousePosition), Quaternion.identity);
    • Camera.main.ScreenToWorldPoint:スクリーン座標を3D空間の座標(ワールド座標)に変換します。
    • Instantiate:指定したプレハブをワールド座標で生成します。
    • Quaternion.identity:回転なしで生成する指定です。
  4. ボールの色をランダムに設定obj.GetComponent<Renderer>().material.color = new Color(Random.value, Random.value, Random.value, 1.0f);
    • GetComponent<Renderer>():ボールの見た目(マテリアル)を操作するためのコンポーネントを取得します。
    • new Color:新しい色を作成します。
      • Random.value:0~1の間でランダムな値を生成します。
      • 最後の1.0fは色の透明度(アルファ値)を指定し、完全に不透明にしています。

全体の動き

  1. スクリプトがついたオブジェクトがシーンにある。
  2. プレハブ(ボールの雛形)をUnityのインスペクターにドラッグ&ドロップして設定。
  3. プレイ中にマウスの左クリックをすると:
    • マウスの位置に基づいて3D空間上にボールが生成される。
    • ボールの色がランダムに設定される。
  4. マウスをクリックするたびに、どんどんボールが生成される!

これでスクリプトの作成は完了です!次は、このスクリプトを保存して動作を確認してみましょう。



スクリプトをアタッチ

作成したスクリプトをシーンに組み込んで、マウスクリックでボールを生成できるように設定しましょう。以下の手順に従ってください!


1. 空のゲームオブジェクトを作成

  1. ヒエラルキーで作成
    • ヒエラルキー(Hierarchy)ウィンドウで右クリック →「Create Empty」を選択します。
    • 作成したオブジェクトの名前を「BallSpawner」に変更します。
  2. 位置を初期化
    • 作成した「BallSpawner」を選択し、インスペクター(Inspector)で Transform の位置(Position)を (0, 0, 0) に設定します。

2. スクリプトをアタッチ

  1. スクリプトをドラッグ&ドロップ
    • プロジェクトウィンドウで「Scripts」フォルダを開きます。
    • 「BallSpawner」スクリプトをドラッグ&ドロップして、ヒエラルキーの「BallSpawner」オブジェクトにアタッチします。
  2. インスペクターで確認
    • ヒエラルキーで「BallSpawner」を選択すると、インスペクターに「BallSpawner (Script)」コンポーネントが表示されます。

3. プレハブを設定

  1. Prefabフィールドに設定
    • インスペクターの「BallSpawner (Script)」コンポーネントを確認します。
    • 「Prefab」というフィールドに先ほど作成した「Ball」プレハブをドラッグ&ドロップします。
  2. 確認
    • フィールドに「Ball」と表示されていれば設定完了です。

これでスクリプトのアタッチと設定は完了です!次は、実際にプレイモードで動作を確認しましょう。マウスをクリックして、ランダムな色のボールが生成されるか試してみてください!



実行して確認

ここまで準備ができたら、実際にUnityエディタ上でスクリプトの動作を確認しましょう!以下の手順に従ってください。


1. プレイモードで実行

  1. Unityエディタでプレイモードを開始
    • 上部の再生ボタン(▶)をクリックして、プレイモードを開始します。
    • シーンビューまたはゲームビューがアクティブになり、操作可能な状態になります。
  2. マウスをクリック
    • ゲームビュー内でマウスの左クリックをします。
    • クリックした位置にランダムな色のボールが生成されるか確認してください。

これで動作確認は完了です!無事にボールが生成され、ランダムな色が設定されていれば成功です。お疲れさまでした!もし問題があれば、質問セクションを参考にしてみてください。



よくある質問(Q&A)

Q
ボールが生成されないのですが、どうすればいいですか?
A

スクリプトが正しくアタッチされているか、プレハブが設定されているか確認してください。

Q
ボールのサイズを変更するにはどうすればいいですか?
A

プレハブの「Scale」を変更すれば反映されます。

Q
マウスの右クリックでも生成したい場合は?
A

スクリプト内のInput.GetMouseButtonDown(0)Input.GetMouseButtonDown(1)に変更してください。