-
11장. 유니런 플레이어 제작Unity/레트로의 유니티 게임 프로그래밍 에센스 2020. 11. 15. 11:21
<여러 이미지를 스프라이트 하나로 다루는 방법>
<오디오 소스를 사용해 사운드를 재생하는 방법>
<유한 상태 머신을 사용하여 어떤 애니메이션을 재생할지 결정하는 방법>
<애니메이터와 애니메이터 컨트롤러>
<이단 점프를 구현하고, 바닥을 감지하는 방법>
11.1 유니티 2D 프로젝트 열기
11.1.1 유니티 2D 프로젝트
- 유니티 프로젝트 생성 이후 얼제든지 2D와 3D 사이에서 전환 가능
- 2D 프로젝트의 주요 특징
> 이미지 파일을 스프라이트 타입으로 임포트
> 기본 생성 카메라가 직교(Orthographic) 모드를 사용
> 라이팅 설정 중 일부가 비활성화
> 씬 창이 2D 뷰로 보임
> 2D 프로젝트의 2D 게임 오브젝트는 위치와 스케일 등을 Vector3로 저장. 원근감이 없으니 z값 무의미.
11.1.2 Uni-Run 프로젝트 열기
11.2 시작 지점 만들기
11.2.1 시작 지점 발판
- 스프라이트는 2D 그래픽과 UI를 그릴 때 사용하는 텍스처 에셋 (이미지 파일).
- 하이어라키 창으로 드래그&드롭.
11.2.2 데드존 만들기
11.3 캐릭터 스프라이트 편집
11.3.1 Multiple 스프라이트
- 스프라이트 시트는 여러 이미지를 하나의 이미지로 합친것. 캐릭터가 연속적으로 움직이는 모습을 한 파일로 합쳐서 관리
- 유니티 2D 프로젝트에서 기본적으로는 싱글 스프라이트 모드. 하나의 스프라이트 에셋 -> 하나의 스프라이트.
- 시프라이트 시트를 여러개의 개별 스프라이트로 잘라서 사용하기 위해서는 멀티플 스프라이트 모드를 사용.
스프라이트 시트 에셋 -> 여러개의 스프라이트
- 인스펙터 창에서 Sprite Mode -> Multiple
11.4 2D 캐릭터 게임 오브젝트 준비
11.4.1 게임 오브젝트 준비하기
- Discrete : 일정 시간 간격으로 끊어서 감지. -> 감지하는 타이밍이 어긋나면 'Bullet Through Paper'.
- Continuous : 움직이기 이전 위치와 움직인 다음 위치사이에서 예상되는 충돌까지 함께 감지.
- Circle Collider 2D를 사용하면 각진 모서리에서 부드럽게 충돌가능.
11.4.2 오디오 소스
- 오디오 소스(audio source) 컴포넌트는 게임 오브젝트에 소리를 낼 수 있는 능력을 부여.
- 오디오 클립에 오디오 파일 연결.
- Play On Awake. 오디오 소스 컴포넌트가 활성화 되었을 때, 최초 1번만 오디오 자동 재생. 게임 시작과 동시에 오디오 소리가 무조건 재생.
- 오디오 리스너. 플레이어에게 게임 속 소리를 들을 수 있는 능력을 부여.
- 씬을 새로 생성하면 자동 추가되는 Main Camera 게임 오브젝트에는 오디오 리스너 컴포넌트가 추가됨.
11.5 캐릭터 애니메이션 준비하기
11.5.1 애니메이션 만들기
- 애니메이션 창. Ctrl+6. 이후 애니메이션 클립 생성.
- 애니메이션 창에서 타임라인으로 스프라이트 드래그&드롭. 'Samples' 조절.
11.5.2 유한 상태 머신
11.5.3 애니메이터 컨트롤러와 애니메이터
- 프로젝트 창에서 Create > Animator > Controller. 첫 애니메이션 클립 생성하면 자동 생성.
11.5.4 Player 애니메이터 컨트롤러의 상태
- Entry : 현재 상태가 진입하는 '입구'. Entry와 연결된 상태가 기본 상태.
- Exit : 상태 머신의 동작이 동작하는 '출구'. 현재 상태가 이곳으로 전이하면 애니메이터 동작은 완전히 종료.
완전히?? -> 유한 상태 머신 종료? 부동적인 오브젝트로 되나?- Any State : 현재 상태가 무엇이든 상관없이 특정 상태로 즉시 전이하게 허용하는 상태.
모든 상태?피격이나 사망 애니메이션 같은 경우..11.5.5 전이 구성하기
- 설정 : 마우스 오른쪽 클릭 > Make Transition
- 삭제 : 전이 화살표 클릭 > Delete 키.
- 파라미터 추가 : 애니메이터 창 > Parameters
- 파라미터 float, int, bool, trigger. trigger는 셋하는 순간 즉시 true가 되고 곧바로 false가 됨.
- 전이 구성. 전이 화살표 클릭 > 인스펙터 창에서 Conditions에서 파라미터 추가.
- Has Exit Time : 해당 전이가 즉시 일어나지 않고. 일정 시간(Exit Time)이 지난 후에 전이가 일어남. Exit Time이 0.5라면 현재 상태의 애니메이션이 0.5는 진행되어야 다음 상태로 (조건 만족 시) 전이.
- Transition Duration : 현재 애니메이션 클립과 다음 애니메이션 클립을 섞어서(블렌딩) 부드럽게 이어주는 역할.
=> 2D 스프라이트를 사용하는 애니메이션 클립에서는 블렌딩이 정상적으로 동작하지 않고, 전이 시점만 지연됨. -> 3D 애니메이션 클립과 달리 중간 위치를 계산할 '관절'이 존재하지 않기 때문.
- Fixed Duration : 체크되면 Trasition Duration값 단위를 초(second)로 해석, 체크가 되어 있지 않다면 분수 값으로 해석 0.5 -> 50%.
11.6 PlayerController 스크립트
11.6.1 PlayerController의 변수
11.6.2 Start() 메서드
11.6.3 Update() 메서드
- Input.GetMouseButtonDown(). 0:마우스 왼쪽 버튼, 1:마우스 오른쪽 버튼, 2:마우스 휠 스크롤 버튼.
- Input.GetMouseButton(), Input.GetMouseButtonUp(). 누르고 있는 동안, 손을 떼는 순간.
11.6.4 Die() 메서드
11.6.5 OnTriggerEnter2D() 메서드
11.6.6 OnCollisionEnter2D()와 OnCollisionExit2D()
- OnCollisionEnter2D() : 일반 충돌이 시작되는 순간 실행
- OnCollisionExit2D() : 충돌한 두 콜라이더가 서로 떨어지는 순간 실행.
- contacts : ContactPoint 타입의 배열 변수. contacts 배열의 길이는 충돌 지점의 개수.
11.6.7 PlayerController의 전체 코드
11.6.8 PlayerController 컴포넌트 설정하기
11.7 마치며
- Multiple 모드를 사용하면 하나의 스프라이트를 여러 스트라이트로 잘라 사용할 수 있다.
- 오디오 소스 컴포넌트는 소리를 재생.
- 오디오 클립은 재생할 오디오 파일(에셋)
- 오디오 소스 컴포넌트는 재생할 오디오 클립을 할당해야 소리를 재생할 수 있음.
- 오디오 소스 컴포넌트가 재생하는 소리는 오디오 리스너 컴포넌트가 들음.
- 애니메이터 컨트롤러는 유한 상태 머신(FSM)으로 재생할 애니메이션을 결정하는 에셋.
- 유한 상태 머신은 유한한 개수의 상태 중 한 번에 하나만 현재 상태가 될 수 있지만, 상태와 상태 사이를 전이를 통해 이동할 수 있는 설계 모델.
- 애니메이터 컴포넌트는 애니메이터 컨트롤러를 사용하여 애니메이션을 재생하는 컴포넌트
- 애니메이터 창에서 애니메이터가 사용 중인 애니메이터 컨트롤러의 상태도를 편집.
- 애니메이터 창에서 파라미터를 추가하여 전이의 조건으로 사용할 수 있음.
- 애니메이터에서 트리거 타입의 파라미터에는 값을 할당하지 않음. 트리거 타입의 파라미터는 트리거를 발동시키는 방식으로 사용.
- 애니메이터 컴포넌트의 Set 계열 메서드로 파라미터에 새로운 값을 할당할 수 있음.
- 2D 콜라이더에 대한 충돌 이벤트 메서드는 OnTriggerEnter2D() 같은 2D 버전을 사용해야 함.
'Unity > 레트로의 유니티 게임 프로그래밍 에센스' 카테고리의 다른 글
13장. 유니런 : 발판 반복 생성과 게임 완성 (0) 2020.11.18 12장. 유니런 배경 스크롤링과 게임 매니저 (0) 2020.11.17 10장. 공간과 움직임 (0) 2020.11.11 09장. 방향, 크기, 회전 (0) 2020.11.10 08장. 닷지_게임 매니저와 UI, 최종 완성 (0) 2020.09.07