UXML のタグ名をカスタマイズしたり、基本クラス属性のデフォルト値をオーバーライドしたり、カスタムコントロールに使用できる属性を制限したりすることができます。
デフォルトでは、カスタムコントロールの UXML のタグ名は C# のクラス名です。タグに C# のクラス名と異なる名前を付けることは推奨されません。ただし、名前の競合がある場合は、タグ名をカスタマイズすることも可能です。
UXML のタグ名をカスタマイズするには、IUxmlFactory.uxmlName
プロパティと IUXmlFactory.uxmlQualifiedName
プロパティをオーバーライドします。以下に注意してください。
uxmlName
は名前空間内で一意である必要があります。uxmlQualifiedName
はプロジェクト内で一意である必要があります。両方の名前が一意でない場合、Unity が、アセンブリのロード時に例外をスローします。
以下のサンプルコードは、UXML 名をオーバーライドしてカスタマイズします。
public class FactoryWithCustomName : UxmlFactory<..., ...>
{
public override string uxmlName
{
get { return "UniqueName"; }
}
public override string uxmlQualifiedName
{
get { return uxmlNamespace + "." + uxmlName; }
}
}
デフォルトでは、IUxmlFactory
は、要素をインスタンス化し、要素の名前によって要素を選択します。要素の属性値を考慮して選択するには、IUXmlFactory.AcceptsAttributeBag()
をオーバーライドします。factory は、要素の属性を調査して、その UXML 要素のオブジェクトをインスタンス化できるかどうかを決定します。
VisualElement
クラスがジェネリックである場合、factory で要素の属性を調査すると場合によって役立ちます。この場合、クラスの特殊化のためのクラス factory は、UXML type
属性の値を調査できます。値によって、インスタンス化が許可または拒否されます。
複数の factory が特定の要素をインスタンス化できる場合、最初に登録された factory が選択されます。
基本クラスで宣言された属性のデフォルト値を変更するには、派生クラスの UxmlTraits
クラス内に defaultValue
を設定します。
以下のサンプルコードは、m_TabIndex
のデフォルト値を変更します。
class MyElementTraits : VisualElement.UxmlTraits
{
public MyElementTraits()
{
m_TabIndex.defaultValue = 0;
}
}
デフォルトでは、生成された UXML スキーマは、要素がどのような属性でも持つことができると記述します。これは、宣言された属性の値がその宣言と一致しているかどうかをチェックする XML バリデーターとは対照的です。
IUxmlAttributes
のバッグには、IUxmlFactory.AcceptsAttributeBag()
関数と IUxmlFactory.Init()
関数に渡される追加の属性が含まれています。ファクトリの実装は、これらの追加属性を使用するかどうか決定します。デフォルトの動作は、追加属性を破棄することです。これらの追加属性は、インスタンス化されたVisualElement
にアタッチされず、UQuery でクエリできません。
新しい要素を定義する際に、使用できる属性を IUxmlAttributes
バッグで明示的に宣言されたものに限定するには、UxmlTraits
コンストラクター内で UxmlTraits.canHaveAnyAttribute
プロパティを false
に設定します。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.