이번에 구현할 기능은 캐릭터이다.
우선, 이동, 점프, 카메라 이동을 구현하고자 한다.
이동, 점프, 카메라 이동에 해당하는 기능을 Input Action으로 만들어두고, Input Mapping Context에 연결을 해준다.
이후, 캐릭터 액터를 Blueprint로 만들고, 플레이어 컨트롤러가 빙의할 수 있도록 한다.
Input Mapping Context를 플레이어 컨트롤러가 받게 해준 후, Input Action을 블루프린트로 가져와 연결해주면 끝 !
(1) 블루프린트 세팅
: SpringArm과 Camera 컴포넌트를 추가해서 카메라가 캐릭터에 부착된 상태로 함께 이동할 수 있도록 한다.
(2) Input Action 세팅
1. Jump
: 점프중이다. 점프중이 아니다. 처럼 True, False로 판단되는 기능이므로 값 타입은 "Digital"로 설정해준다.
점프는 Space 키를 누르는 순간에 발동되어야하므로 트리거는 "눌림"으로 설정해준다.
2. Move
: 이동은 왼쪽, 오른쪽, 위, 아래로 할 수 있으며 x축과 y축에 대한 이동으로 볼 수 있다. 왼쪽은 (-1,0) 오른쪽은 (1,0)
위는 (0,1) 아래는 (0,-1)처럼 Vector2로 표현되므로 값 타입을 "Axis2D"로 설정해준다.
이동은 W,A,S,D를 누르고 있는 상태에서 발동되어야하므로 트리거는 "다운"으로 설정해준다.
3. Camera
: 마우스 움직임에 따라 카메라가 왼쪽, 오른쪽, 위, 아래 방향을 바라보아야한다. 이는 Move처럼 Vector2로 표현되므로 값 타입을 "Axis2D"로 설정해준다.
Jump, Move는 특정 조건으로 실행되지만 Camera는 항상 실행되어야하는 기능이므로 트리거는 설정하지 않는다.
(3) Input Mapping Context 세팅
우선 3개의 Input Action과 매핑을 시켜주었다. 순서대로 점프, 이동, 카메라 이동이다.
1. IA_Jump
: 점프는 True, False의 반환을 통해 기능이 실행된다.
트리거는 Input Action에서 설정해주었으므로 따로 설정해줄 필요는 없다.
모디파이어는 Input Action에서 반환하는 값을 수정해서 반환해주는 기능이다.
Space 키를 눌렀을 때 True를 반환하면서 Jump 기능을 수행하는 것이 우리의 목적이기때문에, 따로 Space 키를 눌렀을 때 False를 반환하게 하는 등의 수정은 필요가 없으므로 모디파이어를 설정해줄 필요는 없다.
2. IA_Move
: 이동에 대한 Input Action에서 우리는 값 타입을 "Axis2D"로 설정했다.
따라서 Input Action에서 설정한 "다운" 트리거가 발생하게 되면, 기본적으로 (1,0)을 반환한다.
(내가 설정한 캐릭터는 Z축으로 -90도 회전한 상태이기 때문에 (1, 0)을 바라보는 것이 정면, 즉 W에 해당한다. 기본적으로는 (0,1)을 바라보는 것이 정면이니 캐릭터가 기본적으로 회전한 상태가 아니면 W에 스위즐 입력 축 값을 모디파이어로 설정해주었다.)
S키를 눌러 아래로 이동하려면 (-1,0)을 반환해야하기때문에 모디파이어에 "부정"을 설정해줘서 "다운"트리거가 발생했을 때 (-1,0)을 반환하도록 한다.
A키를 눌러 왼쪽으로 이동하려면 (0,-1)을 반환해야하기때문에 모디파이어에 "부정"과 "스위즐 입력 축 값"을 설정해줘서 XYZ 순으로 값을 반환하지 않고, YXZ 순으로 음수 값을 반환하도록 해서 (0, -1)을 반환하도록 한다.
D키를 눌러 오른쪽으로 이동하려면 (0, 1)을 반환해야하기때문에 모디파이어에 "스위즐 입력 축 값"만 설정해주면 된다
3. IA_Look
: 카메라 이동은 마우스로 발생하기때문에 입력조건을 마우스 XY 2D 축으로 설정해준다.
X축과 다르게 마우스가 Y축으로 이동할 때에는 예외조건을 걸어주어야한다. Y축이 위로 이동하는 상황에서는 음수값을 반환하기때문인데, 모디파이어에 "부정"을 설정해주는 경우 X축에도 부정이 적용되므로 의도치 않은 결과가 나타날 수 있다. Y축에 대한 예외조건은 블루프린트에서 설정해주도록 하겠다.
(4) 노드 세팅
A. 빙의
1. Event BeginPlay에 연결을 해줌으로서 시작과 동시에 빙의가 될 수 있도록 한다. (빙의를 받지 않을 경우 Input도 받지 않는다)
- 빙의할 플레이어 컨트롤러를 Get Player Controller 노드를 통해 가져온다
- This 노드를 통해 현재 캐릭터 액터를 가져온다
- Possess 노드에 빙의할 대상, 객체를 설정해준다
2. 빙의한 컨트롤러가 Input을 받을 수 있도록 한다.
- 플레이어 컨트롤러를 Get Player Controller 노드를 통해 가져온다 (위의 노드와 연결해도 되지만, 깔끔하게 노드를 정리하고자 한 번 더 선언)
- Get EnhancedInputLocalPlayerSubsystem 노드를 통해 Add Mapping Context에 Target으로 연결할 플레이어 컨트롤러의 EnhancedInput을 가져온다
- Add Mapping Context 노드로 설정한 InputMappingContext를 연결해준다
B. 점프
: 점프로 설정한 Input Action인 "IA_Jump"를 검색하면 해당 Input Action을 노드로 가져올 수 있다. Triggered에 언리얼에 내장되어있는 Jump 노드를 이어주면 간단하게 Jump는 구현된다.
C. 이동
: "IA_Move"를 검색해서 노드로 가져온다. 우선 Break Vector2D 노드를 통해 IA_Move가 반환하는 Vector2 값을 x, y로 분리한다. 이후 캐릭터가 바라보고 있는 방향과 x 값을 곱해주고, 캐릭터의 우측에 해당하는 방향과 y값을 Multiply 노드를 통해 곱해준다.
( 마우스 움직임에 따라 변화하는 회전을 반영하기위함. 방향을 곱해주지 않을 경우 World 기준으로 이동하기때문에 W를 누를 때 뒤로 이동하는 것처럼 보일 수 있음)
분리된 x, y값을 다시 합쳐야하므로 Add 노드로 더해준 후 Add Input Vector 노드의 World Vector로 연결해준다.
마지막으로 캐릭터에 부착된 CharacterMovement 컴포넌트를 드래그 드롭해서 노드로 가져온 후 Add Input Vector 노드의 Target으로 연결해주면 된다.
D. 카메라 이동
: "IA_Look"을 검색해서 노드로 가져온다. Input Mapping Context에서 마우스 이동을 설명하면서 Y축에 대한 예외조건을 블루프린트로 처리해준다고 했다.
마우스를 위로 이동하면 (0, -1)을 반환하기때문에 마우스를 위로 이동했을 때 캐릭터가 아래를 바라보게 된다. 이에 대한 예외조건을 처리해주고자 -1 을 곱해주는 것이다.
Break Vector2D 노드를 통해 x, y값을 각각 분리해준다. 이후 x 값은 X축 회전을 담당하는 Yaw Input에 연결해주고, y 값은 -1을 곱하여 Y축 회전을 담당하는 Pitch Input에 연결해주면 된다.
결과물 영상
'언리얼 엔진 > 블루프린트' 카테고리의 다른 글
[Blueprint] 블렌드 스페이스로 캐릭터 애니메이션 구현 (0) | 2024.12.20 |
---|---|
[Blueprint] 오버랩 이벤트 (0) | 2024.12.20 |
[Blueprint] Blueprint 각종 팁 (0) | 2024.12.19 |
[Blueprint] 가위바위보 게임 구현 (0) | 2024.12.02 |