うにてぃブログ

UnityやUnreal Engineの記事を書いていきます

【Unity】UIElements の要素を動的に変更するサンプル

ボタンを押すと VisualElement を追加削除する EditorWindow のサンプルです
uxml を利用しておらずすべてスクリプトだけで記述しています

f:id:hacchi_man:20201113015130g:plain

using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
 
public class SampleWindow : EditorWindow
{
    [MenuItem("Window/Project/SampleWindow")]
    public static void ShowExample()
    {
        var wnd = GetWindow<SampleWindow>();
        wnd.titleContent = new GUIContent("SampleWindow");
    }
 
    public void OnEnable()
    {
        var root = rootVisualElement;
        
        var itemRoot = new VisualElement();
 
        var horizontal = new VisualElement();
        var fd = horizontal.style.flexDirection;
        fd.value = FlexDirection.Row;
        horizontal.style.flexDirection = fd;
 
        root.Add(horizontal);
        root.Add(itemRoot);
 
        var plusButton = new Button(() =>
        {
            var l = new Label(itemRoot.childCount.ToString());
            itemRoot.Add(l);
            itemRoot.userData = itemRoot.childCount;
            Debug.LogError((int)itemRoot.userData);
        })
        {
            text = "+"
        };
        horizontal.Add(plusButton);
 
        var minButton = new Button(() =>
        {
            if (itemRoot.childCount <= 0)
                return;

            itemRoot.RemoveAt(itemRoot.childCount - 1);
            itemRoot.userData = itemRoot.childCount;
            Debug.LogError((int)itemRoot.userData);
        })
        {
            text = "-"
        };
        horizontal.Add(minButton);
    }
}