[Unity]22.RPG 튜토리얼 #1 - 플레이어 이동하기

안녕하세요 유랑입니다.



실력향상을 위해서 이번 시간부터는 유튜브 강의를 따라하면서 공부하겠습니다.

코드가 C# 고급 문법도 들어가니 이 점 유의하시고 봐주세요^^




1. RPG 만들기



이번 강의는 Patreon.com에서 외국인이 만든 강좌이며,

매달 $5의 후원을 통해야 리소스 다운을 받을 수 있습니다.

저는 돈을 지불하였고, 스킬업을 위해서 복습겸 글을 올리겠습니다.


리소스 사이트 => https://www.patreon.com/inScopeStudios/posts

유튜브 사이트 => https://goo.gl/o5VcTv







1-1) 플레이어 이미지 생성과 설정



프로젝트의 이름과 2D로 설정한 후 생성해 주세요.






프로젝트에 필요한 플레이어 이미지들을 다운받은 후 설정값을 다음과 같이 바꿔주세요.

이미지들이 묶음으로 들어 있는 이유는 드로우콜 관련 최적화 방편입니다.

Multiple을 통해서 이미지를 나누고 Sprite Editior를 클릭해 주세요.

원하는 간격으로 이미지 분할이 가능합니다.


- 드로우콜 => CPU가 GPU에게 어떠한 물체를 그리라고 요청하는 것

- Pixels Per Unit => 3D World에서의 단위 숫자(유니티는 단위당 1m를 뜻함) 

  그렇기에 보통 100을 써서 cm을 m로 표현





타입을 Automatic 설정하고 Slice를 누르면 유니티가 자동으로 이미지를 나눠 놓습니다.






1-2) 플레이어 이동 스크립트 작성




총 20개의 이미지가 생성이 될텐데 그 중 idle_0을 드래그앤 드랍을 이용해 하이라키 뷰에 옮겨 주세요.

그리고 캐릭터 이동을 위해서 스크립트 작성을 해보겠습니다.

키보드 입력값을 받아 이동하며, 이동 애니메이션을 적용하지 않았기에

캐릭터 이미지는 똑같이 보입니다.






Player로 이름을 변경한 후 스크립트를 적용 후 Speed 값을 바꿔보면서 결과값을 확인해 보세요^^








1-3) 클래스의 다형성으로 기능 나누기



Player스크립트에서 이동 로직은 플레이어 뿐만 아니라 적과 NPC에도 적용이 가능합니다.

공통 부분인데 중복해서 코드를 작성하면 비효율적이겠죠?

Class의 객체지향 기능을 이용해서 나눠보겠습니다.

결론적으로 자식 클래스는 부모의 기능도 가지고 있습니다.

부모 클래스는 부분 집합인 셈이네요.


- Character 스크립트 => 이동 기능을 가지고 있는 부모 클래스(기반 클래스)

- Player 스크립트 => 키보드 입력을 받는 기능을 가지고 있는 자식 클래스(파생 클래스)









1-4) IDLE 애니메이션



플레이어의 IDLE 애니메이션 상태를 만들어 볼게요.

만들기 전에 플레이어의 스프레이트 설정을 이전과 동일하게 구성해 주세요.


- Sprite Mode => Multiple

- Pixels Per Unit => 300 

- 스프라이트 나누기 => Auto






Down_idle_0 ~ 20까지 선택해서 드래그앤 드랍을 이용해서 플레이어 오브젝트에 넣어 주세요.

그러면 플레이어는 자동적으로 애니메이터와 Down 애니메이션을 가지게 됩니다.





Idle_Down, Idle_Left, Idle_Right, Idle_Up이라는 이름으로 총 4개의 애니메이션을 만들어 주세요.







생성된 애니메이터를 화면에 띄우게되면 애니메이션과 파라미터, 레이어가 보이게 됩니다.

파라미터는 플러스 표시를 이용해서 추가하실 수 있는데, Float 속성의 x와 y 파라미터를 생성해 주세요.

만드는 이유는 값에 따라서 애니메이션의 상태를 변경하려구 합니다.





그리고 애니메이션은 각각 트랜지션으로 이어 주세요. 마우스 우측 버튼을 이용하면 서로 이을수 있어요.

이어지게 되면 Has Exit Time과 Fixed Duration은 언체크 해주시고, Transition Duration 값은 0으로 만들어 주세요.

그 이유는 각 애니메이션으로 변경될 때 바로 바뀌어지게 만들기 위해서에요.





컨디션 값들은 다음과 같아요.

Greater는 크다, Less는 작다라는 의미로써,

ex) Down -> Right => x의 값이 0보다 크고, y의 값이 -0.1보다 클 경우 변경하라 이 뜻입니다.





파라미터 값에 따른 애니메이션 변화를 위해서 코드 수정을 하겠습니다.

Character 스크립트에서 애니메이터 기능들을 추가해 주세요.





애니메이터 이름을 변경하고 플레이어 오브젝트에 넣어주고 실행해 보세요.

그러면 좌우상하로 움직일 때 해당 애니메이션을 보여줄꺼에요^^








1-5) WALK 애니메이션



아까 전에 만든 애니메이션은 IDLE 애니메이션입니다. 걷다가 해당 위치로 멈출 때

대기 방향도 상화좌우 똑같기 때문에 만들어 주었어요.

플레이어가 걷는 애니메이션도 비슷하게 만들어 줄텐데 Layer를 이용해 기능을 나눠주겠습니다.

WALK 애니메이션을 만들어 주세요!!!!








Walk_Down, Walk_Up, Walk_Left, Walk_Right를 만들어 주셨으면 애니메이터에도 추가되셨을거에요.

해당 레이어에는 IDLE 애니메이션만 구성할 예정이므로 삭제해 주세요.





기존의 Basic Layer 이름을 Idle Layer로 변경한 후 플러스 표시를 이용해서 WalK Layer를 추가해 주세요.

그리고 Idle 애니메이션과 똑같이 구성하겠습니다.

편하게 작업하려면 복사 붙여넣기 하시고, 이름과 애니메이션을 Walk 애니메이션에 맞게 변경해 주세요.







Layer가 두 개 일때 기본 Layer가 실행되며 톱니바퀴를 클릭해 Weight 값을 1로 변경해 주면

걷는 애니메이션도 실행이 됩니다.

이유는 Weight은 Layer의 해당 애니메이션이 얼만큼의 비중을 줄것인가?를 의미하며

이 방식을 통해서 뛰면서 총을 쏘는 FPS 방식도 구성할 수 있어요.





Character 스크립트로 돌아가 걸을 때는 Weight을 1로 주고,

아닐 경우 Wight을 0으로 주겠습니다.


- SetLayerWeight(레이어 번호, 변경할 값)을 의미합니다.





자세히 관찰하면 발이 움직이는걸 확인할 수 있어요.

신기하네요. 코딩 방법은 다 다른가 봅니다.






2. 마무리



오늘 강의는 여기까지입니다.

RPG 튜토리얼을 따라하면서 Player 움직임을 만들어 보았습니다.

다음 시간에는 체력, 마나, 캐릭터 UI를 구성해 보겠습니다.

감사합니다.




수업자료: https://github.com/YouRang12/-Tistory-Unity---Extra-2D-







댓글

Designed by JB FACTORY