이 튜토리얼에서는 플레이어 블루프린트를 수정하여 이동하는 동안 특정 키를 길게 눌러 전력질주하는 기능을 추가해 봅니다. 이 과정에서 플레이어의 입력을 수신할 때 권장되는 언리얼 엔진의 인핸스드 인풋 시스템에 대해 배웁니다. 이 시스템을 사용하여 다음과 같은 작업을 수행하게 됩니다.
어떤 입력이 전력질주 무브먼트를 트리거하는지 정의하는 입력 액션(Input Action)을 생성합니다.
입력 액션을 이벤트로 전환하여 플레이어 블루프린트에 연결합니다.
전력질주하는 동안 플레이어의 무브먼트 속도를 높입니다.
이전 섹션에서는 적의 시야 안에 있을 때 적이 플레이어를 추격하도록 하는 적 캐릭터 로직을 만들어 봤습니다. 전력질주 메커니즘을 통해 플레이어가 이러한 적 캐릭터를 피하는 데 사용할 수 있는 게임플레이 메커니즘을 제공합니다.
게임을 디자인할 때 적과 같이 플레이어를 위한 도전 요소를 만드는 것이 중요하며, 플레이어가 이를 극복하는 데 사용할 방법이나 전략을 제공하는 것도 그만큼 중요합니다.
플레이어가 더 빨리 움직이도록 지원하는 전력질주는 대부분의 게임에서 사용되는 인기 있는 기능입니다. 이 메커니즘은 레벨에서 디자인한 공간을 플레이어가 가로질러 이동하는 방식을 변경합니다.
시작하기 전에
퍼즐 어드벤처 디자인의 이전 섹션에서 다룬 퍼즐 어드벤처 디자인하기의 다음 주제를 이해하고 있어야 합니다.
노드, 함수, 이벤트 추가와 같은 블루프린트 기초
이 튜토리얼 시리즈에서는 이전 문서의 다음 에셋이 필요합니다.
BP_AdventureCharacter
입력 액션 에셋 생성하기
우선 입력 액션 에셋을 생성합니다. 입력 에셋은 다음과 같은 사항을 정의합니다.
액션의 이름
액션의 값 타입
트리거 타입(누르기, 길게 누르기, 릴리즈 등)
플레이어 캐릭터 블루프린트는 입력 액션을 수신하면 새 비헤이비어를 실행합니다.
나중에 프로젝트에 이미 있는 입력 매핑 컨텍스트 에셋을 사용하여 입력 액션을 특정 키에 바인딩(매핑)하게 됩니다.
다음은 인핸스드 인풋 시스템에서 사용되는 다양한 에셋 간의 관계를 보여주는 다이어그램입니다. 자세한 내용은 인핸스드 인풋 문서를 참고하세요.
| 입력 액션 | 입력 매핑 컨텍스트 | 블루프린트 |
|---|---|---|
의도 및 탐지 규칙을 정의합니다. | 키 및 버튼을 입력 액션에 매핑합니다. | 입력 액션을 사용하여 비헤이비어를 구현합니다. |
새 전력질주 이동을 위한 입력 액션 에셋을 생성하려면 다음 단계를 따릅니다.
콘텐츠 브라우저에서 Input > Actions 폴더로 이동합니다. 이 폴더에는 점프, 룩, 마우스 룩 및 이동과 관련된 입력 액션 에셋이 있습니다.
콘텐츠 브라우저에서 우클릭하고 입력으로 이동하여 입력 액션 에셋을 생성합니다.
이 에셋을
IA_Sprint로 명명합니다.적용된 명명 규칙은 입력 액션 파일을 정의하는 에픽의 방식이므로, 반드시 이 방식에 따라 명명할 필요는 없습니다.
IA_Sprint를 더블클릭하여 엽니다. 입력 액션은 데이터 에셋으로, '디테일(Details)' 패널이 있는 새 창에서 열립니다.
입력 액션 타입
이제 IA_Sprint 데이터 창의 디테일 패널을 살펴보겠습니다. 디테일 패널을 사용하면 플레이어 캐릭터에서 수신할 액션을 정의하는 등 이 에셋의 프로퍼티를 수정할 수 있습니다.
먼저 값 타입(Value Type) 프로퍼티로 이동합니다. 이 프로퍼티는 입력 액션의 데이터 타입을 결정합니다. 입력 액션을 생성할 때 해당 액션으로 캡처하려는 이동 타입에 따라 값 타입을 선택해야 합니다.
기본적으로 입력 액션의 타입은 디지털(부울)(Digital (bool))입니다. 즉, 전력질주 여부와 무관하게 켜짐 및 꺼짐 상태를 가집니다. IA_Sprint에 대해서는 디폴트 값을 유지합니다.
값 타입은 다음이 될 수 있습니다.
Axis1D: 액션에 1차원 이동(스크롤 인/아웃) 또는 스칼라 조정(이동 속도 변경)을 위한 한 가지 값이 있습니다.
Axis2D: WSAD 컨트롤과 같이, 액션에 2차원 이동을 위한 X 및 Y 값이 있습니다.
Axis3D: 비행 또는 수영 컨트롤과 같이, 액션에 3차원 이동을 위한 X, Y, Z 값이 있습니다.
입력 액션에서 트리거 구성
어떤 키 눌림이 전력질주 액션을 트리거하는지 정의하려면 다음 단계를 따릅니다.
트리거 옆에 있는 액션(Action) 섹션에서 더하기(+) 버튼을 클릭하여 트리거(Triggers) 배열에 새 엘리먼트를 추가합니다.
추가한 새 엘리먼트에서 없음(None)이라고 표시된 드롭다운 필드를 클릭합니다. 콤보(Combo), 길게 누르기(Hold), 아래(Down) 등의 입력과 탭(Tap)과 같은 터치 입력까지 있는 옵션 목록이 표시됩니다. 전력질주는 보통 키를 길게 누른 상태에서 이루어지므로 목록에서 아래를 선택합니다.
창 왼쪽 상단의 저장(Save) 버튼을 클릭하여 데이터 에셋을 저장합니다.
IA_Sprint를 닫습니다.
이 액션이 길게 누르기(Hold) 대신 다운(Down)을 사용하는 이유는 다운은 키를 누르는 즉시 트리거되지만, 길게 누르기는 키가 눌린 후 일정 시간이 지나야 트리거되기 때문입니다.
길게 누르기는 강공격 어빌리티와 같이 키를 릴리즈하기 전까지 공격을 충전하는 액션에 유용할 수 있습니다. 각 선택 항목에 마우스를 올리면 툴팁에 대한 자세한 내용을 확인할 수 있습니다.
트리거를 펼치면 작동 한계치나 액션이 트리거되기까지 입력을 얼마나 누르거나 움직여야 하는지를 확인할 수 있습니다. 키보드 키는 누르지 않은 상태는 0, 누른 상태는 1로 작동합니다. 또한 게임패드 컨트롤은 입력을 완전히 누른 상태가 아닐 때 0~1의 소수점 값을 가질 수도 있습니다.
이제 입력 액션 에셋이 구성되었습니다. 액션 이름을 IA_Sprint로 명명했고, 액션을 트리거할 입력을 정의했습니다(키 또는 버튼 누르기). 다음으로는 입력 매핑 컨텍스트를 사용하여 어떤 키가 액션을 트리거하는지 정의합니다.
키 매핑 할당
입력 매핑 컨텍스트 에셋은 방금 생성한 IA_Sprint와 같이 할당된 입력 액션 에셋을 수집하여 입력 키를 설정하고, 플레이어 캐릭터인 BP_AdventureCharacter 같은 캐릭터 블루프린트에 값을 전달합니다.
IA_Sprint 액션에 키를 매핑하려면 다음 단계를 따릅니다.
콘텐츠 브라우저로 돌아갑니다. 'Input > Actions' 폴더에서 한 단계 위의 'Input' 폴더로 이동합니다. 그러면 두 개의 입력 매핑 컨텍스트 에셋인
IMC_Default및IMC_MouseLook을 볼 수 있습니다.IMC는 입력 매핑 컨텍스트(Input Mapping Context)를 의미합니다.
IMC_Default를 더블클릭하여 디테일 패널이 있는 새 에디터 창에서 에셋을 엽니다.IMC_Default는 이 프로젝트에서 이동과 점프 같은 플레이어의 디폴트 어빌리티에 사용되는 입력 매핑 컨텍스트 에셋입니다.매핑(Mappings) 섹션에서 매핑 목록을 펼치면 IA_Jump, IA_Move, IA_Look이라는 세 개의 엔트리가 표시됩니다. 이러한 항목은 앞에서 Input > Actions 폴더에서 본 입력 액션입니다.
매핑 옆의 추가(Add)(+)를 클릭하여 목록에 엔트리를 추가합니다.
새 엔트리에서 드롭다운을 사용하여 앞서 생성한 IA_Sprint 에셋을 선택합니다.
IA_Sprint 엔트리를 펼쳐서 이 액션을 위한 키 선택 옵션을 표시합니다. 키보드 버튼을 클릭하고 키보드의 Caps Lock 키를 누릅니다. 또는 드롭다운 메뉴를 사용하여 이 액션에 키를 할당할 수도 있습니다.
입력 매핑 컨텍스트를 저장하고 닫습니다.
IA_Sprint 입력 액션 키를 정의하고 나면 이제 플레이어가 키를 누르고 있을 때 트리거되는 입력 액션이 만들어져 해당 액션이 Caps Lock 키에 매핑됩니다.
일부 키 매핑(Shift, Ctrl, Alt 등)은 언리얼 에디터에서 사용되므로 PIE 모드에서 게임을 테스트할 때 작동하지 않을 수 있습니다. 이러한 매핑 중 하나를 사용하는 경우 독립형 모드에서 테스트하거나, 개발 중에는 다른 키를 사용한 다음 게임을 패키징하기 전에 원하는 키로 대체해야 합니다. 보통 PIE 모드에서 안전한 키 매핑으로는 문자 키, 숫자 키, 화살표 키, Caps Lock, Enter, 백스페이스, Page Up/Down, Home/End가 있습니다.
전력질주가 가능하도록 플레이어 블루프린트 수정하기
입력 액션 구성이 완료되었으므로 이제 할당한 키 입력을 사용하여 전력질주하도록 플레이어 블루프린트를 수정합니다.
전력질주 기능을 만들려면 플레이어가 IA_Sprint의 트리거를 누를 때 무브먼트 속도를 높입니다. 전력질주 키를 놓을 때 캐릭터가 디폴트 이동 속도로 돌아가도록 만들어야 합니다.
먼저 캐릭터에게 디폴트 무브먼트 속도를 부여한 다음 전력질주 메커니즘을 생성해 보겠습니다.
무브먼트 속도 변수 생성
먼저 플레이어의 디폴트 무브먼트 속도 및 전력질주 무브먼트 속도를 저장할 변수를 생성합니다. 플레이어의 무브먼트 컴포넌트는 디폴트 무브먼트 속도를 설정하지만, 이를 변수에 저장하면 플레이어가 전력질주 액션 종료 후 해당 속도로 돌아갈 수 있습니다.
플레이어의 다양한 무브먼트 속도를 저장하는 변수를 구성하려면 다음 단계를 따릅니다.
콘텐츠 브라우저에서 'Content > AdventureGame > Designer > Blueprints > Characters' 폴더로 이동하여
BP_AdventureCharacter블루프린트를 엽니다.내 블루프린트(My Blueprints) 패널을 사용해 DefaultMovementSpeed라는 플로트(Float) 타입의 새 변수를 추가합니다.
플로트 타입의 SprintMovementSpeed 변수를 하나 더 추가합니다.
블루프린트 에디터 왼쪽 상단의 컴파일(Compile) 버튼을 클릭합니다.
그런 다음 SprintMovementSpeed 변수를 클릭합니다. 디테일 패널에서 디폴트 값(Default Value) > 전력질주 이동 속도(Sprint Movement Speed)를 1000으로 변경합니다.
플레이어의 디폴트 무브먼트 설정
게임을 시작할 때 플레이어의 디폴트 시작 무브먼트 속도를 캡처합니다.
게임 시작 시 디폴트 무브먼트 속도를 저장하려면 다음 단계를 따릅니다.
이벤트 그래프에서 빈 공간을 우클릭하고 Event BeginPlay 노드를 생성합니다. 게임 시작 시 이 노드가 한 번 실행됩니다.
Event BeginPlay를 사용하여 게임 시작 시 플레이어의 디폴트 무브먼트 속도를 구합니다. 이 노드의 실행 핀에서 드래그하여 Set Default Movement Speed 노드를 생성합니다.
BP_Enemy를 생성할 때와 마찬가지로, 캐릭터의 무브먼트 컴포넌트에는 캐릭터의 속도를 제어하는 프로퍼티가 포함되어 있습니다. '컴포넌트(Components)' 패널에서 '캐릭터 무브먼트(CharMoveComp)'를 이벤트 그래프로 드래그합니다.Character Movement 노드에서 핀을 드래그해 Get Max Walk Speed 노드를 생성합니다.
최대 걷기 속도(Max Walk Speed) 핀을 Set Default Movement Speed 노드에 연결합니다.
이 기능은 플레이어의 캐릭터 무브먼트 컴포넌트의 최대 걷기 속도를 사용하여 생성한 DefaultMovementSpeed 변수의 값을 플레이어의 디폴트 걷기 속도로 설정합니다.
캐릭터 이동 컴포넌트를 선택해 디테일 패널의 캐릭터 이동(Character Movement): 걷기(Walking) 섹션을 보면, 디폴트 최대 걷기 속도가 600cm/s인 것을 볼 수 있습니다.
캐릭터 무브먼트 컴포넌트는 캐릭터의 이동 방식을 제어하는 다양한 프로퍼티를 포함하고 있으며, 블루프린트 로직을 통해 런타임에서 이러한 프로퍼티를 사용 및 변경할 수 있습니다.
스프린트 액션 비헤이비어 정의
이제 플레이어의 시작 무브먼트 속도가 정해졌으므로 플레이어가 전력질주 키를 누르면 무브먼트 속도를 높일 수 있습니다.
이벤트 그래프에 입력 액션을 추가하면 언리얼 엔진은 플레이어가 입력 매핑 컨텍스트에 정의된 대로 액션에 매핑된 키를 누를 때 실행되는 이벤트 노드를 생성합니다. 이 경우 Caps Lock을 누르면 IA_Sprint 이벤트가 실행됩니다.
IA_Sprint 입력 액션을 사용하여 전력질주 메커니즘을 생성하려면 다음 단계를 따릅니다.
이벤트 그래프의 빈 공간을 우클릭하고 IA_Sprint를 찾은 다음 입력(Input) > 향상된 액션 이벤트(Enhanced Action Events) 카테고리에서 IA_Sprint 노드를 선택합니다.
노드 하단의 화살표를 클릭하면 핀이 더 표시되는데, 여기서 Triggered 및 Completed 핀을 사용해야 합니다.
Triggered는 플레이어가 액션 키를 누르고 있는 것이므로, 캐릭터가 SprintMovementSpeed로 이동하도록 해야 합니다.
Completed는 플레이어가 키를 놓은 것이므로, 플레이어를 DefaultMovementSpeed로 돌아가게 해야 합니다.
컴포넌트 패널에서 캐릭터 이동(CharMoveComp) 컴포넌트를 다시 이벤트 그래프로 드래그합니다.
Character Movement 핀을 드래그해 Set Max Walk Speed 노드를 생성합니다.
Set Max Walk Speed 노드에서 Max Walk Speed 핀을 드래그해 Get Sprint Movement Speed 노드를 생성합니다.
IA_Sprint 노드의 트리거됨(Triggered) 핀을 Set Max Walk Speed 노드에 연결합니다.
이렇게 하면 플레이어 캐릭터의 이동 속도가 앞서 1000으로 설정한 전력질주 무브먼트 속도 값으로 설정됩니다.
마지막으로 플레이어가 키에서 손을 떼면 이동 속도를 다시 디폴트 값으로 변경해야 합니다. 그러면 이 액션이 완료됨(Completed)으로 표시됩니다.
전력질주가 끝난 뒤 캐릭터를 디폴트 무브먼트로 되돌리려면 다음 단계를 따릅니다.
IA_Sprint 노드에서 Completed 핀을 드래그해 Set Max Walk Speed 노드를 하나 더 생성합니다.
Set Max Walk Speed 노드를 다음과 같이 구성합니다.
Max Walk Speed에서 레퍼런스를 DefaultMovementSpeed에 연결합니다.
Target에 Character Movement 컴포넌트 레퍼런스 노드를 연결합니다.
블루프린트를 컴파일 및 저장합니다.
캐릭터 테스트하기
언리얼 에디터에서 플레이 버튼을 클릭하여 게임을 플레이해 보면, 이제 매핑된 전력질주 키(Caps Lock)를 길게 눌러 전력질주할 수 있습니다.
플레이어 캐릭터에서 다양한 최대 걷기 속도 및 전력질주 무브먼트 속도 값을 실험하여 게임에 가장 적합한 값을 결정하세요. 이제 플레이어가 전력질주할 수 있으므로 BP_Enemy 캐릭터로 돌아가서 최대 속도(Max Speed) 값을 높여 Hallway 3과 Room 3에서 마주치게 되는 적의 난이도를 테스트해 보세요.
이 튜토리얼에서 구현한 내용을 확장하고 게임에 다른 기능도 추가하고 싶다면 새 입력과 비헤이비어를 계속 추가할 수도 있습니다.
다음 순서
이제 플레이어 캐릭터의 메커니즘과 기능을 모두 추가했으니 레벨을 마무리할 준비가 되었습니다. 이 시리즈의 마지막 단원에서는 지금까지 생성한 모든 엘리먼트를 사용하여 레벨을 마무리해 봅니다.