<캐릭터 선택창 만들기>
(https://youtu.be/vJACbWBDa90?si=ZLX5cD1QSDcu4t7a 골드메탈 영상 참고.)
canvas -> 게임시작창 하위에 우클릭 - Create Empty (빈 오브젝트 생성)
(영상에서는 'Character Group'으로 이름 변경해줌)
Rect Transform에서 Pos Y: -40으로 설정, Width랑 Height은 1만 올린다(100->101)
->Add Component - Grid Layout Group(자식 오브젝트를 그리드 형태로 정렬하는 컴포넌트)
-> Cell Size X:50 Y:50, Spacing(여백) X:1 Y:1
-> 시작 오브젝트를 자식 오브젝트로 넣는다. (시작 버튼을 'Character Group 하위로 옮김)
이 버튼의 이름을 Charcter0 으로 지정.
(영상 보면 큰 네모 선택 상자가 왼쪽에 만들어짐.)
이미지 sprite를 해당 버튼 하위에 넣어주고, set native size로 원래 크기대로 조정. 적당히 위치 조절해서 배치하고, 이미지 이름도 적당히 바꿔준다. (ex. 'Icon')
Text도 알아서 잘 바꾸기.(텍스트 앵커는 대충 Shift+Alt 했을 때 중앙 9개 말고 오른쪽에 있는거(중앙 6번 오른쪽에 있는거) 선택. 이 부분은 그냥 캡쳐 해서 필기에 담아야겠다. Left랑 Right는 2 , Pos Y: -8 정도로 설정. 이건 개인 취향에 맞게 설정하자)
Text 작은거 하나 더 추가한 뒤 설명.. 넣기
컨트롤 D로 복사 후 이름 바꿔주고 Pos Y: -16 폰트 크기 확 줄인다.
(내 프로젝트에서는 대충 이런 식으로 하면 될 듯
ex) 벤치프레스 가슴+2 삼두+1
이런 식으로? 아주 간단한 설명만. 자세한 설명은 뒤에.
완성된 버튼 컨트롤 D로 하나 더 만들어주고 옆에 나오도록.
(자 근데 이거는 이제.. 앞에 캐릭터 설정에는 이렇게 나오고 나중에 랜덤 생성할 때는 json이나 csv나... 카드 정보만 담긴 텍스트 파일을 만들어줘야겠지?)
게임 매니저에다 정보를 줘야하는데 내가 강좌를 건너 뛴거라 이 부분 좀 듣고 와야겠다. 플레이어한테 게임 매니저를.. 주는데 이거 스읍 일단 그냥 캐릭터창 구현부터 먼저 하고 이후 넘어가는 건 나중에.
<버튼 Transition 프로퍼티>
(https://youtu.be/l0QwB7xafl4?si=EjwYVwDAioFFi5fi 베르 영상 참고.)
- Color Tint: 버튼 클릭 시 색 변화
- Sprite Swap: 버튼 클릭 시 이미지 변화
버튼 기본 이미지는 Source Image에 이미지 파일을 드래그&드롭해서 바꿀 수 있다. Pressed Sprite에 마찬가지로 이미지 파일을 드래그&드롭해서 넣으면 자신이 미리 만들어놓은 버튼 이미지로 이게.. 만들 수 있다.
(이걸 사용해서 메인화면 버튼을 만드는 게 좋을 것 같다. 색깔 바꾸는 코드 찾는 거 귀찮기도 하고 글자에 테두리가 좀 있으면 좋을 것 같아서.. 일단 생각만 해둠. 나중에 여유 있으면 바꾸기)
- Animation: Auto Generate Animation 버튼을 누르면, 버튼에 대한 애니메이터 컨트롤러를 생성하는 대화상자가 뜬다.(뭔말이지) 생성하면 아래에 Animator 컴포넌트가 추가된 것을 확인할 수 있다. 버튼을 선택한 상태로 Animate 뷰를 열어보면
버튼의 각 상호작용 상태에 대한 state들과 파라미터들이 추가되어 있고 트랜지션의 조건들이 세팅되어 있다.(진짜 뭔말이지) Ctrl+6 누르면 Animation 뷰가 열린다. 여기서 설정 잘 해주면 됨 (영상 보니까 빈 공간을 클릭할 때 나오는 이펙터라던가.. 버튼 누르려는 거 아이콘이 반짝거린다던가 암튼 좀 게임의 퀄리티를 높여줄 것 같음. 나중에 유튜브로 이 부분 보고 구현해야겠다. 지금 단계는 아님)
- Navigation: 키보드나 패드로 UI를 선택할 때 어떤 순서로 포커스가 넘어갈 것인지를 결정하는 옵션(이건 또 무슨 말일까)
스크립트에서 동적으로 버튼 바로 등록해주는 방법이 있다고 함.
ex)
먼저 스크립트에서 using UnityEngine UI; 추가로 선언해줘야한다고 함.
Button button;
public void OnClickButton(){
Debug.Log("버튼 눌림");
}
void Start(){
button = GetComponent<Button>();
button.onClick.AddListner(OnClickButton);
}
근데 이 사람이 버튼 이름을 Button으로 해놔서 뭐가 버튼 이름이고 뭐가 바꾸면 안되는 원래 함수인지를 모르겠음..;;
나중에 쓸 일 있으면.. 그 때 다시 검색을 해보던지 해봅시다. 급한거 아니라서
암튼 저렇게 하면 on Click() 부분엔 안 뜨는데 처리되는거임. (근데 이러면 오히려 헷갈리지 않으려나? 모르겄다)
<버튼의 터치 영역 넓히기>
버튼이 작을 경우 터치하기 불편, 근데 디자인적으로 작게 만들 수밖에 없다면..
버튼의 자식 컴포넌트로 이미지 추가 후 이미지로 영역 넓게 잡아준 뒤 투명하게 만들면 끝.
(버튼의 자식 컴포넌트도 버튼이기 때문에 되는군~)
<버튼의 위치 정렬>
댓글 보고 알았는데 Layout Group 기능을 사용하면 된다고 한다. 오
<화면 입력>
GetTouch로 구현가능하다고 함. 나중에 화면의 빈 곳을 터치하면 이펙트가 뜨게 설정하고 싶은데 이걸로 되려나?
<코루틴>
업데이트 함수는 멈추지 않고 계속해서 동작하는 함수이기 때문에, 일시적으로 동작하는 서브동작을 구현하기엔 까다로움. 까다로운 것뿐만이 아니라 메모리 낭비임. (나중에 게임 유지보수하기 어려워진다.)
코루틴: 서브 동작을 구현하거나 어떤 다른 작업이 처리되는 것을 기다리는 기능을 구현하는데 쓰임.
(이게 내가 정확히 이해한 건지는 모르겠다만, 보통 이제 업데이트는 플레이어가 행동 -> 실행
이건데
시간의 흐름에 의해 실행되는 함수가 필요할 때 사용하는 것 같음. 아직은 필요성을 못 느끼겠는데 나중에 필요할지도..?)
예시 : 스페이스를 누르면 캐릭터가 공격했다고 가정하고 딜레이를 주는 것
(스샷 참조해서 그대로 입력하기)
첫 스샷: Update 함수로 구현
두번째 스샷: Korutin(Corutin?)으로 구현
코루틴으로 구현하는 방법은 함수의 반환형을 IEnumerator로 만들어주면 된다.
함수 이름에 빨간줄 뜨는데 이건 yield return; 을 함수 내에 적어주면 해결됨.
(코루틴에서 동작하는 제어권을 유니티에 다시 돌려준다는 뜻)
코루틴이 제어권을 얼마나 양보할 지 정하는 반환타입
yield return null; // 한 프레임 동안만 기다림
yield return new WaitForSeconds(2f); // 생성자의 매개변수로 넣어준 시간만큼 기다림
Time.timeScale = 0.5f // 시간의 길이를 조절하는 것. 0.5f로 설정하면 게임 속 시간의 흐름이 절반으로 느려진다.
yield return new WaitForSecondsRealtime(1f) // 위 함수의 영향을 받지 않고 실제시간에 따라 1초만큼 기다림. WaitForSeconds(1f)이면 위 함수의 영향을 받아서 2초를 기다림.
yield return new WaitForFixedUpdate(); // FixedUpdate 과정이 끝난 후에 제어권을 돌려받는다.
yield return new WaitforEndOfFrame(); // 한 프레임이 지나가는 과정이 다 끝난 뒤 가장 마지막에 제어권을 돌려받는다.
코루틴 함수는 일반함수처럼 호출하면 안됨. StartCoroutine(코루틴함수이름);
이렇게 호출해야함.
주의! 코루틴은 Start함수가 호출된 이후에, 그리고 게임 오브젝트가 활성화된 상태에서 호출해야함. 안 그러면 정상적으로 동작하지 않음.
코루틴 내에서 무한루프를 만들 때, 반복문 바깥에 yield return을 넣으면 게임이 꺼짐(제어권을 안 넘겨서)
그러니까 반복문 안쪽에 yield return을 넣어서 적절하게 제어권을 양보해줘야한다.
공부한 건 이 정도.
현재 프로젝트 진행 상황 : 첫 시작화면, 메인화면 씬 연결 완료
'TIL > 유니티' 카테고리의 다른 글
10. 유니티_에셋 구입, 텍스트 깜빡이는 효과 구현 (0) | 2024.04.27 |
---|---|
7. 유니티_InputField (1) | 2024.04.22 |
5. 유니티_메인화면 만들기 (0) | 2024.04.20 |
4. 유니티_오브젝트 이동, UGUI 기초 (1) | 2024.04.19 |
3. 유니티_오브젝트의 흐름과 이동, 게임 기획 초반 (0) | 2024.04.16 |