오늘은 간단한 에셋세트 두개로 만들어보겠습니다.
마우스 우클릭 > 블루프린트 클래스 > 캐릭터 를 선택하여 캐릭터 블루프린트 클래스를 생성해줍니다.
블루프린트 클래스를 더블클릭해서 확인해보면 캡슐만 있는 것을 볼 수 있습니다.
캐릭터 블루프린트에는 기본적으로 캐릭터메시가 추가되어 있습니다. 메시를 클릭하고 오른쪽 디테일 패널에서 SKM_Bot 메시를 선택해줍니다.
그 후 메시를 하나 선택해줍니다 전 다운로드받은 에셋을 이용하겠습니다.
처음에는 캐릭터 메시가 약간 공중에 떠있고 방향이 돌아가있습니다. 메시를 월드 방향(하늘색 화살표)으로 회전, 위치는 중앙으로 이동시킨 뒤 캡슐의 크기도 알맞게 조절해봅시다.
스프링 암 컴포넌트와 카메라 컴포넌트를 추가해줍니다.
이 때, 카메라 컴포넌트는 스프링암 컴포넌트에 붙여줘야합니다.
카메라의 시야가 너무 낮은 곳에 있다는 생각이 드실겁니다. 이때에는 스프링암의 트랜스폼의 Z위치를 45로 수정하였습니다.(저는 이외에도 회전각을 조절하여 각도도 살짝 아래를 바라보게 했습니다.)
자 이제 캐릭터에 움직임을 입혀보겠습니다.
우리가 만든 캐릭터가 움직이기 위해서는 언리얼엔진에서 입력을 받을 수 있어야 합니다.
유저의 입력들을 매핑할 수 있게 입력 액션과 입력 매핑 컨텍스트를 생성해줍니다.
마우스의 이동은 LOOK이 캐릭터의 움직임은 MOVE가 입력액션을 만들어줍니다.
Look과 Move는 X, Y 축을 모두 사용하기 때문에 ‘IA_NBC_Look’을 더블 클릭한 후 설정값에서 ‘Axis 2D’ 를 선택합니다. Move 도 같은 값으로 세팅하면 됩니다.
**‘IMC_NBC_DefaultMappingContext’**는 아래와 같이 세팅을 해줍니다.
입력 액션에서 입력 이벤트를 정의하고, 맵핑 컨텍스트에서 키를 액션에 맵핑해주는 개념이라고 생각하시면 좋습니다.
각 키별 이동방향에 대한 모디파이어를 설정해주겠습니다.
캐릭터는 기본적으로 X축 방향을 보고 있기때문에 전진하는 W 에는 모디파이어가 없습니다.
S는 뒤쪽으로 이동하기때문에 X축의 부정
D는 오른쪽으로 이동하기때문에 Y축 방향인 스위즐 입력 측 값
A는 왼쪽으로 이동하기떄문에 Y축 방향 스위즐 입력 측 값과 부정
아마 이부분이 어려워서 이해가 잘 안되실 겁니다 . 추가 설명 붙여보도록 하겠습니다.
1. 입력 액션이란?
입력 액션(Input Action)은 키보드나 컨트롤러 입력(W, A, S, D 등)을 받아서 캐릭터의 행동(이동, 점프 등)을 정의하는 기능입니다.
IA_NBC_Move:
- **IA_NBC_Move**는 이동(Input Action) 관련 입력을 처리하는 액션입니다.
- 이 액션에서 W, A, S, D 키를 각각의 이동 방향에 맞게 설정하고 있습니다.
2. 모디파이어(Modifier)란?
모디파이어는 입력 값을 변환하거나 방향을 수정할 때 사용하는 옵션입니다.
이 강의에서는 이동 방향에 맞춰 입력 값을 수정하고 있습니다.
3. 각 키의 이동 방향과 모디파이어 설정
3.1 W 키 (전진)
- 설명:
- 캐릭터는 기본적으로 X축 방향을 바라보므로, W 키는 X축으로 전진합니다.
- 따라서, 모디파이어를 설정할 필요가 없습니다.
- 모디파이어 값: 없음.
3.2 S 키 (후진)
- 설명:
- S 키는 캐릭터를 뒤로 이동시키기 위해, **X축 방향의 반대(-X)**로 설정해야 합니다.
- 이를 위해 모디파이어에서 **X축 값을 "부정(Negate)"**하도록 설정합니다.
- 모디파이어 값:
- X축 → 부정 (Negate)
3.3 D 키 (오른쪽 이동)
- 설명:
- D 키는 캐릭터를 오른쪽으로 이동시키기 위해 Y축 방향 값을 사용합니다.
- 캐릭터의 이동은 기본적으로 X축만 사용하는데, Y축 값을 참조하려면 **"스위즐 입력 축 값(Swizzle Input Axis Value)"**을 사용해 Y축을 활성화해야 합니다.
- 모디파이어 값:
- Y축 → 스위즐 입력 축 값
3.4 A 키 (왼쪽 이동)
- 설명:
- A 키는 캐릭터를 왼쪽으로 이동시키기 위해 Y축의 반대(-Y) 방향을 사용합니다.
- 따라서, D 키와 동일하게 **"스위즐 입력 축 값(Swizzle Input Axis Value)"**을 사용하지만, **Y축 값을 "부정(Negate)"**해야 합니다.
- 모디파이어 값:
- Y축 → 스위즐 입력 축 값 + 부정 (Negate)
4. 요약
키이동 방향모디파이어
W | X축 (+X) | 없음 |
S | -X축 | X축 → 부정 (Negate) |
D | Y축 (+Y) | Y축 → 스위즐 입력 축 값 |
A | -Y축 | Y축 → 스위즐 입력 축 값 + 부정 |
5. 모디파이어를 설정하는 이유
- WASD 입력값을 방향에 맞게 변환:
- W는 앞으로, S는 뒤로, A는 왼쪽, D는 오른쪽으로 이동하도록 입력을 수정.
- 캐릭터가 X축을 기본으로 바라보는 방향에 맞춰 이동 방향 설정:
- 기본적으로 캐릭터는 X축을 따라 이동하도록 설계되어 있으며, 다른 축(Y축)을 사용하려면 변환이 필요.
6. 쉽게 이해하는 방식
- W: "앞으로 가라!" → 그냥 그대로 전진 (X축, +X)
- S: "뒤로 가라!" → 뒤로 이동해야 하므로 방향 반대로 설정 (X축, -X)
- D: "오른쪽으로 가라!" → Y축을 사용해야 하므로 Y축 값을 활성화 (Y축, +Y)
- A: "왼쪽으로 가라!" → Y축을 사용하면서 방향 반대로 설정 (Y축, -Y)
다음으로 움직임에 대한 블루프린트를 만들어줍시다.
블루프린트 이벤트그래프에서 아래와 같이 노드들을 생성해줍니다.
AddMappingContext의 인풋 MappingContext에는 위에서 생성한 IMC_NBC_DefaultMappingContext를 넣어주면 됩니다.
이벤트가 시작했을때(액터가 생성된 이후) ‘Get Player Controller’로 현재 플레이어의 컨트롤러에 연결된 인풋들을 찾아서 매핑컨텍스트와 연동하는 이벤트입니다.
이벤트 그래프에서 마우스 오른쪽을 클릭 > **‘IA_NBC_MOVE’**를 검색, 노드를 추가합니다.
이벤트 노드의 ‘Action Value’ 오른쪽 클릭 **‘구조체 핀 분할’**을 클릭해 X, Y 값을 각각 사용할 수 있도록 분할해줍니다.
이동하는 로직은 아래와 같습니다.
인풋 맵핑 컨텍스트에서 설정해준 것과 같이 X 값으로는 앞, 뒤 이동을 하며, Y 값으로는 좌, 우 이동을 합니다. 이 때, 사용하는 노드들은 ‘Get Actor Forward Vector’ 와 ‘Get Actor Right Vector’ 입니다. 이 2개의 노드들에서 월드를 기준으로 액터의 벡터 값을 계산한 수를 받아 인풋 액션의 X, Y 값 만큼 이동시켜줍니다.
자 이제 빙의(possess)로 player0을 설정해준 뒤 플레이를 해보면 움직임이 작동하는걸 확인할 수 있습니다.
이제 시점에 대해 블루프린트를 살펴보겠습니다.
시점 이동은 아래와 같습니다. Move 때와 같이 구조체 핀 분할하여 X 는 Yaw (좌우), Y 는 Pitch (상하) 에 연결해줍니다.
이 때 사용하는 노드들은 ‘Add Controller Yaw Input’ 과 ‘Add Controller Pitch Input’ 입니다.
캐릭터 블루프린트 디테일 패널에서 컨트롤러를 검색 컨트롤러의 피치 및 요 사용을 체크해준 뒤 플레이 버튼을 눌러 테스트를 해봅니다.
이제 플레이를 해보면 시점도 같이 움직임을 확인할 수 있으실텐데 조금 어색한걸 느끼실 겁니다
‘폰’ 카테고리의 컨트롤러 회전 사용은 캐릭터 전체와 연결되어 있기때문입니다.
캐릭터 전체와 연결되어 있는 2가지 옵션은 모두 해제합니다.
캐릭터 무브먼트 컴포넌트의 ‘무브먼트 방향으로 회전 조정’을 체크해줍니다.
스프링 암 컴포넌트의 ‘폰 제어 회전 사용’을 체크해줍니다.
카메라의 피치(상하)가 반대인 것 같아 마지막으로 IMC_NBC_DefaultMappingContext 에서 마우스의 Y축을 반전시켜주도록 하겠습니다.
기존에 위에서 생성한 이동의 경우 ‘월드’ 를 기준으로 캐릭터의 회전을 구현하는데 아래의 노드들은 현재 컨트롤러를 기준으로 구현합니다.
다양한 형태로 구현해보고 기호 or 기획에 따라 적용해보세요.
완성입니다! 자연스러운 3인칭게임의 조작을 확인 할 수 있습니다.
위 과정들과 같이 점프도 만들어주겠습니다.
'언리얼(Unreal) > 엔진' 카테고리의 다른 글
24.12.18 언리얼 (블루프린트 실습) (1) | 2024.12.18 |
---|---|
24.12.17 언리얼(에디터 화면과 머티리얼) (0) | 2024.12.17 |
24.12.16 언리얼 (metahuman 플러그인) (2) | 2024.12.16 |
24.12.12 언리얼 unreal engine 의 기초 지식과 용어 (0) | 2024.12.12 |
24.12.11 언리얼 언리얼엔진의 기초 (0) | 2024.12.11 |