인스펙터에서 관할하는 데이터가 많아지면 눈이 아프다...
이럴때 인스펙터를 커스텀하는 용도로 사용할 수 있는게
바로 어트리뷰트이다.
유니티의 어트리뷰트는 코드에 추가 정보를 붙이는 메타데이터로
주로 에디터에서의 표시 방식이나 동작 방식을 제어하는데 활용된다.
시리얼라이즈필드나 헤더만 자주 사용했는데
기타 어트리뷰트도 유용하게 사용할 수 있을 것 같다.
📌 유니티 Attribute 모음
| 어트리뷰트 | 설명 | 사용예시 |
| SerializeField | private 변수도 인스펙터에 노출 | [SerializeField] private int health; |
| HideInInspector | public 변수 숨기기 | [HideInInspector] public float speed; |
| Header("텍스트") | 변수 위에 제목 표시 | [Header("플레이어 스탯")] |
| Tooltip("설명") | 마우스 오버 시 설명 표시 | [Tooltip("최대 체력입니다.")] |
| Range(min, max) | 슬라이더로 조절 | [Range(0, 100)] public int damage; |
| Space(n) | 변수 사이 공백 추가 | [Space(10)] |
| ContextMenu("이름") | 인스펙터에서 함수 실행 버튼 | [ContextMenu("스탯 초기화")] void ResetStats() {} |
| RequireComponent(typeof(X)) | 필수 컴포넌트 자동 추가 | [RequireComponent(typeof(Rigidbody))] |
| ExecuteInEditMode | 에디터 모드에서도 함수 실행 | [ExecuteInEditMode] |
| DisallowMultipleComponent | 중복 추가 방지 | [DisallowMultipleComponent] |
| AddComponentMenu("경로") | 컴포넌트 메뉴에 경로 설정 | [AddComponentMenu("Custom/Player Script")] |
| SelectionBase | 계층창에서 선택 기본 대상 설정 | [SelectionBase] |
📌 활용 예시
using UnityEngine;
[DisallowMultipleComponent] // 중복 컴포넌트 방지
[RequireComponent(typeof(Rigidbody))] // Rigidbody 자동 추가
[AddComponentMenu("Custom/Attribute Examples")] // 컴포넌트 메뉴 위치 지정
[ExecuteInEditMode] // 에디터 상태에서도 실행
[SelectionBase] // 계층창에서 이 오브젝트가 기본 선택 대상
public class AttributeExamples : MonoBehaviour
{
[Header("기본 스탯")] // 제목 표시
[SerializeField] private int health = 100; // private 변수도 인스펙터에 표시
[Range(0, 100)] public int damage = 25; // 슬라이더로 조절
[Space(10)] // 공백 추가
[Tooltip("이동 속도입니다.")] // 마우스 오버 시 설명 표시
public float moveSpeed = 5f;
[HideInInspector] public string hiddenNote = "이건 인스펙터에서 안 보임";
// ContextMenu: 인스펙터에서 버튼으로 실행 가능
[ContextMenu("스탯 초기화")]
void ResetStats()
{
health = 100;
damage = 25;
Debug.Log("스탯 초기화 완료!");
}
void Update()
{
// ExecuteInEditMode가 있으므로 에디터에서도 실행됨
if (!Application.isPlaying)
{
Debug.Log("에디터에서 실행 중 (Update)");
}
}
}
위 어트리뷰트들은 기본적으로 제공되는 어트리뷰트이고,
사용자가 원하는 기능이 있다면
커스텀 어트리뷰트(Custom Attribute)를 통해
직접 필요한 어트리뷰트를 만들어낼 수 있다.
하지만 이것은 에디터 코드를 작성해야한다.
나도 아직 안해봤다.
wooj22 - Overview
🎮 Game Programmer. wooj22 has 22 repositories available. Follow their code on GitHub.
github.com
양우정
www.youtube.com
'Game Engine > Unity' 카테고리의 다른 글
| [Unity] PlayerPrefs 클래스를 활용한 데이터 저장 (0) | 2025.04.08 |
|---|---|
| [Unity] 터널링(Tunneling)과 Collision Detection (0) | 2025.04.08 |
| [Unity] 런타임에 Resources 폴더에서 바로 리소스 로드하기 (0) | 2025.04.08 |
| [Unity] 프로젝트 안에있는 머테리얼 컨버트 한번에 하는 법 (0) | 2025.04.02 |
| [Unity] 간단한 싱글톤 사운드매니저 스크립트 (0) | 2025.01.15 |