본문 바로가기
게임 개발/Unity3D

[Unity | 유니티] Mobile Virtual Joystick/Touchpad (모바일 가상 조이스틱/터치패드) 만들기 (2)

by 불타는홍당무 2016. 11. 25.


1부에 이어 터치패드 조작에 따른 Player 게임오브젝트의 이동을 구현해 보겠습니다.


1. Player 게임오브젝트 생성

Hierarchy창에 새로운 게임오브젝트를 생성하고 Player라 명명합니다. Inspector창에서 Sprite Renderer를 추가하고 플레이어에 사용할 이미지를 Sprite 할당합니다. BoxCollider2D를 추가하고 이미지 사이즈에 맞춥니다. RigidBody2D를 추가하고 Gravity Scale값을 0으로(중력 미작용), Constraints -> Freeze Rotation(물리엔진에 의한 회전 금지)를 체크합니다. 마지막으로 PlayerControllerScript를 생성하여 추가합니다.


2. PlayerControllerScript PlayerControllerScript.cs

전역변수는 4개를 선언합니다. 플레이어의 Rigidbody2D를 할당할 rb2D, 이동방향 moveVector, 이동속도 moveSpeed, 터치패드에 할당된 Joystick 스크립트를 연결할 joystick입니다. Start()에서 플레이어의 Rigidbody2D rb2D에 할당하고, moveVector 또한 초기화합니다. moveSpeed joystick Inspector창에서 할당합니다. moveSpeed는 직접 값을 입력하고, joystick에는 1부에서 만든 BackgroundImage 게임오브젝트를 Drag&Drop합니다.


Update() 함수에서는 HandleInput()을 실행하여 터치패드의 입력값을 받아올 것입니다. FixedUpdate() 함수에서는 Move()로 플레이어를 이동시킵니다.


HandleInput()에서 하는 일은 PoolInput()의 리턴값을 moveVector에 대입하는 것입니다. PoolInput()에서는 joystick 스크립트의 GetHorizontalValue(), GetVerticalValue()에서 각각 리턴하는 x좌표, y좌표 값을 벡터값에 할당해 리턴합니다. 벡터값을 정규화(direction.Normalize())하는 이유는 moveVector를 방향만을 나타내는 용도로 사용하기 위함입니다Move()에서는 Translate함수를 이용해 플레이어를 이동시킵니다.


이상으로 터치패드 조작에 따른 Player 게임오브젝트의 이동을 구현해 보았습니다. Scene을 실행하고 터치패드를 움직이면 플레이어가 이동하는 것을 확인하실 수 있습니다. 이해되지 않는 부분은 댓글로 질문해주시면 답변해 드리겠습니다. PlayerControllerScript도 첨부하니 참고 바랍니다.