[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);
}
}
}
=>꺼졌을때
=>켜졌을때
'유니티 > 커스텀 에디터' 카테고리의 다른 글
[커스텀 에디터]버튼을 눌러 해당 URL로 이동 (0) | 2023.04.06 |
---|---|
[ 커스텀 에디터 ] 인스펙터 윈도우 (0) | 2023.03.29 |