티스토리 뷰

개요


언리얼 엔진(이하 언리얼)을 사용해서 키 입력을 받아서 처리할 수 있는 튜토리얼 프로그램을 만들어보자.

홈페이지에 설명이 나와있지만 최신 버전이랑 맞지 않는 관계로 최신 버전에 맞게 알아보도록 하자.






입력


언리얼에서 사용하는 입력은 크게 두 종류가 있다.

Action

windows나 다른 플랫폼에서 사용하는 키 입력과 비슷하게 동작한다. 입력한 순간, 입력되고 있는 도중, 입력이 끝났을 때 등에 따라 이벤트를 발생시킨다.


Axis

지정된 상수값을 전달하는 입력이다. 매번 호출되며, 해당 키가 눌리는 동안 정해놓은 값이 전달되고, 입력이 없으면 0이 계속 전달된다. 따라서 bind시킨 함수에서 매개변수로 전달받은 값을 더하거나 빼는 행위는 좋지 않다.





기본 구현


우선 pawn을 상속받는 C++ 클래스를 추가한다.

pawn은 possess 하여 키 입력을 받을 수 있는 클래스로 지금 튜토리얼에서 사용하기에 적절하다.




Pawn을 상속받은 MyPawn은 아무 component도 가지고 있지 않아서 게임에 추가해도 아무것도 보이지 않는다.

따라서 기본적으로 가져야 할 외형과, 이 오브젝트에 붙어있는 카메라를 추가하자.


Code Editor

camera, input, static mesh를 사용할 것이기 때문에 IWYU(Include What You Use) 철학에 따라 다음 header를 코드(.cpp)에 추가한다.

14.PNG


다음은 생성자에 추가할 코드이다.

먼저, Player0이 자동으로 해당 Actor에 possess할 수 있도록 설정해준다.

16.PNG


기본이 될 RootComponent를 생성하고,

15.PNG


camera를 추가하고,

18.PNG


visibleComponent를 추가한다.

17.PNG




Unreal Editor

MyPawn를 게임에서 볼 수 있도록 하기 위해 Visible Component의 mesh를 원하는 모양으로 설정한다.

19.png




Axis 이동 구현


먼저 Axis를 사용해서 기본 이동을 구현해보자.

프로젝트 설정에서 사용할 키를 매핑하고, 해당 키에 반응해서 동작하도록 코드를 작성한다.




Unreal Editor

프로젝트 설정에서 사용할 키와 그 키가 전달할 값을 설정한다.

WASD를 사용하며, 각 자신의 축에 대해 1.0 또는 -1.0을 설정했다. 이 값들은 나중에 bind시킬 함수에게 전달된다.

3.PNG




Code Editor

먼저 입력에 반응할 함수 MoveX, MoveY는 전달받은 값을 velocity의 각 축에 저장한다.

20.PNG


SetupPlayerInputComponent에서 MoveX와 MoveY를 설정한 키 매핑과 bind한다.

BindAxis함수에 전달하는 파라미터는 순서대로 다음과 같다.


“키 이름”, bind할 함수가 있는 클래스의 인스턴스, bind할 함수의 주소


11.PNG


Tick에서 실제로 MyPawn이 움직일 수 있도록 로직을 구현한다.

40번째 줄을 보면 _velocity를 정규화 하는 코드를 볼 수 있다. 이는 대각선으로 움직일 때 속도가 더 빨라지는 것을 방지하기 위한 연산으로 어느 방향으로 움직이던지 상관없이 속도는 무조건 100이 되도록 할 수 있다.

21.PNG




Unreal Editor

이제 MyPawn을 끌어서 화면에 추가하고 실행시키면 키 입력에 따라서 pawn이 움직이는 것을 볼 수 있다.

6.png




마치며


Axis입력 Action입력 둘 다 한번에 쓰려고 했는데 하다보니 너무 길어져서 Action입력은 다음에 쓰도록 하겠다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함