전체 스크린샷
 
launch character 노드로 더블 점프를 구현하는 것에서 아이디어를 얻어 구현했다.
 
 
내가 구현한 대쉬는

  • 플레이어가 정지해 있는 경우 플레이어가 보는 방향으로 빠르게 이동
  • 플레이어가 이동중인 경우 플레이어가 이동중인 방향으로 빠르게 이동
  • Z축 이동에는 영향을 끼치지 않음

위 기능을 가지고 있다. 
 
 
위 블루프린트는 다음과 같은 흐름을 가진다.
 

1. 플레이어의 상태(정지, 이동) 확인

  1. Get Velocity 노드 사용
  2. Vector Length 노드를 사용한 값과 0을 비교, Boolean으로 정지한 경우와 이동중인 경우를 나누어 각각 구현

 

2. 플레이어가 정지해 있는 경우

  1. Get Actor Forward Vector 노드를 사용
  2. 일정값을 곱하여 Launch Character 노드에 연결하여 플레이어가 보는 방향으로의 대쉬를 구현

 

3. 플레이어가 이동중인 경우

  1. Get Velocity 노드를 사용, 이 중 z값만 0과 비교하여 수직이동이 이루어지는지 확인
  2. Boolean으로 수직이동이 없는 경우(=플레이어가 지면에 있는 경우)와 수직이동이 포함된 경우(=플레이어가 공중에 있는 경우)를 나누어 각각 구현

 

4. 플레이어가 지면에 있는 경우

  1. Get Velocity 노드로 구한 값을 Split
  2. Z값을 0으로 한 Velocity를 Make Vector을 사용하여 생성
  3. Normalize 노드를 사용하여 이동 방향을 하고 일정값을 곱함
  4. 4-3의 값을 Launch Character 노드에 연결, 플레이어 이동방향으로의 대쉬를 구현

 

5. 플레이어가 공중에 있는 경우

  1. 4-3 이후 Clamp 노드를 사용해 이동 속도의 최대값을 정함

 
 
※플레이어가 공중에 있는 경우에는 대쉬 속도가 너무 빠르고 이동 거리가 길어져 위와 같은 방법으로 제한을 두었음
 

AI Controller 의 컴포넌트 탭에서 AI Perception을 추가해 AI에게 주변 상황을 인지할 수 있는 능력을 부여할 수 있다.

 

디테일 패널의 AI퍼셉션에서 AI가 가질 수 있는 감각(시각, 청각 등)을 추가할 수 있고, 이 중 어떤것이 가장 주도적인 감각인지도 설정이 가능하다.

 

AI 시야(Sight) 인덱스 설정

시각 반경: 해당 반경 내의 것을 AI는 인지할 수 있다.

시야 상실 반경: 시각 반경 내에 들어왔던 것이라도 시야 상실 반경 밖으로 벗어나면 AI는 볼 수 없게 된다.

주변 시야 반각도: 시야각을 말하는 것으로, 반각도이므로 전체 시야각은 해당 값의 두 배를 생각하면 된다.

최대 수명: AI가 인지한 것을 기억할 수 있는 시간을 뜻한다.

플레이어 캐릭터 bp가 사용하는 애니메이션 블루프린트가 몇가지 변수를 세팅하고 간단한 스테이트 변환을 처리하는 법

 

 

ABP_PlayerCharacter은 BP_PlayerCharacter의 애님 클래스이다.

 

BP_PlayerCharacter은 현재 기본 캐릭터 메시와 기본 카메라, wasd 입력에 따른 걷기 기능을 가지고 있다.

애니메이션이 적용되어 있지 않기 때문에 입력이 없을 때에는 부자연스러운 정자세로 서 있고, 걸을 때는 정자세 상태를 유지한 채 위치만 이동한다.

 

 

아래는 캐릭터가 가만히 있을 때, 걸을 때 자연스러워 보이기 위한 애니메이션을 추가하는 방법이다.

 

 

1. 애니메이션 블루프린트(이하 ABP)를 생성하고 프리뷰 메시를 선택한다.

-프리뷰 메시는 좌측 상단에서 애니메이션 프리뷰를 보여줄 마네킹이다.

 

2. BP_PlayerCharacter(이하 캐릭터 BP)의 애님 클래스를 방금 생성한 ABP로 지정한다.

 

3. ABP이벤트그래프에 아래 노드를 추가한다.

 

