BindableLayoutTriggerは、AkyuiUnityのトリガーです
AkyuiUnityでプレハブを作成する時に、プレハブにスクリプトを追加するトリガーです
AkyuiUnityは設定済みとする
- このリポジトリのLayoutフォルダをUnityProjectのAssets下にコピーする
- トリガーを作成&設定する
- 追加するスクリプトを準備する
- AkyuiUnityのインポートトリガーに作成したトリガーを設定する
- AkyuiUnityで変換する
Unityのプロジェクトウインドウを右クリック>Create>Akyui>Trigger>Layoutを選択することで作成することができます
プレハブに追加するスクリプトは、完全修飾のクラス名を検索します
その為、トリガーのClassNameは完全修飾のクラス名を設定してください
※名前解決時にClassNameの{name}は、アートボード名(プレハブ名)として扱います
サンプル(Sample/*.cs)の場合は、ネームスペースがSampleなのでTestPartsのフルネームはSample.TestPartsです
ClassNameをSample.{name}とすることで、Sample.[アートボード名]のスクリプトをルートオブジェクトにスクリプトコンポーネントとして追加されます
-
ルートオブジェクトにスクリプトを追加する(後述)
-
追加するスクリプトのフィールドにLayoutPath属性を記述することで自動的にフィールドに設定される
-
指定されたパスのGameObjectにフィールド型のコンポーネントが無い場合は自動的にフィールド型のコンポーネントが追加される
-
レイアウトパスのレイヤ名に*(ワイルドカード)で一致するものを配列としてバインドできる
配列の要素は、レイヤ名昇順で格納される
// プレハブのヒエラルキー // + Hoge // - Item // - Icon0 // - Icon1 // - Icon2 // この場合、プレハブのHoge/ItemのGameObjectにコンポーネント「HogeItem」が追加される // ※HogeItemはコンポーネントとして追加するのでMonoBehaviourを継承したが必要 [SerializeField, LayoutPath("Hoge/Item")] private HogeItem Item; // コンポーネントだけではなく、GameObject自体もバインドできる [SerializeField, LayoutPath("Hoge")] private GameObject Hoge; // 同じコンポーネントは配列としてバインドできる // Icons = [Icon0, Icon1, Icon2] [SerializeField, LayoutPath("Hoge/Icon*")] private Image[] Icons;
サンプルコード参照(TestParts.cs)
サンプルコード参照(TestItem.cs)
ヒエラルキーのオブジェクトを選択して右クリックでレイアウトパスのコピーでレイアウトバインド用のコードがクリップボードにコピーできます
LayoutPath属性を持つフィールドでフィールド型が以下の条件を満たす場合は再帰的に処理される
※再帰時は、再帰オブジェクトがルートになります
- BindableLayoutAttributeを持つクラス
[BindableLayout] public class TestItem : MonoBehaviour {}
- Layoutを継承したクラス
public class TestParts : Layout {}
Layoutクラスを継承してSetupLayoutをoverrideすることで、プレハブの加工が行えます
Q. 何でパッケージじゃないの?
A. ……(時間が無くて難しいでのです?)
Q. metaファイルがないよ?
A. アセットの参照もないから付けていません
そもそもスクリプトやフォルダにmetaファイルって不要にできるんじゃ…
実際、Godotは特定のファイル以外はメタファイルないんですよね
Q. AnKuchenでよいのでは?
A. もう少し、こぢんまりした仕組みが欲しかったのと
普段の手法に近い方が学習コストが少ない方法があってもよいのかなぁと
MIT License