スポンサーリンク
スポンサーリンク
UnityUnityメモ

Unity 生成するPrefabの大きさをスライダーで調整しよう

Unity

こんにちは!今日は、Unityでマウスの左クリックを使ってPrefab(プレハブ)を生成し、UIスライダーでそのサイズを調整する方法を解説します。初心者の方でも簡単にできるように、説明していきますね。

ステップ1: Prefabの準備

まずは生成したいオブジェクトをPrefabとして保存します。ここではCubeを使います。

  1. Hierarchyウィンドウで「右クリック」→「3D Object」→「Cube」を選びます。
  2. 生成されたCubeをプロジェクトウィンドウにドラッグして、Prefabとして保存します。

ステップ2: UIスライダーを作成する

次に、UIスライダーをシーンに追加し、これを使用してPrefabのサイズを調整できるようにします。

  1. 「GameObject」>「UI」>「Slider」を選択して、UIスライダーをシーンに追加します。
  2. Canvasオブジェクトの下にスライダーが追加されます。スライダーの位置やサイズは、Inspectorウィンドウで調整できます。

ステップ3: スクリプトを作成する

次に、マウスの左クリックでPrefabを生成するスクリプトを作成します。

  1. プロジェクトウィンドウで「右クリック」→「Create」→「C# Script」を選びます。
  2. スクリプトに名前をつけます。ここでは「SpawnWithClick」とします。
  3. 作成したスクリプトをダブルクリックして、Visual Studioなどのエディタで開きます。

以下のコードをスクリプトに追加します:

コード全体の説明

このスクリプトは、次のような機能を持っています。

  1. ユーザーが左クリックした場所にオブジェクトを生成する。
  2. 生成されるオブジェクトの大きさをスライダーで調整する。
  3. ユーザーがスライダーを操作している時はオブジェクトを生成しない。

各部分の説明

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メソッドは、毎フレーム呼び出されます。ここでは、次の処理を行っています。

  1. EventSystem.current.IsPointerOverGameObject()で、マウスカーソルがUI要素の上にあるかをチェックします。もしそうなら、何もせずにメソッドを終了します(return)。
  2. 左クリック(`Input.GetMouseButtonDown(0))が検知されたら、以下の処理を行います。
    • スライダーの値をscaleに取得します。
    • マウスの位置をmousePositionに取得します。
    • マウス位置のZ座標を10に設定します(3D空間での位置を確定するため)。
    • プレハブをmousePositionの位置に生成します。この時、2D画面座標を3Dワールド座標に変換するためにCamera.main.ScreenToWorldPointを使用しています。
    • 生成したオブジェクトの大きさをスライダーの値に基づいて設定します。

全体の動き

  1. ゲーム開始時に、スライダーのUI要素を探してslider変数に設定します。
  2. 毎フレーム、左クリックが検知されると、その時のスライダーの値を基に、マウス位置にプレハブを生成します。
  3. プレハブの大きさは、スライダーで調整された値に設定されます。
  4. ユーザーがスライダーを操作している時は、プレハブを生成しません。
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:スクリプトを設定する

次に、スクリプトを設定します。

  1. Hierarchyウィンドウで空のゲームオブジェクトを作成します。「右クリック」→「Create Empty」。
  2. この空のゲームオブジェクトに「SpawnWithClick」スクリプトをドラッグ&ドロップします。
  3. スクリプトのインスペクターで、Prefabフィールドに先ほど作成したCubeのPrefabをドラッグ&ドロップします。
  4. sliderフィールドに、先ほど作成したUIスライダーをドラッグ&ドロップします。

ステップ5:実行して確認する

これで準備完了です!プレイモードにして、マウスの左クリックでPrefabが生成され、UIスライダーでサイズを調整できることを確認しましょう。

もしうまくいかない場合は、スクリプトや設定をもう一度確認してみてください。楽しいUnity開発を!

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました