본문 바로가기

게임 개발 공부 정리

[Unity] 애트리뷰트 기능 정리 소스 코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//한 오브젝트 내에서 이 스크립 컴포가 중복되지 않도록 한다.
[DisallowMultipleComponent]

//이 스크립트 컴포넌트를 추가할때 리지브 바디 컴포넌트도 같이 추가된다.
[RequireComponent(typeof(Rigidbody2D))]

//인스펙터 내 컴포넌트 추가 창에서 문자열의 값으로 설정된다.
[AddComponentMenu("AR/AttributeManager")]

//문자열의 경고 메시지가 뜨면서 경고 아이콘을 띄운다
[System.Obsolete("이것은 더 이상 사용되지 않습니다.")]

//컴포넌트 우측의 물음표 버튼을 누를시 이동되는 사이트 URL
[HelpURL("https://www.naver.com")]

public class AttributeManager : MonoBehaviour
{
    #region UnityEditor.MenuItem
    //인스펙터 윈도우 창에 창 표시
    [UnityEditor.MenuItem("MyMenu/Menu")]
    //무조건 static 키워드로 함수를 선언해야만 한다,
    static void Menu()
    {
        print("메뉴 클릭");
    }
    #endregion UnityEditor.MenuItem


    #region ContextMenu
    //스크립트 컴포를 우클했을때 메뉴가 뜨게하고 함수를 실행 시키게 한다.
    [ContextMenu("Do/Doit")]
    void Doit()
    {
        print("두잇");
    }
    #endregion ContextMenu


    #region ContextMenuItem_1
    //변수에 대하여 우클릭시 함수를 실행할 수 있게 해준다.
    [ContextMenuItem("문자열 리셋" /*나타날 이름*/, "StringReset" /*실행할 함수 이름*/)]
    public string str; //ContextMenuItem는 public 변수 위에 와야만 한다.

    void StringRest() //실행할 함수에는 매개변수가 들어가면 안된다.
    {
        str = "";
    }
    #endregion ContextMenuItem_1


    #region ContextMenuItem_2

    [ContextMenuItem("0~100 Random", "RandomNumber")]
    [ContextMenuItem("Reset", "ResetNumber")]
    public int number;

    void RandomNumber()
    {
        number = Random.Range(0, 100);
    }

    void ResetNumber()
    {
        number = 0;
    }

    #endregion ContextMenuItem2


    #region ToolTip

    //인스펙터 창 내 변수에 커서를 올릴시 툴팁 표시
    [Tooltip("이것은 변수입니다.")]
    public int toolTipValue = 0;

	#endregion ToolTip


	#region ColorUsage
    //첫 인자: 알파 값을 제외하고 컬러값을 받는다.
    //둘 인자: HDR 효과를 제외한다.
	[ColorUsage(false, false)]
    public Color color;
	#endregion ColorUsage


	#region Header, Space
	//헤드 글자를 표시해준다.
	//한줄씩 끊지 않을시 각각 헤더가 생겨버리고, 프리베잇 변수는 헤더 위에 써야한다.
	[Header("HP")]
	public int max_hp;
    public int cur_hp;

    //표시되는 간격을 조절해준다.
    [Space(20)]

    int a;
	[Header("MP")]
	public int max_mp;
    public int cur_mp;
    #endregion


    #region Multiline, TextArea
    //3줄이 생긴다.
    [Multiline(3)]
    public string str2;

    //최소 3줄 최대 5줄
    [TextArea(3, 5)]
    public string str3;
    #endregion


    #region SeriallizeField
    //public처럼 인스펙터창에서 보이게 되고 편집이 가능하다
    [SerializeField]
    private int pri_a;
    #endregion

    #region System.NonSerialized
    //직렬화를 해제시켜 인스펙터 창 내에서 보이지 않도록 한다.
    [System.NonSerialized]
    public int Nonsr;
    #endregion

    #region 클래스 시리얼 라이즈
    public Serial serial;
    #endregion
}

//클래스 변수를 직렬화 시키기 위해 선언을 하면 인펙 창에서 보이게 된다.
[System.Serializable]
public class Serial
{
    public int a, b, c, d;
}