-본 ABP를 소유하는 액터를 불러오고, 캐릭터BP로 형변환해 Player Character이라는 이름의 변수로 만든다.

-Player Character의 Character Movement component를 get해 character Movement라는 이름의 변수로 만든다.

-위 두 단계로 Player Character, Character Movement를 셋하고 원할 때마다 불러올 수 있게 된다.

 

Character Movement Component에 대한 이해는 공식 문서를 참고.

https://dev.epicgames.com/documentation/en-us/unreal-engine/understanding-networked-movement-in-the-character-movement-component-for-unreal-engine

 

4. ABP의 애님그래프에 'Locomotion'이라는 State Machine을 추가하고 output pose에 연결한다.

-locomotion은 한 상태에서 다른 상태/한 장소에서 다른 장소로 이동할 수 있는 능력이나 이동을 말한다. 플레이어의 상태를 저장하는 데 쓰이는 상태 머신의 이름으로 쓰인다.

 

5. locomotion 내에 두 개의 state를 생성하고 각각 이름을 idle, walk라고 한다. 

 

6. 각각의 state(상태) 내부에 해당 상태에 출력할 애니메이션을 추가하여 output 노드에 연결한다.

-빨간 노드는 하나의 애니메이션이다. 사진 속 노드는 Mf_idle이라는 애니메이션으로, 해당 노드를 output노드에 연결하면캐릭터 bp는 idle 상태에서 mf_idle 애니메이션을 출력하게 된다.

-초록 노드는 랜덤으로 애니메이션을 출력해 준다. 디테일 패널에서 애니메이션 시퀀스를 여러 개 추가하고 플레이 확률을 지정할 수 있다. 현재 이 노드가 아웃풋과 연결되어 있으므로 캐릭터 bp는 해당 노드 안의 애니메이션을 랜덤으로 플레이한다. 

 

7. locomotion에서 idle과 walk 상태를 양 방향 모두 화살표로 연결해 준다. 

-화살표 방향대로 상태가 변화할 수 있다. idle에서 walk상태로의 트랜지션, 반대의 경우 모두 가능하다.

-화살표 근처에 생성되는 동그란 아이콘을 클릭하여 트랜지션의 조건을 정할 수 있다.

 

8. 트랜지션 조건 찾기

-idle에서 walk로 : 플레이어 캐릭터가 이동하고 있는 경우 walk로 상태를 이행시켜주어야 한다. 

-walk에서 idle로 : 플레이어 캐릭터가 이동하지 않는 경우 idle로 상태를 이행시켜주어야 한다.

따라서 플레이어 캐릭터의 속력(speed)이 0을 초과하는 경우 walk, 캐릭터의 속력이 0인 경우 idle상태라고 볼 수 있다. 

 

9. 트랜지션 조건 세팅하기

-플레이어의 speed라는 변수는  abp의 이벤트 그래프에서 만든다.

-speed와 0의 크기비교 불리언은 상태 간의 이행 규칙 내부에서 설정한다. 

 

 

 

 

즉, abp로 플레이어의 상태를 정의하고, 각 상태에 적절한 애니메이션을 배치하고, 상태간 이행을 연결하고, 이행 규칙을 정할 수 있다.

UE5에서 기본적으로 제공하는 tps 모드를 사용하면 기본적으로 플레이어 캐릭터가 보는 방향과 상관없이 카메라를 이리저리 돌릴 수 있다. 

 

이 경우 플레이어가 바라보는 방향과 플레이어 캐릭터가 이동하는 방향이 다를 수도 있다. 

대부분의 tps게임처럼 플레이어가 화면을 통해 보는 방향과 플레이어 캐릭터가 바라보는(+조준하는)방향이 일치하도록 하고 싶은 경우 다음 세팅을 한다.

 

 

 

1. 플레이어 캐릭터 블루프린트를 연다

ue5 기본 tps 모드인 경우 BP_ThirdPersonCharacter 파일을 연다. 

 

2. 디테일 창에서 'orient rotation to movement'를 찾아 토글을 꺼준다

한글로는 '무브먼트 방향으로 회전 조정'

 

 

3. 디테일 창에서 'Use controller rotation Yaw'를 찾아 토글을 켜준다

한글로는 '컨트롤러 회전 요 사용'

 

 

 

이제 마우스 이동에 따른 화면 방향과 플레이어 캐릭터가 보는 방향이 일치한다.

 

 

