본문 바로가기

유니티/커스텀 에디터

[커스텀 에디터]Fade Group를 활용하여 bool값 변경

[Fade Group]

[문제]

Editor의 확장을 통해 페이드 그룹이 켜지면 bool 값을 바꾸고 , 추가옵션을 보여주고자 하였다 .

=>bool 값의 타겟은 isPaidMusic이고 , 해당 옵션이 true일때만 productCode와 productExplanation을 

수정 할 수 있게 하려 했다 . 이를 위해 에디터 확장을 이용하였다 .

 

[Editor 확장]

다음 스크립트는 Editor 폴더에 위치한다 . 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.TerrainTools;
using UnityEditor.AnimatedValues;
using Unity.VisualScripting;
using UnityEngine.UI;
using System.Runtime.CompilerServices;
using System;
using UnityEngine.UIElements;

[CustomEditor(typeof(MusicData))]
public class MusicDataEditor :Editor
{
    AnimBool showFade;
    MusicData data;
    const string guideURL = "http://optipng.sourceforge.net/";

    private void OnEnable()
    {
        data = (MusicData)target;
        //초기값으로 isPaidMusic을 받아줘야 나갔다 와도 켜져있음
        showFade = new AnimBool(data.isPaidMusic);
        showFade.valueChanged.AddListener(Repaint);
    }
    public override void OnInspectorGUI()
    {

        base.OnInspectorGUI();
        GUILayout.Space(30);
        GUILayout.TextField("상품 옵션", EditorStyles.boldLabel);
        //해당 토글을 타겟으로 함
        showFade.target = EditorGUILayout.ToggleLeft("유료 상품 여부", showFade.target);
        //타겟이 켜졌을때 isPaidMusic을 true로 변경하고 , 그룹을 보여준다
        if (data.isPaidMusic = EditorGUILayout.BeginFadeGroup(showFade.faded))
        {
            EditorGUI.indentLevel++;
            data.productCode = EditorGUILayout.TextField("상품 코드", data.productCode);
            data.productExplanation = EditorGUILayout.IntField("상품 설명", data.productExplanation);
            EditorGUI.indentLevel--;
        }
        //그룹이 꺼져 있다면 아래의 값은 초기값으로
        else
        {
            data.productCode = "";
            data.productExplanation = -1;
        }
        EditorGUILayout.EndFadeGroup();

        GUILayout.Space(30);
        GUILayout.TextField("제작 가이드 보기", EditorStyles.boldLabel);
        //해당 버튼을 눌러 가이드를 볼 수 있게 하였음
        if (GUILayout.Button("이동"))
        {
            Application.OpenURL(guideURL);
        }
    }

}

=>꺼졌을때

=>켜졌을때

 

https://dev-nicitis.tistory.com/16