OdinのAssetList属性は、配列やListまたは単一の要素(配列やリストではない普通の変数)に使用して、すべてのアセットから指定した条件にあてはまるものを自動で見つけ出して表示してくれます。
使い方
使い方はとっても簡単で、フィールドの前に [AssetList] という属性をつけるだけです。
[SerializeField, AssetList]
private Sprite sprite;
左側に表示されている左右の矢印でアセットを変更できます。
また下向きの矢印をクリックすると、ドロップダウンメニューからアセットを選択できます。
リストや配列でも使用できます。
using Sirenix.OdinInspector;
using UnityEngine;
public class OdinSample : MonoBehaviour
{
[SerializeField, AssetList]
private Sprite[] sprites;
}
最初はすべて選択されていない状態になっているので、必要なものはチェックボックスにチェックを入れます。
指定できる条件
AssetListはいくつか条件を指定することができます。
Path
Pathにフォルダのパスを設定すると、そのパスにあるアセットのみが対象になります。
パスは、「Assets/」からの相対パスです。( Assets/ は含まない )
//"Assets/Sprites"以下のアセットを指定
[SerializeField, AssetList(Path = "Sprites")]
private Sprite[] sprites;
LayerName
LayerNameにレイヤー名を設定すると、そのレイヤーに設定されているプレハブのみが対象になります。
//UIレイヤーのプレハブを指定
[SerializeField, AssetList(LayerNames = "UI")]
private List<GameObject> uiPrefabs;
AssetNamePrefix
AssetNamePrefixに文字列を指定すると、名前がその文字列から始まるアセットのみが対象になります。
//名前が「Enemy」から始まるプレハブを指定
[SerializeField, AssetList(AssetNamePrefix = "Enemy")]
private GameObject[] enemyPrefabs;
Tags
Tagsにタグ名を指定すると、そのタグが設定されたプレハブのみが対象になります。
//「Player」タグのプレハブを指定
//複数指定するときはカンマ区切りにする (Tags = "Tag1, Tag2" のように)
[SerializeField, AssetList(Tags = "Player")]
private GameObject playerPrefab;
CustomFilterMethod
CustomFilterMethodにメソッド名を指定すると、そのメソッドを使って対象に加えるかを判断することができます。
//Rigidbodyコンポーネントを持つプレハブのみを指定
//関数名を引数として渡す
[SerializeField, AssetList(CustomFilterMethod = "HasRigidbody")]
private GameObject[] rigidbodyPrefabs;
private bool HasRigidbody(GameObject obj)
{
return obj.GetComponent<Rigidbody>() != null;
}
AutoPopulate
これは条件指定には関係ないのですが、trueを渡すと自動的にリストにアセットが追加されます(配列でも使えます)。
要するに、チェックボックスにチェックを入れる手間がなくなります。
//アセットの検査後、自動でリストに追加
[SerializeField, AssetList(AutoPopulate = true)]
private List<Material> allMaterials;
さいごに
アセットをインスペクタから指定するという作業はよくあるので、かなり使いどころの多い機能だと思います。
Odinにはこのほかにもたくさんの属性があるので、詳しく知りたい人は公式のドキュメントを読みましょう。
コメント