https://www.unrealengine.com/ko/lesson-plans?tags=hour%20of%20code

 

에픽게임즈에서 제공하는 튜토리얼(링크)와 예제파일(이미지)

해당 프로젝트 파일을 사용하는 튜토리얼은 5강까지 있는 듯하다. 

 

 

1강은 각 창의 기능 설명, 액터 배치 등 가장 기초적인 것이어서 생략한다.

 

 

2강 링크

https://www.unrealengine.com/ko/lesson-plans/moving-platforms-and-checkpoints-loops-and-boolean-variables-in-unreal-engine

 

2강에서 다루는 내용은 boolean을 사용하는 간단한 블루프린트 사용법과 sequence animation 이다

 

 

1. boolean을 사용하는 블루프린트

 

프로젝트가 제공하는  체크포인트 BP(BluePrint)를 맵에 설치한다.

스태틱 매시와 콜리전, 체크포인트 텍스트와 화살표로 구성되어 있다.

이 중 화살표는 체크포인트에 플레이어 캐릭터가 로드될 때 캐릭터가 향하는 방향을 나타내는 것으로, hidden in game 이 적용되어 있다.

 

해당 bp의 이벤트 그래프

 

섹션 1: 플레이어가 sphere_coil 콜리전에 접촉한 경우 이벤트를 시작한다.

섹션 2: 해당 체크포인트가 이미 활성화되었는지 체크한다. 만약 이미 활성화되었다면(true) 아무것도 하지 않고, 비활성화 상태라면(false) 'Checkpoint Enabled' booldean을 on 상태로 셋한다.

섹션 3:  체크포인트의 색깔을 바꾸어 체크포인트가 활성화되었음을 플레이어에게 알려준다.

섹션 4: 게임 모드에 cast한다. Casting = Call = Talking to 로 생각하면 된다. 게임모드에게 플레이어 스폰 위치를 체크포인트 위치로 셋하라고 말한다. 

섹션 5: 체크포인트에서 효과음을 출력해 체크포인트가 활성화되었음을 플레이어에게 알려준다. 

 

섹션 3,5는 기능상 없어도 되지만 플레이어가 변화를 쉽게 알아차릴 수 있도록 돕는 장치이다.

영문으로는 “quality of life” feature 라고 한다.

 

 

 

2. sequence animation

 

시퀀스를 이용해 움직이는 발판을 만드는 실습을 진행했다.

 

 

1선택한 액터의 트랙을 생성한다

2프레임에 핑을 찍고 액터의 위치를 조정한다

 

프리미어 프로의 모션 기능과 유사하여 어렵지 않았다. 

에픽게임즈가 제공하는 컨텐츠나 마켓플레이스에서 구매한 컨텐츠를 프로젝트에 추가하려고 할 때 버전이 맞지 않는 경우 다음 방법을 사용한다.

 

 

 

언리얼 엔진 5.3버전에 추가해볼 애니메이션 팩. 5.2버전까지만 지원하는 팩이다.

'프로젝트에 추가'를 클릭한다.

 

 

 

 

기본적으로 에셋이 지원하지 않는 버전은 나타나지 않는다. 

 

'모든 프로젝트를 표시합니다' 체크박스를 클릭한다.

 

 

 

 

5.3버전의 프로젝트를 선택하면 경고 메세지가 나타난다.

버전 선택을 클릭한다.

 

 

 

 

지원하는 버전을 선택했다.

이제 언리얼 엔진 5.3버전에서 해당 애니메이션 팩을 사용할 수 있다.

 

지금은 최대한 비슷한 버전을 사용하는 예를 들었지만 언리얼 4,5 끼리도 에셋에 따라 호환이 가능하기도 하다. 

https://gamecodi.com/7820/%EC%96%B8%EB%A6%AC%EC%96%BC-%EB%A6%AC%EC%86%8C%EC%8A%A4%ED%8C%A9-%EC%84%A4%EC%B9%98%EC%8B%9C-%EC%9D%BC%EB%B6%80-%EA%B2%80%EC%9D%80%EC%83%89%EC%9C%BC%EB%A1%9C-%EB%A0%8C%EB%8D%94%EB%A7%81-%EB%90%98%EB%8A%94%EA%B2%BD%EC%9A%B0

 

world setting 에 streaming 검색

 

Enable streaming 체크 또는 해제

+ Recent posts