-
24년 6월 26일 TIL공부 기록 2024. 6. 26. 21:37
사진크기 맞춰주는 거 유니티에도 있음 =Aspect Ratio Fitter빅넘 = 빅인티저 클래스 사용 로그 함수 사용 하면 좋음NHN UI 관련 쓸만한 에셋이 굉장히 많음
유니티 툴 만드는 법
Editor 폴더를 만들어야 함. 오류가 나기 때문에
script 폴더 -> Editor 폴더
using문에 UnityEditor 선언 모노비헤이버 안 씀.EditorWindow 상속 받아야 함. // #1 누르면 쉬프트1누르면 바로 창 열림.//
함수를 하나 받아야 함.
이름은 상관 없음
함수 위에 [MenuItem("MyTool/MenuTest")]
에디터라 항상 메모리 위에 올려둬야 해서 static을 써야함.
그러면 좌측 상단에 에디터 탭이 하나 생김.
그걸 누르고 클릭을 하면 함수내용이 실행 됨.
겟컴포넌트처럼 겟윈도우가 가능 함.
GetWindow<CustomText>(); 사용 하면 커스텀테스트 클래스 창 나옴
거기에 함수들을 만들어서 사용 함.
EditorGUILayout.LabelField("메뉴레벨") 제목칸을 표현 하는 것을 라벨이라고 함
이 외에도 TextField도 제목칸 처럼 글씨를 표현 할 수 있음.
버튼도 사용 할 수 있다.
CUILayout.Button("버튼") 버튼은 버튼에 들어갈 글씨
버튼은 bool을 반환함.
눌리면 트루 안 눌리면 펄스
그래서 이걸 조건문으로 감싸서 함수를 사용함
if(GUILayout.Button("버튼")
{
debug.log("클릭했다");
}
이렇게 해서 창을 띄우고 버튼 클릭하면 함수 실행 된다.
public enum playerType
{
None,
case1,
case2,
case3,
}
EnumFlagField
colorField
GradientField
이것들을 사용하면 툴화면에서 직접 사용이 가능하다.
그런데 이것들은 바뀌지 않고 바로 다시 돌아가게 된다.
이것들은 똑같이 반환형식으로 반환을 하고 다시 바뀌는 것이기 때문에
변수를 하나 생성 해서 반환을 받게 해줘야 한다.
리턴값을 받지 않으면 원래 값으로 다시 돌아감.
enum a = EunmFlagField
씬을 바꾸는 툴을 만들어보자.
ChangeScene
{
EditorGUILayout.LabelField("씬 이동 버튼")
if(GUILayout.Button("마을 씬)) // 이 버튼 눌리면 트루 반환 되고 로직 실행
{
SceneManager.LoadScene(0);
}
씬매니저 로드씬은 런타임에서만 작동 됨(실행중일때만)
로드씬은 런타임을 해줘야 함.
if(Application.isPlaying) <- 실행중
{
로드신 코드
}
그래서 에디터에서 씬을 바꾸는 건 따로 있다.
예외처리를 해줘야함.
EditorSceneManager.OpenScene("Asstes/Snene/Village.unity");
GUILayout은 4가지가 있음
1. GUI
2. GUILayout
3.EditorGUILayout
4.EditorGUI
GUI = 그래픽유저인터페이스
Editor + GUI + Layout 경우의 수가 총 4가지
Editor가 붙은 얘들은 에디터에서만 작동이 됨.
GUI.Label(new Rect(10,10,50,50), "라벨")
이건 라벨만 쓴다. 그런데 랙트랑 스트링이 매개변수로 들어간다.
10과 10으로 떨어지고 50, 50크기로 생성 하겠다.
GUI를 쓰게 되면 이런 것까지 다 고려를 해서 제작을 해야 한다.
GUI.Box, Text 다 있다.
GUI에 백그라운드컬러도 바꿀 수 있다.
GUI는 공부 하는 게 말이 안 된다. 필요 할 때만 찾아서 공부 하는 게 낫다.
이런 게 불편 하면 Layout이 붙어 있는 것을 사용 하면 됨
이거는 유니티가 자동으로 지정을 해준 기능이다.
GUILayout.Label("라벨");
GUILayout.Label("라벨");
이렇게 두개를 쓰면 자동으로 정렬이 된다.
GuiLayout.TextField("입력");
GUILayout.Button("버튼");
GUILayout.Box(new GUIContent)
일렬로 정렬 말고 횡렬로 하고 싶다면
GUILayout.BehinHorizontal(){
GUI레이아웃들 코드
}
하면 에디터에서 횡렬로 정렬 해줌그리고 GUILayout.EndHorizontal();을 사용해서 닫아줘야 오류가 나지 않는다.
안 닫으면 정렬이 깨지고 오류가 난다.
GUI가 아닌 것은 에디터가 아닌 곳에도 사용을 할 수가 있다.
인게임에 버튼이 나오게도 할 수가 있다. 근데 좋은 건 아니라고 함.
GUIContent, GUIStyle
어떤 컨텐츠인지 정보 그려지는 정보
스타일은 어떤 식으로 그릴지를 나타내줌
GUIContent content = new GUIContent();
content.text = "버튼임";
content.tooltip = "설명임";
GUIStyle style = new GUIStyle();
style.normal.textColor = color.write;
style.hover.textColor = colr.red;
style active.textColor
style.fontSize = 30; 폰트사이즈도 설정 가능
GUILayout.Button(contet,style)
하면 버튼에 글씨를 변경 가능
버튼에 마수으 갖다대면 스킬 바뀌고 클릭하면 색깔 바뀌고 할 수 있음
GUILayout.BeginArea 로 영역 설정
GUILayout.BeginArea(new Rect(10,10,100,100), GUI.skin.window);
GUILayout.EndArea();
윈도우 창처럼 뷰를 만들 수 있음.
버튼들 만들어서 상호작용 하게 할 수 있다.
그래서 버튼 클릭 하면 실제로 생성이 되게 할 수 있다.
그리고 주의 할 점은 BeginArea를 쓰면 EndArea를 반드시 써야 한다.
유니티에디터는 만드는 방법이 매우 다양하다. 유니티 공식 사이트를 가면 만드는
방법들을 알려준다.
그런데 씬 이동하게 하는 게 제일 좋다.
에디터툴 버튼 클릭 하면 프리펩이나 등등 자동 캐씽 하게 할 수 있고, 인스펙터 컴포넌트에 카테고리 분류 등 색도 넣어줄 수 있고 가독성을 더 올려주게 할 수도 있다.
에디터툴 잘 작업 하면 남들이 좋아할 것 같다.
일단 여기까지 끄적이고,,,, 오늘은 잘래
GUILayout..
튜터님이 최종 시간 짧으니까 씬이동이나 이런 간단한 툴만 만들어두고 알아만 두라고 하셨다. 씬 이동하게 하는 것도 강의 다시 봐야 하긴 하지만.., ㅋㅋ
'공부 기록' 카테고리의 다른 글
24년 6월 28일 TIL (0) 2024.06.28 24년 6월 27일 TIL (0) 2024.06.27 24년 6월 25일 TIL (0) 2024.06.25 24년 6월 24일 TIL (0) 2024.06.24 24년 6월 23일 TIL (0) 2024.06.23