[UNITY C#] Unity Attribute 정리

2022. 4. 9. 18:00·UNITY/Script
반응형


https://docs.unity3d.com/kr/2020.3/Manual/Attributes.html

 

속성 - Unity 매뉴얼

Attributes 는 스크립트에서 클래스, 프로퍼티 또는 함수 위에 명시하여 특별한 동작을 나타낼 수 있는 마커입니다. 예를 들어, 프로퍼티 선언 위에 HideInInspector 속성을 추가하여 인스펙터가 공용

docs.unity3d.com

2020.3.32f1 버전 기준


* 대부분의 필드 데이터에 대한 Unity Attribute는 속성을 추가할 필드 데이터에 public이나 [SerializableField] 속성을 추가하여 Inspector창에 표시되도록 해야 합니다.


AddComponentMenu

[AddComponentMenu("{메뉴 이름}")]
// 클래스

AddComponentMenu는 [Inspector 창 > Add Component] 대신 [Component 메뉴]에서 스크립트를 배치할 수 있는 속성입니다.
이를 통해 [Component 메뉴]를 더 직관적으로 구성할 수 있으며, 스크립트를 추가할 때 작업 속도가 향상됩니다.

using UnityEngine;

[AddComponentMenu("Test/TestScript")]
public class TestScript : MonoBehaviour
{
	//...
}

위와 같이 스크립트를 작성하면

오브젝트 선택 후 [Component 메뉴]를 통해 스크립트를 추가할 수 있습니다.


ColorUsage

[ColorUsage({Alpha 사용 여부}, {HDR 사용 여부}, ...)]
// Color 데이터

ColorUsage는 색 지정에 대한 색상 필드를 구성하는 데 사용되는 속성입니다.

using UnityEngine;

public class TestScript : MonoBehaviour
{
	public Color testColor0;
	[ColorUsage(false)] public Color testColor1;
}

위와 같이 스크립트를 작성하면

ColorUsage(false) 속성이 있는 변수는 Color의 Alpha 값을 변경할 수 없는 것을 확인할 수 있습니다.


ContextMenu

[ContextMenu("{명령 이름}")]
// 실행할 함수

ContextMenu는 [Inspector 창]의 해당 스크립트 Component 메뉴에 명령을 추가하는 속성입니다.
이 기능은 스크립트에서 데이터를 자동으로 설정할 때 유용합니다. 함수는 정적이지 않아야 합니다.

using UnityEngine;

public class TestScript : MonoBehaviour
{
	public string testString;
    
	[ContextMenu("Test")]
	void Test() {
		testString = "TEST TEXT";
	}
}

다음과 같이 스크립트를 작성하면

[Script Component > 우측 상단 메뉴]에서 해당 명령을 실행하여

다음과 같이 적용되는 것을 확인할 수 있습니다.


ContextMenuItem

[ContextMenuItem("{명령 이름}", "{실행할 함수 이름}")]
// 데이터
// 실행할 함수

ContextMenuItem은 필드 데이터에 함수를 호출하는 [컨텍스트 메뉴]를 추가하는 속성입니다.
이 기능 또한 스크립트에서 데이터를 자동으로 설정할 때 유용합니다.

using UnityEngine;

public class TestScript : MonoBehaviour
{
	[ContextMenuItem("Test", "TestFunction")]
	public string testString;
    
	void TestFunction() {
		testString = "TEST TEXT";
	}
}

다음과 같이 스크립트를 작성하면

해당 필드 데이터의 [오른쪽 클릭]에서 해당 명령을 실행하여

다음과 같이 적용되는 것을 확인할 수 있습니다.


CreateAssetMenu

[CreateAssetMenu(fileName = "{생성될 파일 이름 기본값}", menuName = "{메뉴 이름}", order = {순서})]
// 클래스

CreateAssetMenu는 ScriptableObject 객체를 [Asset > Create] 하위 메뉴에 표시하여 객체를 쉽게 만들고 프로젝트에 Asset 파일로 저장할 수 있도록 하는 속성입니다.

using UnityEngine;

[CreateAssetMenu(fileName = "TestScript0", menuName = "TestMenu/TestScript0", order = 1)]
public class TestScript0 : ScriptableObject
{
    public int testID;
    public string testString;
}

[CreateAssetMenu(fileName = "TestScript1", menuName = "TestMenu/TestScript1", order = 0)]
public class TestScript1 : ScriptableObject 
{
	//...
}

다음과 같이 스크립트를 작성하여

[Asset 창 > Create] 하위 메뉴에서 해당 ScriptableObject를 생성할 수 있습니다.


CustomGridBrushAttribute

[CustomGridBrushAttribute]
// 클래스

CustomGridBrushAttribute는 사용하여 클래스를 그리드 브러시로 정의하는 속성으로 [Pallette 창]에서 사용할 수 있습니다.


Delayed

[Delayed]
// 데이터

Delayed는 [Inspector 창]에서 필드 데이터 편집을 지연시키는 데 사용되는 속성입니다.

이 속성을 사용하면 사용자가 Enter 키를 누르거나 포커스를 필드에서 멀리 이동하기 전까지 데이터는 새 값을 반환하지 않습니다.

using UnityEngine;

public class TestScript : MonoBehaviour
{
	[Delayed] public string delayedTestString = "123";
	public string testString = "123";

	void Update() {
		Debug.Log("DelayedString : " + delayedTestString + " / NondelayedString : " + testString);
	}
}

다음과 같이 스크립트를 작성하여 실행했을 때

Delayed 속성이 없는 데이터는 값을 변경하자마자 바로 출력 결과가 바뀌지만

Delayed 속성이 있는 데이터는 값 변경 후 Enter를 입력해야 출력 결과가 바뀌는 것을 확인할 수 있습니다.


DisallowMultipleComponent

[DisallowMultipleComponent]
// 클래스

DisallowMultipleComponent는 MonoBehavior를 상속하는 동일한 클래스 또는 자식 클래스 스크립트를 하나의 GameObject에 두 개 이상 추가되지 않도록 하는 속성입니다.

using UnityEngine;

[DisallowMultipleComponent]
public class TestScript : MonoBehaviour
{
    // ...
}

다음과 같이 스크립트를 작성하여 두 개 이상의 같은 스크립트를 추가할 때

다음과 같은 오류가 발생합니다.


ExecuteAlways / ExecuteInEditMode

[ExecuteAlways]
// MonoBehavior를 상속하는 클래스
[ExecuteInEditMode]
// MonoBehavior를 상속하는 클래스

ExecuteAlways / ExecuteInEditMode는 스크립트가 Play 모드와 Edit 모드에서 항상 실행되도록 하는 속성입니다.
Play 모드에서 실행되는 모습과 Edit 모드에서 실행되는 모습이 크게 다를 수 있습니다.


Header

[Header("{해더 이름}")]
// 데이터 ...

Header는 필드 데이터의 제목을 정하는 속성입니다.

using UnityEngine;

public class TestScript : MonoBehaviour
{
	[Header("Test")] 
	public int testID;
	public string testString;
}

다음과 같이 스크립트를 작성하여 실행했을 때

다음과 같이 제목이 표시된 것을 알 수 있습니다.


HideInInspector

[HideInInspector]
// public 데이터

HideInInspector는 해당 데이터가 [Inspector 창]에 표시되지 않도록 하는 속성입니다.

using UnityEngine;

public class TestScript : MonoBehaviour
{
	[HideInInspector] 
	public string testString;
}

다음과 같이 스크립트를 작성하여 실행했을때

해당 데이터가 public임에도 [Inspector 창]의 해당 스크립트 Component에 표시되지 않습니다.


Multiline

[Multiline({줄 수})]
// string 데이터

Multiline은 다중 줄 텍스트 필드를 통해 문자열을 편집할 수 있는 속성입니다.

using UnityEngine;

public class TestScript : MonoBehaviour
{
	[Multiline(3)] 
	public string testString;
}

다음과 같이 스크립트를 작성하면

해당 데이터를 여러 줄로 편집할 수 있습니다.


NonReorderable

[NonReorderable]
// 배열 데이터

NonReorderable은 [Inspector 창]에서 배열 데이터의 순서를 변경할 수 없게 하는 속성입니다.

using UnityEngine;

public class TestScript : MonoBehaviour
{
	public int[] testArray;
	[NonReorderable] public int[] nonRecorderableTestArray;
}

다음과 같이 스크립트를 작성하면

일반 배열 데이터는 순서를 변경할 수 있지만 NonRecorderable 배열 데이터는 순서를 변경할 수 없는 것을 확인할 수 있습니다.


Range

[Range({최소값}, {최대값})]
// 정수 또는 실수 데이터

Range는 [Inspector 창]에서 최대, 최소 값이 정해진 슬라이더를 이용해 필드 데이터를 지정할 수 있는 속성입니다.

using UnityEngine;

public class TestScript : MonoBehaviour
{
	[Range(-10.0f, 10.0f)]
	public float testRange;
}

다음과 같이 스크립트를 작성하면

다음과 같이 슬라이더를 이용해 값을 지정할 수 있습니다.


RequireComponent

[RequireComponent(typeof({컴포넌트 타입}))]
// 클래스

RequireComponent는 해당 스크립트를 추가할 때 지정한 Component를 자동으로 추가하는 속성입니다.

using UnityEngine;

[RequireComponent(typeof(BoxCollider2D))]
public class TestScript : MonoBehaviour
{
	// ...
}

다음과 같이 스크립트를 작성하고 해당 스크립트를 추가할때

다음과 같이 지정한 컴포넌트가 자동으로 추가되는 것을 확인할 수 있습니다.


SerializeField

[SerializeField]
// private 데이터

SerializeField는 필드 데이터를 직렬화하는 속성입니다.

(private 데이터를 직렬화하면 [Inspector 창]에서 직접 편집할 수 있습니다.)

using UnityEngine;

public class TestScript : MonoBehaviour
{
	[SerializeField] string testString;
}

다음과 같이 스크립트를 작성하면

해당 데이터가 private이지만 [Inspector 창]에서 편집할 수 있습니다.


Space

[Space]
// 데이터 ...

Space는 [Inspector 창]에서 필드 데이터 간에 간격을 띄우는 속성입니다.

using UnityEngine;

public class TestScript : MonoBehaviour
{
	public int textID0;
	public int textID1;
	public int textID2;
	[Space] 
	public string testString0;
	public string testString1;
	public string testString2;
}

다음과 같이 스크립트를 작성하면

필드 데이터 사이에 간격이 생긴 것을 확인할 수 있습니다.


TextArea

[TextArea({최소 줄 수}, {최대 줄 수})]
// string 데이터

TextArea는 높이를 자유롭게 조정하고 스크롤할 수 있는 텍스트 필드를 사용하여 문자열을 편집할 수 있는 속성입니다.

using UnityEngine;

public class TestScript : MonoBehaviour
{
	[TextArea(3, 5)]
	public string testString;
}

다음과 같이 스크립트를 작성하면

해당 데이터를 여러 줄로 편집할 수 있습니다.

반응형
'UNITY/Script' 카테고리의 다른 글
  • [UNITY C#] 팝업 상자(Pop-up Box) UI 구현
  • [UNITY C#] 원근감있는 배경 : 패럴랙스 스크롤링(Parallax Scrolling) 구현
  • [UNITY C#] SceneManagement 씬 전환 구현
  • [UNITY C#] 게임 데이터 직렬화(Serialize) 저장 및 로드 구현
HYEOKJUN
HYEOKJUN
프로그래밍 관련 수업이나 웹 사이트에서 직접 얻은 정보를 공유하는 블로그입니다. (일부 잘못된 정보가 포함될 수 있습니다)
  • HYEOKJUN
    HYEOKJUN
    HYEOKJUN
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • UNITY (18)
        • Tool (9)
        • Script (9)
      • C | C++ (20)
        • Basic (11)
        • STL (8)
        • ETC (1)
      • C# (1)
        • Basic (0)
        • ETC (1)
      • Python (8)
        • Basic (7)
        • Library (1)
        • ETC (0)
      • WEB (2)
        • Basic (2)
      • Skill (0)
        • 자료구조 (0)
      • Workspace (0)
      • ETC (4)
  • 블로그 메뉴

    • 인기 글

    • 태그

      Localization
      while
      Unity
      식별자
      red-black tree
      std
      Package
      조건문
      C#
      포인터
      자료형
      반복문
      Python
      queue
      stack
      C
      vector
      변수
      C++
      컨테이너
    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    HYEOKJUN
    [UNITY C#] Unity Attribute 정리
    상단으로

    티스토리툴바