유니티

유니티 3D 쿼터뷰 액션게임 - 플레이어 이동

nock_ji 2022. 4. 18. 16:00

 

유니티 3D 쿼터뷰 액션게임 만들기

 

👾 플레이어 이동 

 

 


 

1.  지형 만들기

 

✏️  지형 만들기 

 

- Floor , Wall 4개 만들어서 플레이어가 움직일 공간 만들기

- 현재 시점에서 보이지 않는 두 벽은 Mesh Renderer를 비활성화하여 겉보기를 감춥니다 

 

 

 

✏️   텍스처 넣기

- Albedo 옆 원을 눌러 텍스처 이미지 선택 

- Tiliing 개수를 높여 패턴 만들기 

 


 

2.  플레이어 만들기

 

 

✏️  Player에 필요한 컴포넌트 

Rigidbody + Collider + Script 

 

 

 

 

🔻 Player Collider의 크기와 반지름을 조정하여 Player와 비슷한 크기로 만듭니다 

 

 

 

 

✏️  플레이어 상하좌우 이동 로직 

- Input Axis 값을 받을 전역변수 선언 

- moveVec 는 Player가 움직이는 Vector3 값입니다 

 

📌 GetAxisRaw() 

Axis 값을 정수로 반환하는 함수

 

📌 normalized 

방향값이 1로 보정된 벡터 

 

📌 transform.position

World 좌표 기준으로 물체를 이동, Vector에 해당하는 좌표로 이동 

transform을 이용하여 Player를 이동, speed는 public으로 값 입력 

 

 

 

 

 

✏️  관성에 의한 쓰러짐 

 

🔻 관성에 의한 쓰러짐은 Rigidbody - Constraints - Freeze Rotation으로 해결 !

 

 

🔻 transform 이동은 물리 충돌을 무시하는 경우가 발생하여 Collision Detection을 Continuous로 변경

 


 

3. 애니메이션 

 

 

 

✏️  걷고 뛰는 애니메이션 

 

- Animator Controller 생성 

- 생성한 Animator Player를 Player의 자식 오브젝트 Mesh Object에 투입

 

- Player을 통해 애니메이터 창 열기

- 다운받은 에셋에서 애니메이션 Walk 와 Run 을 애니메이터 창에 추가

 

- 애니메이션 상태 사이를 Transition으로 연결

 

- bool 타입 파라메터(매개변수) 추가 

 

- 파라메터를 Condition에 사용하여 Transition 완성하기 

- Has Exit Time 비활성화 해제 

 


 

✏️  애니메이션 동작에 따른 키보드 입력 

 

- Run 애니메이션 및 속도가 Default값

- Walk의 키보드 입력과 속도를 다르게 설정

- Input manager에서 Walk 생성

 

 

 

-  Walk 버튼입력을 받는 bool 형태의 wDown 선언

 

📌  GetComponentInChildren() 

Animator 변수를 GetComponentInChildren() 으로 초기화

컴포넌트의 자식에 위치한 Animator를 가져옴

 

📌 Animator.SetBool()

스크립트를 통해 bool 값을 Animator 컨트롤러에 전달

Running은 Vector3(0, 0, 0)이 아닐 경우 실행

Walking은 Walk을 실행하는 버튼을 눌렀을 경우 실행  

 

 

 

 

✏️  애니메이션 동작에 따른 속도 설정

 

- Walk시 속도 줄이기 

- 즉 Walk를 실행시키는 wDown을 입력받으면 0.3f 속도, 그렇지 않으면 1f 속도

 

📌  삼항연산자

조건 ? true일 때 값 : false일 때 값 

 


 

4. 기본회전 구현

 

✏️   Player가 가는 방향으로 회전 

 

📌  transform.LookAt()

지정된 Vector를 향해서 회전시켜주는 함수

 

 


 

5. 카메라 이동

 

 

🔻 카메라 위치 변경 로직 

 

 

🔻 Player를 타겟으로 offset으로 카메라 위치를 설정