mirror of
https://github.com/AnnulusGames/Alchemy.git
synced 2025-01-23 00:38:23 -05:00
48 lines
2.0 KiB
Markdown
48 lines
2.0 KiB
Markdown
|
# カスタム属性を作成する
|
||
|
|
||
|
`AlchemyAttributeDrawer`を使用することで、Alchemy上で動作する独自の属性を作成することが可能です。ここでは例として`HelpBoxAttribute`とそのDrawerの実装を示します。
|
||
|
|
||
|
まずは、フィールドやプロパティに追加する属性を定義します。
|
||
|
|
||
|
```cs
|
||
|
using System;
|
||
|
using UnityEngine.UIElements;
|
||
|
|
||
|
public sealed class HelpBoxAttribute : Attribute
|
||
|
{
|
||
|
public HelpBoxAttribute(string message, HelpBoxMessageType messageType = HelpBoxMessageType.Info)
|
||
|
{
|
||
|
Message = message;
|
||
|
MessageType = messageType;
|
||
|
}
|
||
|
|
||
|
public string Message { get; }
|
||
|
public HelpBoxMessageType MessageType { get; }
|
||
|
}
|
||
|
```
|
||
|
|
||
|
次に、定義した属性に対応するDrawerを作成します。Drawerを定義したcsファイルはEditorフォルダ以下に配置する必要があります。
|
||
|
|
||
|
```cs
|
||
|
using UnityEngine.UIElements;
|
||
|
using Alchemy.Editor;
|
||
|
|
||
|
[CustomAttributeDrawer(typeof(HelpBoxAttribute))]
|
||
|
public sealed class HelpBoxDrawer : AlchemyAttributeDrawer
|
||
|
{
|
||
|
HelpBox helpBox;
|
||
|
|
||
|
public override void OnCreateElement()
|
||
|
{
|
||
|
var att = (HelpBoxAttribute)Attribute;
|
||
|
helpBox = new HelpBox(att.Message, att.MessageType);
|
||
|
|
||
|
var parent = TargetElement.parent;
|
||
|
parent.Insert(parent.IndexOf(TargetElement), helpBox);
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
`OnCreateElement()`メソッドを実装することで、対象のメンバーに対応したVisualElementを作成した際に処理を追加することができます。描画処理を上書きする通常の`PropertyDrawer`とは異なり、こちらはVisual Elementの作成後に後処理を追加する動作であることに注意してください。この仕組みによってAlchemyは複数のDrawerを組み合わせることを可能にしています。
|
||
|
|
||
|
また、定義したDrawerには`CustomAttributeDrawer`属性を追加し、引数に定義した属性の型を追加する必要があります。この属性をもとにAlchemyは要素の描画に必要なDrawerの検索を行います。
|