ストア アドレス: Odin
Odin は、次のように、さまざまなデータをシリアル化し、さまざまなエディター インターフェイスを便利に作成できる、エディターを拡張するためのプラグインです。
プラグインをインポートした後、Tool–Odin Inspector–Getting Started に示すように、Odin が提供する概要インターフェイスを表示できます。
[Open Attributes Overview] をクリックすると、属性とフィールド編集に関連する例が表示され、Inspector インターフェイスのコンテンツを簡単に編集できます。Leran More をクリックすると、いくつかのウィンドウ関連の例が表示されます。これは、いくつかのポップアップ インターフェイスをカスタマイズするのに便利です。
詳細な調査のために、いくつかのシーンのサンプルが概要の下に提供されています。
最初に、フィールド関連の例を表示します。上の図に示すように、左側はカテゴリ、右上はインスペクター インターフェイスに描画されたコンテンツ、右下は対応するコードであり、コピーできます。直接使用されます。
Odin は 100 を超える属性 (属性) を提供します。フィールドに属性を追加するだけで、上記のスタイルを表示できます。属性は、フィールド、メソッド、クラスなどの要素をマークするために使用されます。非常に多くの機能を覚えるのは難しく、通常は適切なスタイルを見つける必要があります。
//AssetsOnly表示只能拖拽Assets目录下的资源,场景中的资源是无法拖动
[AssetsOnly]
public GameObject SomePrefab;
//SceneObjectsOnly相反,只能拖拽Scene场景中的资源
[SceneObjectsOnly]
public GameObject SomeSceneObject;
以下は、より一般的に使用される機能の一部をまとめたものです。
1.値の範囲、スライダー、進行状況バーを制限する
[Range(0, 100)]
public int Field = 2;
[MinValue(0)]
public int IntMinValue0;
[MaxValue(0)]
public int IntMaxValue0;
[ProgressBar(0, 100)]
public float ProgressBar = 50;
2.値が変化したときに特定のメソッドをトリガーする
[OnValueChanged("OnValueChanged")]
public int DelayedField;
//ShowInInspector用于将属性显示到界面上
[ShowInInspector]
[OnValueChanged("OnValueChanged")]
public string DelayedProperty {
get; set; }
private void OnValueChanged()
{
Debug.Log("Value changed!");
}
3. 色
//字段添加颜色
[GUIColor(0.3f, 0.8f, 0.8f, 1f)]
public int ColoredInt1;
//调色板
[ColorPalette("Fall")]
public Color Color1;
//按钮添加颜色
[GUIColor(0, 1, 0)]
[Button("ButtonName", ButtonSizes.Small)]
private void ButtonMethod()
{
}
4. プロンプト情報
//HideLabel用于隐藏字段名
[Title("Vector3标题")]
[HideLabel]
public Vector3 WideVector1;
//Space用于添加一行空隙
[Space]
[InfoBox("提示1")]
public int Int1;
//MyGameObject为空时才会提示
[Required]
public GameObject MyGameObject;
5. 入力確認
[ValidateInput("HasMeshRenderer")]
public GameObject DynamicMessage;
private bool HasMeshRenderer(GameObject gameObject, ref string errorMessage)
{
if (gameObject == null) return true;
if (gameObject.GetComponentInChildren<MeshRenderer>() == null)
{
errorMessage = "\"" + gameObject.name + "\" 必须包含MeshRenderer组件";
return false;
}
return true;
}
[ValidateInput("CheckSpace", "字符串不能有空格", InfoMessageType.Warning)]
public string Message = "Dynamic";
private bool CheckSpace(string value)
{
return value.IndexOf(' ') < 0;
}
6.ドロップダウンリスト
[ValueDropdown("TextureSizes")]
public int SomeSize1;
private static int[] TextureSizes = new int[] {
256, 512, 1024 };
[ValueDropdown("FriendlyTextureSizes")]
public int SomeSize2;
private static IEnumerable FriendlyTextureSizes = new ValueDropdownList<int>()
{
{
"Small", 256 },
{
"Medium", 512 },
{
"Large", 1024 },
};
[ValueDropdown("TreeViewOfInts", ExpandAllMenuItems = true)]
public List<int> IntTreview = new List<int>() {
1, 2, 7 };
private IEnumerable TreeViewOfInts = new ValueDropdownList<int>()
{
{
"Node 1/Node 1.1", 1 },
{
"Node 1/Node 1.2", 2 },
{
"Node 2/Node 2.1", 3 },
{
"Node 3/Node 3.1", 4 },
{
"Node 3/Node 3.2", 5 },
{
"Node 1/Node 3.1/Node 3.1.1", 6 },
{
"Node 1/Node 3.1/Node 3.1.2", 7 },
};
7. グループ化
//水平分组
[HorizontalGroup]
public float num;
[HorizontalGroup, Button(ButtonStyle.Box)]
private void Full(float a, float b, out float c)
{
c = a + b;
}
//Box分组
[BoxGroup("Titles")]
public int A;
[BoxGroup("Titles")]
public int B;
//按钮分组
[ButtonGroup]
private void C() {
}
[ButtonGroup]
private void D() {
}
8. コレクション
1. シリアライズされた辞書は SerializedMonoBehaviour を継承する必要がありますが、List は継承しないことに注意してください。
public class Odin学习 : SerializedMonoBehaviour
{
public Dictionary<int, Material> IntMaterialLookup;
[OnInspectorInit]
private void CreateData()
{
IntMaterialLookup = new Dictionary<int, Material>()
{
{
1, ExampleHelper.GetMaterial() },
{
7, ExampleHelper.GetMaterial() },
};
}
}
2. 機能を追加せずにリストを使用することもできます. 左側のスライダーをドラッグして要素の順序を調整します. TableList はリストをテーブル形式に変換できます. プラス記号の左側にあるボタンをクリックすると元のリスト形式に切り替わります.
public List<float> FloatList;
[Range(0, 1)]
public float[] FloatRangeArray;
[TableList(ShowIndexLabels = true, AlwaysExpanded = true)]
public List<SomeCustomClass> TableListWithIndexLabels = new List<SomeCustomClass>()
{
new SomeCustomClass(),
new SomeCustomClass(),
};
[Serializable]
public class SomeCustomClass
{
[TableColumnWidth(57)]
[PreviewField(Alignment = ObjectFieldAlignment.Center)]
public Texture Icon;
[TextArea]
public string A, B;
}
9. 条件
public bool IsToggled;
[DisableIf("IsToggled")]
public int DisableIfToggled;
[EnableIf("IsToggled")]
public int EnableIfToggled;
[DisableInEditorMode]
public GameObject A;
[DisableInPlayMode]
public Material B;
[HideIf("IsToggled")]
public Vector3 HiddenWhenToggled;
[ShowIf("IsToggled")]
public Vector2 VisibleWhenToggled;
10.資源一覧
//显示该路径下的材质,路径前面的Assets不用写
[AssetList(Path = "Materials/")]
public List<Material> AssetList;
[AssetList(AssetNamePrefix = "Line")]
public List<Material> MaterialsStartingWithLine;
11.窓
public class Odin窗口 : OdinEditorWindow
{
[MenuItem("Tools/简单窗口")]
private static void OpenWindow()
{
var window = GetWindow<Odin窗口>();
window.position = GUIHelper.GetEditorWindowRect().AlignCenter(500, 500);
}
[EnumToggleButtons]
public ViewTool SomeField;
}