こんにちは!今日は、Unityでマウスの左クリックを使ってPrefab(プレハブ)を生成し、UIスライダーでそのサイズを調整する方法を解説します。初心者の方でも簡単にできるように、説明していきますね。
ステップ1: Prefabの準備
まずは生成したいオブジェクトをPrefabとして保存します。ここではCubeを使います。
- Hierarchyウィンドウで「右クリック」→「3D Object」→「Cube」を選びます。
- 生成されたCubeをプロジェクトウィンドウにドラッグして、Prefabとして保存します。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-03_151313.png)
ステップ2: UIスライダーを作成する
次に、UIスライダーをシーンに追加し、これを使用してPrefabのサイズを調整できるようにします。
- 「GameObject」>「UI」>「Slider」を選択して、UIスライダーをシーンに追加します。
- Canvasオブジェクトの下にスライダーが追加されます。スライダーの位置やサイズは、Inspectorウィンドウで調整できます。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-08_155505.png)
ステップ3: スクリプトを作成する
次に、マウスの左クリックでPrefabを生成するスクリプトを作成します。
- プロジェクトウィンドウで「右クリック」→「Create」→「C# Script」を選びます。
- スクリプトに名前をつけます。ここでは「SpawnWithClick」とします。
- 作成したスクリプトをダブルクリックして、Visual Studioなどのエディタで開きます。
以下のコードをスクリプトに追加します:
コード全体の説明
このスクリプトは、次のような機能を持っています。
- ユーザーが左クリックした場所にオブジェクトを生成する。
- 生成されるオブジェクトの大きさをスライダーで調整する。
- ユーザーがスライダーを操作している時はオブジェクトを生成しない。
各部分の説明
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
まず、Unityで必要な機能を使うための名前空間をインポートしています。UnityEngine
は基本的な機能、UnityEngine.UI
はUI(ユーザーインターフェース)関連の機能、UnityEngine.EventSystems
はイベントシステム関連の機能を提供します。
public class SpawnWithClick : MonoBehaviour
{
public GameObject prefab;
private Vector3 mousePosition;
public Slider slider;
次に、SpawnWithClick
という名前のクラスを作成しています。このクラスは、MonoBehaviour
を継承しており、Unityのゲームオブジェクトにアタッチすることで機能します。prefab
は生成するオブジェクトの元となるプレハブです。mousePosition
はマウスの位置を保存するための変数です。slider
はスライダーのUI要素です。
void Start()
{
slider = GameObject.Find("Slider").GetComponent<Slider>();
}
Start
メソッドは、ゲーム開始時に一度だけ呼び出されます。この中で、シーン内にあるスライダーを探して、slider
変数に格納しています。
void Update()
{
//Sliderをクリックする時、プレハブ生成を止める
if (EventSystem.current.IsPointerOverGameObject())
{
return;
}
if (Input.GetMouseButtonDown(0))
{
float scale = slider.value;
mousePosition = Input.mousePosition;
mousePosition.z = 10.0f;
GameObject obj = Instantiate(prefab, Camera.main.ScreenToWorldPoint(mousePosition), Quaternion.identity);
obj.transform.localScale = new Vector3(scale, scale, scale);
}
}
}
Update
メソッドは、毎フレーム呼び出されます。ここでは、次の処理を行っています。
EventSystem.current.IsPointerOverGameObject()
で、マウスカーソルがUI要素の上にあるかをチェックします。もしそうなら、何もせずにメソッドを終了します(return
)。- 左クリック(`Input.GetMouseButtonDown(0))が検知されたら、以下の処理を行います。
- スライダーの値を
scale
に取得します。 - マウスの位置を
mousePosition
に取得します。 - マウス位置のZ座標を10に設定します(3D空間での位置を確定するため)。
- プレハブを
mousePosition
の位置に生成します。この時、2D画面座標を3Dワールド座標に変換するためにCamera.main.ScreenToWorldPoint
を使用しています。 - 生成したオブジェクトの大きさをスライダーの値に基づいて設定します。
- スライダーの値を
全体の動き
- ゲーム開始時に、スライダーのUI要素を探して
slider
変数に設定します。 - 毎フレーム、左クリックが検知されると、その時のスライダーの値を基に、マウス位置にプレハブを生成します。
- プレハブの大きさは、スライダーで調整された値に設定されます。
- ユーザーがスライダーを操作している時は、プレハブを生成しません。
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class SpawnWithClick : MonoBehaviour
{
public GameObject prefab;
private Vector3 mousePosition;
public Slider slider;
void Start()
{
slider = GameObject.Find("Slider").GetComponent<Slider>();
}
void Update()
{
//Sliderをクリックする時、プレハブ生成を止める
if (EventSystem.current.IsPointerOverGameObject())
{
return;
}
if (Input.GetMouseButtonDown(0))
{
float scale = slider.value;
mousePosition = Input.mousePosition;
mousePosition.z = 10.0f;
GameObject obj = Instantiate(prefab, Camera.main.ScreenToWorldPoint(mousePosition), Quaternion.identity);
obj.transform.localScale = new Vector3(scale, scale, scale);
}
}
}
ステップ4:スクリプトを設定する
次に、スクリプトを設定します。
- Hierarchyウィンドウで空のゲームオブジェクトを作成します。「右クリック」→「Create Empty」。
- この空のゲームオブジェクトに「SpawnWithClick」スクリプトをドラッグ&ドロップします。
- スクリプトのインスペクターで、Prefabフィールドに先ほど作成したCubeのPrefabをドラッグ&ドロップします。
- sliderフィールドに、先ほど作成したUIスライダーをドラッグ&ドロップします。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-14_163436.png)
ステップ5:実行して確認する
これで準備完了です!プレイモードにして、マウスの左クリックでPrefabが生成され、UIスライダーでサイズを調整できることを確認しましょう。
もしうまくいかない場合は、スクリプトや設定をもう一度確認してみてください。楽しいUnity開発を!