はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】bool型をエディタ拡張でインスペクター上でまとめてみた

はじめに

絶賛エディタ拡張の勉強をしていて、簡単なものを作ってみたので自分の備忘録として残しておきたいと思います。
f:id:hanaaaaaachiru:20181008181340g:plain

コード

SampleDateとSampleDateEditorという2つのスクリプトを作って、SampleDateEditorはEditorフォルダに入れました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SampleDate : MonoBehaviour {
    [SerializeField] private bool toggleGroup = false;
    [SerializeField] private bool flag_0 = false;
    [SerializeField] private bool flag_1 = false;
    [SerializeField] private bool flag_2 = false;

    public bool TouggleGroup { get { return toggleGroup; } set { toggleGroup = value; } }
    public bool Flag_0 { get { return flag_0; } set { flag_0 = value; } }
    public bool Flag_1 { get { return flag_1; } set { flag_1 = value; } }
    public bool Flag_2 { get { return flag_2; } set { flag_2 = value; } }

}
using UnityEngine;
using System.Collections;
using UnityEditor;

[CustomEditor(typeof(SampleDate))]
public class SampleDateEditor : Editor {
 
    public override void OnInspectorGUI()
    {
        // シリアライズオブジェクトの更新
        serializedObject.Update();

        // targetでデータを取得しキャスト
        SampleDate sampleData = target as SampleDate;

        EditorGUILayout.BeginHorizontal();
        sampleData.TouggleGroup = EditorGUILayout.BeginToggleGroup("Toggle Group", sampleData.TouggleGroup);
        sampleData.Flag_0 = EditorGUILayout.Toggle("Flag 0", sampleData.Flag_0);
        sampleData.Flag_1 = EditorGUILayout.Toggle("Flag 1", sampleData.Flag_1);
        sampleData.Flag_2 = EditorGUILayout.Toggle("Flag 2", sampleData.Flag_2);
        EditorGUILayout.EndToggleGroup();
        EditorGUILayout.EndHorizontal();


        if (!sampleData.Flag_0 && !sampleData.Flag_1 && !sampleData.Flag_2)
        {
            if (GUILayout.Button("すべてのフラグを真にする"))
            {
                sampleData.Flag_0 = true;
                sampleData.Flag_1 = true;
                sampleData.Flag_2 = true;
            }
        }
        else
        {
            if (GUILayout.Button("すべてのフラグを偽にする"))
            {
                sampleData.Flag_0 = false;
                sampleData.Flag_1 = false;
                sampleData.Flag_2 = false;
            }
        }

        // シリアライズオブジェクトのプロパティの変更を更新
        serializedObject.ApplyModifiedProperties();

    }

}

さいごに

もっと勉強して自分なりのエディタにカスタマイズがいずれ出来たらなと思います!