Game Engine/Unity

[Unity] 유용하게 활용되는 유니티 어트리뷰트(Attribute) 모음

양양줘 2025. 4. 8. 11:03

인스펙터에서 관할하는 데이터가 많아지면 눈이 아프다...

이럴때 인스펙터를 커스텀하는 용도로 사용할 수 있는게

바로 어트리뷰트이다.

 

유니티의 어트리뷰트는 코드에 추가 정보를 붙이는 메타데이터로
주로 에디터에서의 표시 방식이나 동작 방식을 제어하는데 활용된다.

 

시리얼라이즈필드나 헤더만 자주 사용했는데

기타 어트리뷰트도 유용하게 사용할 수 있을 것 같다.

 

📌 유니티 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