コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】【Odin - Inspector and Serializer】トグル付きのグループに分ける「ToggleGroup」「Toggle」属性

目次

「ToggleGroup」「Toggle」属性

「ToggleGroup」「Toggle」属性を使用すると
変数をトグル付きのグループに分けることができます

f:id:baba_s:20170719122824p:plain

using Sirenix.OdinInspector;
using System;
using UnityEngine;

public class Example : MonoBehaviour
{
    [ToggleGroup( "groupA" )] public bool groupA;
    [ToggleGroup( "groupA" )] public int a2;
    [ToggleGroup( "groupA" )] public int a3;
    
    [ToggleGroup( "groupB", "title" )] public bool groupB;
    [ToggleGroup( "groupB" )] public string title;
    [ToggleGroup( "groupB" )] public int b1;
    [ToggleGroup( "groupB" )] public int b2;
    [ToggleGroup( "groupB" )] public int b3;
    
    [Toggle( "groupC" )] public Hoge hoge;

    public Fuga[] fugas;
}

[Serializable]
public class Hoge
{
    [HideInInspector] public bool groupC;
    public int a;
    public int b;
}

[Serializable]
public class Fuga
{
    [ToggleGroup( "groupD", "$Title" )][HideInInspector] public bool groupD;
    [ToggleGroup( "groupD" )] public int a;
    [ToggleGroup( "groupD" )] public int b;
    [ToggleGroup( "groupD" )] public string title;

    public string Title { get { return title; } }
}

使い方

下記の様に記述するだけで使用できます
ToggleGroup 属性の引数に渡す文字列は
bool 型の変数名と同名にする必要があります

[ToggleGroup( "groupA" )] public bool groupA;
[ToggleGroup( "groupA" )] public int a2;
[ToggleGroup( "groupA" )] public int a3;

ToggleGroup 属性の第 2 引数に
string 型の変数名を指定することで
動的に見出しの文言を変更できるようになります

[ToggleGroup( "groupB", "title" )] public bool groupB;
[ToggleGroup( "groupB" )] public string title;
[ToggleGroup( "groupB" )] public int b1;
[ToggleGroup( "groupB" )] public int b2;
[ToggleGroup( "groupB" )] public int b3;

Toggle 属性を使用することで
クラスや構造体のインスタンスもグループ化できます
Toggle 属性の引数に渡す文字列は
クラスや構造体の bool 型の変数名と同名にする必要があります

[Toggle( "groupC" )] public Hoge hoge;

...

[Serializable]
public class Hoge
{
    [HideInInspector] public bool groupC;
    public int a;
    public int b;
}

ToggleGroup 属性を使用しているクラスや構造体を配列にすることもできます

public Fuga[] fugas;

...

[Serializable]
public class Fuga
{
    [ToggleGroup( "groupD", "$Title" )][HideInInspector] public bool groupD;
    [ToggleGroup( "groupD" )] public int a;
    [ToggleGroup( "groupD" )] public int b;
    [ToggleGroup( "groupD" )] public string title;

    public string Title { get { return title; } }
}

参考サイト様

Odin Inspector and Serializer | Improve your workflow in Unity
Odin Inspector and Serializer | Improve your workflow in Unity