Ludens
의 Unreal-Study 자료입니다.폴더를 하나 만들어줍시다. 이름은 User 로 합시다. (뭘로 해도 상관없습니다.)
User 폴더 안에 PlayerCharacter 폴더를 만들어줍시다.
- 우리는 캐릭터에 관련된 것은 모두 이 폴더에 넣을 것입니다.
그리고 '캐릭터'를 클릭합시다.
그렇다면 블루프린트가 생성됩니다. 이름은 'PlayerBP'로 합시다.
- 더블 클릭해서 열어봅시다.
이렇게 둥 떠있는 캐릭터가 나오게 됩니다. 정상이니까 놀라지 않으셔도 됩니다. 트랜스폼 - 위치 에서 z 값을 -88.0 으로 바꿔주면 해결됩니다.
이제 늠름한 캐릭터의 모습을 한 번 봅시다. 그런데 플레이를 하면 우리의 캐릭터가 아닌 고철 덩어리가 뛰어다닙니다.
- 스프링 암 컴포넌트는 카메라와 캐릭터 사이의 거리를 유지시켜주는 역할을 합니다.
- FollowCamera 컴포넌트 - 트랜스폼 에서 x 값을 -200, z 값을 50 으로 바꿔봅시다.
Get Control Rotation 노드의 출력과 Get Forward Vector 노드의 입력은 초기에 하나의 핀으로 되어있을 것입니다.
- 핀을 우클릭하여 '구조체 핀 분할'을 해줍시다.
본래는 입력 축에 대한 설정을 '프로젝트 설정'에서 해주어야 하지만 고맙게도 설정이 되어있습니다. 이를 활용합시다.
- 참고로 위와 같이 앞뒤/좌우 를 나누는 것이 일반적입니다.
참고로 흰 바탕의 Move 항목으로 묶은 것은 전체를 드래그한 후, 우클릭하여 '선택에서 코멘트 생성'을 한 것입니다.
- 편의를 위한 것이니 필수는 아닙니다.
이렇게 하고 플레이 해보면 동작은 없어도 움직이는 것을 확인할 수 있습니다.
캐릭터를 움직일 때와 비슷한 방식이지만 더 간단합니다. 마찬가지로 입력 축에 대한 설정이 되어있으므로 이를 활용해줍시다.
플레이 해보면 마우스를 따라 시점이 잘 움직이는 것을 확인할 수 있습니다.
혹시 뭔가 이상하신 분들이 있다면, CameraBoom 컴포넌트(스프링 암) 에서 카메라 세팅 - 폰 제어 회전 사용이 체크되어있는지 확인해보시기 바랍니다. 체크되어 있지 않다면 체크해주시면 됩니다.
마찬가지로 'Jump 입력 액션'도 본래는 설정해 주어야 하지만 친절한 언리얼이 제공해두었으므로 가져다가 쓰도록 합시다.
이제 점프도 완성입니다! 쉽죠?
지금은 캐릭터의 등밖에 보이지 않습니다. 키보드 입력 방향과 캐릭터 방향을 맞춰줍시다. 이건 더 쉽습니다.
PlayerBP의 캐릭터 무브먼트 컴포넌트 - 캐릭터 무브먼트(회전 세팅) - 무브먼트 방향으로 회전 조정을 체크해줍시다.
그리고 편의상 회전 속도의 z 값을 360에서 400으로 바꿔줍시다.
- 이 항목이 체크 헤제가 되어있다면, 그냥 넘어가시면 됩니다.
우리의 캐릭터인 Kwang_Skeleton 을 선택해줍시다.
- 애니메이션을 적용할 뼈대를 정하는 것이기 때문에 다른 것을 선택하면 애니메이션이 정상적으로 작동하지 않습니다.
다음과 같은 화면에서 우리는 우선 이벤트 그래프에서 작업을 할겁니다.
- 이벤트 그래프에 있는 노드 2개는 쓰이므로 그냥 둡시다.
3가지 변수를 만들어줍시다.
- Speed(플로트) : 캐릭터의 속도를 담을 변수
- IsInAir(부울) : 캐릭터가 지면에 닿아 있는지를 담을 변수
- IsAccelerating(부울) : 캐릭터가 가속 중인지를 담을 변수
추후에 아시게 되겠지만, Speed 변수가 있는데 IsAccelerating 변수가 또 있는 이유는 Run 모드와 Sprint 모드를 구분하기 위함입니다.
- Sprint 와 Run 은 둘 다 IsAccelerating 이 True 지만 Sprint 의 Speed 가 Run 보다 빠릅니다.
최종 애니메이션 포즈는 나중에 연결될 예정입니다. 그냥 둡시다. (어차피 못 지웁니다.)
이제 Basic 을 더블 클릭해 들어가 봅시다. Idle 상태를 먼저 만들겁니다.
좌측 하단의 콘텐츠 드로어를 클릭하여 idle 를 검색하면 다음과 같이 나옵니다.
이를 애니메이션 블루 브린트 내로 드래그 해주면 됩니다.
- 빨간색으로 안된다고 뜨는데 해보시면 됩니다.
이런 식으로 Jog_Fwd 를 검색하여 드래그해서 스테이트 이름을 Run, Sprint_Fwd 를 검색하여 드래그 해서 스테이트 이름을 Sprint 로 해줍시다.
'속력 0보다 크고, 지면에 닿아있고, 가속중이면 Idel 에서 Run 으로 바꾼다' 라는 뜻입니다.
그렇다면 반대는 뭘까요?
- 점프할 때 속력이 올라가는 등 여러 변수를 고려한 속력입니다. 정확하다고는 못하지만 대부분의 상황에서 잘 작동하는 것을 확인하였습니다.
- 애니메이션 모드는 Use Animation Blueprint 입니다.
PlayerBP 에 온 김에 최대 걷기 속도도 조정해줍시다.
- 여기서 Run 속도가 최대 걷기 속도입니다.
캐릭터 무브먼트 - 캐릭터 무브먼트:걷기 - 최대 걷기 속도 를 500 으로 재설정해줍시다.
우리는 Idle/Run/Sprint 애니메이션만 짰기 때문에 점프 시에는 별도의 애니메이션이 발생하지 않습니다. 이제부터 점프 애니메이션을 짜볼겁니다.
우선, PlayerAnimBP 로 돌아와 AnimGraph 에서 Basic 스테이트와 최종 애니메이션 포즈를 끊어줍시다. Basic 스테이트를 다른 것에 연결해야해서 그렇습니다.
- 쉽게 말해, Basic 에서의 상태를 Ground_Loco 에 저장해두는 것이라고 생각합시다. 이 상태를 저장하는 이유는 나중에 어딘가에서 이 상태를 불러와서 사용하기 위함입니다.
- 이 스테이트는 앞서 설명한 캐시 포즈를 불러와서 사용할겁니다.
이제 또 Jump 스테이트 머신 내부로 들어가 세부 애니메이션 출력을 짜볼겁니다.
이번엔 앞서 했던 것처럼 콘텐츠 드로어에서 Jump_start, Jump_Apex, Jump_Land 를 검색하여 각각을 드래그해옵시다. 여기서 각각의 이름은 그대로 사용하되, Jump_Land 의 이름을 Jump_PreLand 로 바꿔줍시다.
- 이후에 Jump_Land 라는 스테이트를 따로 만들어둘 것이기 때문입니다.
그리고 각각을 쭉 이어줍시다.
여기서 주의해야할 점은 스테이트를 이은 후에 스테이트간의 트랜지션이 자동으로 이루어지게 해야합니다.
- 즉, 조건없이 Jump_Start 에서 Jump_Apex 로, Jump_Apex 에서 Jump_PreLand 로 넘어가게 해야합니다.
따라서 트랜지션(화살표 위의 흰 원)을 클릭하여 우측의 '트랜지션' 항목에서 '스테이트의 시퀸스 플레이어에 따른 자동 규칙'을 체크해줍시다.
Jump_Apex 에서 Jump_PreLand 로 넘어가는 트랜지션에도 똑같이 해줍시다.
그 후 Jump_PreLand 스테이트로 들어가서 Jump_Land 시퀸스 플레이어의 세부 설정을 바꿔줄겁니다.
세팅 - 재생 속도 를 0.2로 바꾸고, 애니메이션 루프도 체크 해제해줍시다.
이제 Jumps 세부 설정이 끝났습니다. 다시 Locomotion 스테이트 머신으로 가봅시다!
세팅 - 재생 속도를 1.2로, 애니메이션 루프는 체크 해제해줍시다.
그리고 마지막으로 '애디티브 적용' 노드의 Alpha 값을 0.4로 바꿔줍시다.
하나는 자동으로 이루어지게 합니다.
- 앞서 설명한 것처럼 '트랜지션' 항목에서 '스테이트의 시퀸스 플레이어에 따른 자동 규칙'을 체크하면 됩니다.
나머지 하나는 지면에 닿아있는지 확인해줍시다.