DNF LOVE

[Unity기초-7] 사용자 입력에 따른 Player를 이동시켜보자 - ⑤ 사용자 입력에 따른 Object 이동(3D) 본문

Programming/Unity

[Unity기초-7] 사용자 입력에 따른 Player를 이동시켜보자 - ⑤ 사용자 입력에 따른 Object 이동(3D)

botho 2019. 7. 20. 23:12
반응형

하하하 오래 기다렸다. 드디어 사용자 입력에 따른 Object 이동을 설명하도록 하겠다. 

두 가지 방법을 소개하도록 하겠다. 하나는 이전 포스팅에서 다뤘던 키보드 입력(GetKey())에 따른 구현 방식과,

Unity에서 지원하는 프로젝트에 대한 입력 축과 게임에서의 동작을 정의한 것을 이용한 구현 방식이다.

우선 Object의 원활한 이동을 위하여 Plane의 크기를 10, 1, 10 으로 수정해주었다.

Player 오브젝트에 붙여져 있는 PlayerControler 스크립트를 열어 speed 라는 실수 타입의 전역 변수를 선언해 주도록 하자.

speed를 수정하게 된다면 우선순위는 초기화 < 인스펙터창 이 된다

전역변수로 선언해준 이유는 인게임에서 이동속도를 확인하며 인스펙터 창에서도 수정할 수 있도록 하기 위해서다.

또, 물리엔진인 Rigidbody와 이동거리를 담을 vector3 변수도 선언해주도록 하자.

앞 포스팅에서 컴포넌트를 스크립트에서 다루는 법을 배웠다 

1. GetKey.KeyCode 키보드 입력에 따른 오브젝트를 동적으로 움직이게 하기.

우선 키보드 위 방향키를 누르면 z축으로 speed = 10f 만큼 이동하는 코드를 구현해보자.

Unity는 왼쪽 좌표계를 사용하고, Vector3.forward는 (0, 0, 1) 을 의미한다.
게임을 실행하고 화살표 위쪽을 누르면 Object가 z축으로 이동하는 것을 확인할 수 있다.

UpArrow말고 모든 방향에서 오브젝트가 움직일 수 있도록 하자.

문제 없이 오브젝트가 움직이는 것을 확인할 수 있다.

(속도 10은 너무 빨라서 속도 3정도로 낮춰줬다.)

2. Input.GetAxosRaw 로 수평, 수직을 받아와 오브젝트를 동적으로 움직이게 하기 - 키보드 방향키에 따른 이동거리를 받아오기.

Input.GetAxoRaw는 키보드 방향키를 나타내는 Input 함수이다.

1번에서는 PC의 키보드만 입력받을 수 있는데 게임은 PC뿐만 아니라 콘솔, 모바일 등 여러가지 플랫폼에 서비스 된다. 이들의 입력을 통일(?) 시키는 유니티의 기능이 있다.

그것은 Edit -> Project Settings -> Input Manager 이다. 이곳으 통해 입력 장치들을 관리할 수 있다.(수정 가능)

우리가 집중해서 봐야할 부분은 수평과 수직을 나타내는 Horizontal과 Vertical 이다. 

수평(x) 축을 나타내는 호리젠탈 왼쪽, 오른쪽 방향키로 이동하도록 되어 있다. 

이제 이것들을 활용하여 코딩을 해보자.

매 프레임 마다 사용자 입력 Horizontal과 Vertical을 받는 변수 h, v를 선언해주고, 

이동거리를 보정해준다.

transform.Translate함수를 사용하여 수평 - vector3.right(1, 0, 0) 으로 입력한 만큼 넣어주고, 

수직 - vector3.forward(0, 0, 1) 으로 입력한 만큼 이동하겠다는 명령을 해준다.

속도는 3으로 인스펙터창에 수정해주었다. 

또 화살표 모양뿐만 아니라 fps의 이동 명령어인 a, s, d, w 에 따라 오브젝트가 움직인다는 것을 알 수 있을 것이다.

이는 유니티에서 수평과 수직에 따른 입력 명령어는 PC내에서 화살표 키보드뿐만 아니라 a, s, d, w도 기본적으로 셋팅되어있다는 것을 알 수 있다.

 

갑자기 어렵고 초면인 함수들이 나와서 당황했을 것이다.

툴을 이용한 개발이란 원래 그런 것이다. (띠용) 원하는 명령을 직접 코딩으로 구현할 수 있지만,

그것은 시간과 노력이 굉장히 들어가기 때문에 각 툴이 지원해주는 함수들을 찾아보고, 그 함수들이 무엇을 의미하는지 Unity API 문서에 들어가 직접 확인해보고, 실험해보는 것이 최고의 공부인 것 같다.

앞 포스팅에서는 다양한 이동방법을 설명해주었지만 내가 이곳에서는 transform.Translate만 사용하였다. 여러가지 상황에 따라, 원하는 애니메이션 동작에 따라 실험해보고 코딩해보는 것을 권장한다.

열심히 찾아보고, 실험해 보고 내것으로 만들어보도록 하자.

반응형