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;
}