Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

IMGUIを使ってお手軽にボタンをつくる。

IMGUIはUnityで用意されているGUI関連機能の一つで、公式ドキュメントでは

IMGUI (即時モードの GUI)
即時モード (Immediate Mode) の GUI システム (IMGUI) は、ゲームオブジェクトベースの Unity の主要 UI システムから独立した機能です。IMGUI はコードで制御される GUI システムで、主にプログラマー用のツールです。IMGUI は、任意のスクリプトで実装する OnGUI 関数を呼び出すことによって制御されます。

とされています。
IMGUI (即時モードの GUI) - Unity マニュアル より
軽く作れるので個人的には気に入った機能です。
が、後述のようにパフォーマンス上の問題で実践投入は公式がお薦めしていないという
若干曰く付きな機能でもあります。

実際のところ

スクリプト

空のゲームオブジェクトを作成し、それに以下のようなC#ファイルを適用します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Button : MonoBehaviour
{
    void OnGUI ()
    {
        // 背景のボックスを作成
        GUI.Box(new Rect(10,10,100,90), "Loader Menu");
    
        // 最初のボタンを作成。これを押すと、Application.Loadlevel (1) が実行されます。
        if(GUI.Button(new Rect(20,40,80,20), "Level 1"))
        {
            print("here 1" );
        }
    
        // 2 番目のボタンを作成。
        if(GUI.Button(new Rect(20,70,80,20), "Level 2")) 
        {
            print("here 2");
        }
    }
}

結果

画面左上に、親子構造のGUIが表示されます。
(砂場遊び中の残骸が見えてますが気にしないでください)
f:id:shuzo_kino:20210505004454p:plain

マウスを持っていきボタンを押下すると、ログに文字列が表示されます。

レイヤーとしては最上位にあるようなので、
衝突判定があるオブジェクトを持って行っても押される事はないです。

推奨ではないらしい……

For performance reasons, Unity does not recommend IMGUI for in-game runtime UI.

Comparison of UI systems in Unity - Unity マニュアル より
とあり、デバッグで使うのはいいものの、ランタイム付で配布するならUI Toolkit か Unity UI(uGUI)にするようにと書いてありました。