![]() |
![]() |
변수를 겉보기만 바꾸고 싶다면?
스크립트의 변수들 이름을 커스텀을 하고 싶은 경우가 생깁니다. 거의 대부분은 Header 처리하면 보통은 Header 어트리뷰트는 섹터 또는 그룹 단위로 이름을 명시하는 경우가 있어서, 변수 단위로 수정하고 싶다면 새로운 어트리뷰트를 사용하면 됩니다. 실제 스크립트에서 사용되는 변수(시리얼라이즈 되어 사용되는 변수)에는 영향이 없이 겉보기만 바꾼 케이스입니다.
스크립트
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
/// <summary>
/// 인스펙터에서 변수 이름을 커스텀 문자열로 표시해주는 어트리뷰트입니다.
/// </summary>
public class DisplayNameAttribute : PropertyAttribute
{
public string Name { get; private set; }
public DisplayNameAttribute(string name)
{
this.Name = name;
}
}
#if UNITY_EDITOR
/// <summary>
/// CustomNameAttribute가 부착된 필드를 인스펙터에 그리는 에디터 스크립트입니다.
/// </summary>
[CustomPropertyDrawer(typeof(DisplayNameAttribute))]
public class DisplayNameNameDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
// 어트리뷰트 타겟을 가져옴
DisplayNameAttribute customName = (DisplayNameAttribute)attribute;
// 기존 라벨의 텍스트를 커스텀 이름으로 교체
label.text = customName.Name;
// 변수 타입에 맞는 기본 유니티 GUI를 그대로 그려줌
EditorGUI.PropertyField(position, property, label, true);
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
// 배열이나 리스트, 혹은 복잡한 구조체(클래스)일 때 높이가 깨지지 않도록 처리
return EditorGUI.GetPropertyHeight(property, label, true);
}
}
#endif
예제
public class SkillObject : MonoBehaviour
{
#region Inspector
[DisplayName("타겟팅 여부")]
[SerializeField] private bool _isTargeting = true;
[DisplayName("회전(바라보기) 활성화")]
[SerializeField] private bool _isLookAt = true;
[DisplayName("포물선 이동 사용")]
[SerializeField] private bool _isParabola = false;
[DisplayName("이징 스타일")]
[SerializeField] private eEaseType easeType = eEaseType.Linear;
[DisplayName("오브젝트 진행 시간")]
[SerializeField] private float _duration;
#endregion
}

마무리
내부적으로는 영문명 변수의 값이 변형되고, 의미 그대로 디스플레이 네임만 바꿔서 사용했습니다. 실무에서도 비프로그래머 직군에게 일일이 해당 영문명 변수의 의미를 설명하기보다는, 직관적으로 변수명을 한글로 보이도록 하여 전달하면 좀 더 빠른 업무 진행이 가능합니다. 또한 추후에 유지 보스 차원에서도 매우 유용할 수 있습니다.
'Utils' 카테고리의 다른 글
| Unity, Json 리스트 파일 저장하기 (5) | 2024.07.20 |
|---|---|
| C#, 클래스 이름을 입력해서 클래스에 접근하기 (0) | 2023.08.05 |
| C#, 폴더 및 파일 전체 복사 (0) | 2023.07.04 |
| Unity, PlayerPrefs 커스텀 클래스 (오버라이딩) (0) | 2023.06.01 |
| Unity, 에셋 FileID 가져오기 (0) | 2023.05.14 |

댓글