うにてぃブログ

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

【Unity】Visual Element を自作する

VisualElement を継承することで VisualElement を自作することができる

他にも

  • BaseField<>
  • BindableElement
  • TextElement

等既存の要素を利用して作成することができる

using UnityEngine.UIElements;
 
public class SampleElement : VisualElement
{
}

しかしこれだけでは UIBuilder の Library に表示されないため
UxmlFactory を内部クラスとして作成する必要がある

using UnityEngine.UIElements;

namespace Sample
{
    public class SampleElement : VisualElement
    {
        public new class UxmlFactory : UxmlFactory<SampleElement> { }
    }
}

これにより UIBuilder で自作 Element を uxml に追加できる

f:id:hacchi_man:20201031155029p:plain

自作 Visual Element に子要素などを追加する

自作した Visual Element を表示しただけでは子要素等なく何も表示されない

f:id:hacchi_man:20201031155157p:plain

        // デフォルトで要素を構築する場合は uxml をロードするわけじゃなく
        // visual Element を new して自作している

        // そしてパラメータの設定は クラスを追加して uss 側で行う

そのため、コンストラクタで Visual Element を生成することで子要素を作成する
uxml から生成できると楽なんだが、Editor ならまだしも Runtime だとビルドに含まれていない可能性があるので厳しそう

       public SampleElement()
        {
            var label = new Label {text = "label"};
            Add(label);

            var button = new Button {text = "button"};
            Add(button);
        }

また、初期クラスをセットする場合は AddToClassList を利用する

途中で既存のクラスに対して要素を追加した場合も反映されるので、他に影響があるのであれば
新しいクラスを作成したほうがいい