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 に追加できる
自作 Visual Element に子要素などを追加する
自作した Visual Element を表示しただけでは子要素等なく何も表示されない
// デフォルトで要素を構築する場合は 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
を利用する
途中で既存のクラスに対して要素を追加した場合も反映されるので、他に影響があるのであれば
新しいクラスを作成したほうがいい