개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 언리얼 엔진 5에서 입력을 받는 방법을 알아보도록 합시다!

 

사용 엔진 버전 : 5.0.2

 

타임라인

0:00 인트로

0:09 입력

0:25 액션 입력과 축 입력

0:48 매핑과 바인딩

1:14 입력 매핑 만들기

2:23 기능 구현과 바인딩

6:26 아웃트로

 

[투네이션 후원] https://toon.at/donate/637735212761460238

 

[디스코드 채널] https://discord.gg/tqmRTy4pgk

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 언리얼 엔진에서 입력을 받는 방법을 알아보도록 하겠습니다.

입력

게임은 입력 장치를 통해서 플레이어의 입력을 받아 게임과 상호작용을 하고 게임의 반응을 출력 장치로 돌려주는 것을 기본적인 로직으로 합니다.

그렇기 때문에 언리얼 엔진으로 게임을 만들기 위해서는 사용자로부터 기본적인 입력을 받도록 기능을 구현하는 방법을 알아야 합니다.

액션 입력과 축 입력

언리얼 엔진에서는 입력을 크게 두 가지로 구분합니다.

바로 액션 입력과 축 입력입니다.

먼저 액션 입력은 점프나 공격, 상호작용을 할 때처럼 마우스 버튼이나 스페이스 바, E키를 누르는 것 처럼 간단하게 눌렀다가 떼는 입력을 의미합니다.

그리고 축 입력은 이동이나 마우스 좌표처럼 연속적인 값을 가지는 입력을 의미합니다.

매핑과 바인딩

언리얼 엔진에서 입력을 받기 위해서는 먼저 축이나 액션을 추가하고 그 입력이 어떤 입력인지 이름을 정합니다.

그리고 그 이름으로 동작할 키 입력을 추가해 주는데 이 과정을 매핑이라고 부릅니다.

그 다음에는 클래스에서 입력을 받아서 동작할 함수를 구현하고 이 함수와 입력 매핑을 연결해줍니다.

이 과정을 바인딩이라고 합니다.

한 마디로 언리얼 엔진에서 입력을 받기 위해서는 매핑과 바인딩이라는 과정을 거쳐야 합니다.

입력 매핑 만들기

먼저 언리얼 엔진을 실행하고 C++ 타입으로 시작용 콘텐츠를 포함해서 프로젝트를 생성합니다.

그럼 이제 앞에서 말한 과정대로 입력을 구현해보도록 하겠습니다.

먼저 매핑을 추가해야 합니다.

상단 메뉴바에서 [편집 > 프로젝트 세팅] 항목을 선택해서 프로젝트 세팅 창을 엽니다.

그리고 엔진 섹션에서 입력을 선택합니다.

그리고 바인딩 섹션을 보면 액션 매핑과 축 매핑 항목을 볼 수 있습니다.

여기서 축 매핑에 MoveForward라은 이름의 매핑을 추가하고 W키와 S키를 넣어줍니다.

그리고 W 키가 앞으로 가는 것이라면 S 키는 뒤로 가는 것이기 때문에 스케일을 -1로 설정합니다.

그 다음에는 MoveRight를 추가하고 A키와 D키를 매핑한 다음 A의 스케일을 -1로 설정합니다.

마지막으로 액션 매핑에 Grow를 추가하고 스페이스 바를 매핑해줍니다.

기능 구현과 바인딩

매핑을 추가한 다음에는 기능을 구현하고 만든 기능과 입력 매핑을 바인딩해야 합니다.

프로젝트 세팅 창을 닫고 [툴 > 새로운 C++ 클래스] 항목을 선택해서 C++ 클래스 추가 창을 띄워줍니다.

부모 클래스로는 폰을 선택하고 클래스를 생성합니다.

폰은 언리얼 엔진에서 AI나 플레이어가 조작할 수 있는 오브젝트를 의미합니다.

클래스 생성이 끝나면 헤더 파일에서 MoveForward, MoveRight, StartGrowing, StopGrowing 함수를 추가합니다.

