うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Runtime UIElements を試す

Unity2020.1から Runtime UIElements が利用できるようになったので導入と表示までをまとめる

利用できると言ってもまで Preview 版なので、デバッグUIに利用する分には問題無いが
uGUI の代わりとしてはまだ使えなさそうでした

利用した Version

UnityVersion:2020.1.10f
UI Builder;1.0.0-preview.9
UI Toolkit;1.0.0-preview.9

導入

Runtime UIElements の導入は PackageManagerから行う

左上の「+」より Add package form git URL を選択

f:id:hacchi_man:20201029231730p:plain:w200

com.unity.ui を追加

f:id:hacchi_man:20201029231810p:plain:w300

そうすると UI Toolkit が表示されるのでこれをインストール
ついでに UIBuilder も利用するので一緒にインストール
Preview なので設定で Preview 版を表示するようにする必要があります

f:id:hacchi_man:20201029232253p:plain:w300

これで必要なライブラリは揃いました

Runtime で利用する

uxml の準備

UI Elements を表示させるには uxml が必要なので UI Builder を利用して適当な uxml を作成する

f:id:hacchi_man:20201029232629p:plain:w200

とりあえずボタンでもあればいいので 左下の Library から Button を Viewport へドラッグ

f:id:hacchi_man:20201029232744p:plain:w200

するとボタンが表示されます

f:id:hacchi_man:20201029232821p:plain:w300

これを適当なところへ保存します

f:id:hacchi_man:20201029232901p:plain:w100

コンポーネントのセット

GameObject を作成し UIDocument を AddComponent します
これが uGUI でいう Canvas の代わりになります

f:id:hacchi_man:20201029233133p:plain

UIDocument には uxml と Panel Setting Asset が必要なので
右クリックメニューから Panel Setting Asset を作成します

特に値をいじる必要はありません

f:id:hacchi_man:20201029233251p:plain:w300

そして uxml と Panel Setting Asset をセットすると

f:id:hacchi_man:20201029233440p:plain

Game Scene 上に表示されます

f:id:hacchi_man:20201029233519p:plain:w300

しかし再生してもボタンなのにクリックしても反応しません

クリックを有効にする

クリック等入力を有効にするためには、Event System(UI Toolkit) が必要になります
これを UIDocument と同じ GameObject に 追加してください

そうすることでクリックすると色が変わることが確認できます

f:id:hacchi_man:20201029233114p:plain

クリック時にログを出す

クリック処理自体は Runtime じゃない場合と変わらない

下記のコードを記述して UIDocument がある GameObejct に追加することでクリック時に特定の処理を呼ぶことができる

using UnityEngine;
using UnityEngine.UIElements;
 
public class UESample : MonoBehaviour
{
    private void Awake()
    {
        var document = GetComponent<UIDocument>();
        var button = document.rootVisualElement.Q<Button>();
        button.clicked += () => Debug.Log("Click");
    }
}

f:id:hacchi_man:20201029234810g:plain