그리고 멤버 변수로는 FVector 타입의 CurrentVelocity와 bool 타입의 bGrowing, USceneComponent* 타입의 OurVisibleComponent를 선언해줍니다.

OurVisibleComponent는 어디서든지 수정할 수 있게 EditAnywhere 지정자를 넣어서 UPROPERTY 매크로를 붙여줍니다.

그 다음엔 소스 파일의 생성자에서 루트 컴포넌트와 OurVisibleComponent에 씬 컴포넌트를 생성해서 넣어주고 OurSceneComponent를 RootComponent에 붙여줍니다.

그리고 MoveForward 함수와 MoveRight 함수를 구현해 줍니다.

이 두 함수는 입력받은 값을 CurrentVelocity에 넣어서 이동 방향 벡터를 만들도록 코드를 구현합니다.

그 다음에는 StartGrowing 함수와 StopGrowing 함수를 구현하고 bGrowing 변수의 값을 바꾸도록 코드를 작성합니다.

여기까지 기능 구현을 마쳤고 이제 이 기능과 입력 매핑을 바인딩할 차례입니다. SetupPlayerInputComponent 함수로 이동합니다.

축 매핑을 바인딩하기 위해서는 InputComponent의 BindAxis 함수를 사용합니다.

액션 매핑은 BindAction 함수를 사용하면 됩니다.

액션 매핑 바인딩에는 InputEvent를 통해서 어떤 입력일 때 기능이 동작할 지를 결정할 수 있습니다.

누를 때, 뗄 때, 두 번 누를 때 등 다양한 조건을 설정할 수 있습니다.

키를 누를 때는 StartGrowing 함수를 호출하게 만들고 키를 뗄 때는 StopGrowing 함수를 호출하게 바인딩합니다.

그 다음에는 Tick 함수로 가서 bGrowing 변수의 상태에 따라서 액터의 크기를 바꾸고 CurrentVelocity 변수로 액터의 위치를 이동시키는 코드를 작성해줍니다.

모든 코드를 작성한 다음에는 저장하고 에디터로 돌아가서 [Ctrl + Alt + F11] 단축키를 눌러서 컴파일시켜 줍니다.

그 다음에는 콘텐츠 브라우저에서 MyPawn 클래스를 찾아서 우클릭하고 [MyPawn 기반 블루프린트 클래스 생성] 항목을 선택해서 블루프린트를 생성합니다.

블루프린트가 생성되서 블루프린트 에디터가 열리면 컴포넌트 패널에서 Our Visible Component를 선택하고 [추가] 버튼을 눌러서 그 아래에 스피어를 추가해줍니다.

그리고 루트 컴포넌트 아래에는 카메라를 추가하고 위치를 조정해줍니다.

블루프린트 수정이 끝나면 블루프린트를 컴파일하고 저장한 다음 블루프린트 에디터를 닫아줍니다.

그 다음에는 우리가 만든 폰을 게임에서 사용하도록 만들 차례입니다.

GameModeBase 클래스를 찾아서 우클릭하고 다시 블루프린트 클래스를 생성해줍니다.

블루프린트 에디터가 열리고 나면 디폴트 폰 클래스를 우리가 만든 BP_MyPawn으로 변경해줍니다.

그리고 블루프린트를 컴파일하고 저장한 다음 블루프린트 에디터를 닫아줍니다.

그 다음에는 메인 툴바의 오른쪽 끝에 있는 설정 버튼을 누르고 월드 세팅을 눌러서 월드 세팅 패널을 열어줍니다.

그리고 여기서 게임 모드를 우리가 만든 것으로 교체해줍니다.

모든 작업이 끝나고 게임을 플레이시켜서 테스트해보면 이동 키로 구체가 움직이고 스페이스 키를 눌렀다가 뗄 때 크기가 커지고 작아지는 모습을 볼 수 있습니다.

아웃트로

이번 영상에서는 언리얼 엔진에서 플레이어의 입력을 받는 방법을 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

반응형

+ Recent posts