- 애니메이션 블루프린트 제작
https://jjpearl.tistory.com/39?category=1070610
데이터를 관리하는 애님 인스턴스를 C++로 작성했다.
* 원래 BlendSpace2D를 사용해 Direction에 따라 애니메이션들을 blend 하려 했었으나
나의 캐릭터는 컨트롤 회전을 따라 이동하고, 메쉬가 움직이는 방향을 따라 돌아가게 하는
"GetCharacterMovement()->bOrientRotationToMovement = true" 를 사용하고 있기 때문에
Direction을 구하는 의미가 없다.
그래서 폰의 Speed 값만 이용하는 BlendSpace1D를 사용하였다.
추후 폰의 Direction 진행방향 각도값을 알고싶을 때 다음 함수를 사용하면 된다.
CalculateDirection(const FVector& Velocity,const FRotation& BaseRotator)
CurrentPawnDir = CalculateDirection(Pawn->GetVelocity(), FRotator(0.0f, Pawn->GetControlRotation().Yaw, 0.0f)); // pawn의 진행방향 구하는 코드
- 캐릭터 점프기능(Space bar) 구현
1. 플레이어 컨트롤러 : 점프 입력 바인딩 / 점프 구현
ACharacter 클래스에는 Jump 멤버함수가 있어 입력과 바인딩 할 수 있다.
이 함수를 Jump입력과 연동하면 바로 캐릭터의 점프 기능이 완성된다.
- 점프 높이 조절 : GetCharacterMovement()->JumpZVelocity = 450.0f;
2. 애님 인스턴스 : 캐릭터 무브먼트 컴포넌트의 IsFalling()
캐릭터가 점프 중 / 땅 위에 있는지 정보를 폰의 무브먼트 컴포넌트에서 얻어올 수 있다.
폰의 무브먼트 컴포넌트는 다음 함수들을 제공하는데 이 기능들을 제대로 구현한건 캐릭터가 사용하는 캐릭터 무브먼트 컴포넌트 뿐이라 캐릭터에서만 사용 가능.
- IsFalling() : 현재 공중에 떠있는지
- IsSwimming()
- IsCrouching() : 현재 쭈그리고 앉아있는지
- IsMoveOnGround() : 땅 위에서 이동중인지
애님 인스턴스에 해당 값을 저장할 변수를 생성 후 값을 얻어와 애님 그래프에 전달.
3. 애니메이션 블루프린트 : 스테이트 머신
점프를 JumpStart,JumpLoop,JumpEnd 스테이트로 나눴다.
해당 스테이트에 알맞는 애니메이션이 각각 없었기 때문에
하나의 점프 애니메이션을 각각의 스테이트에 맞게 잘라서 사용했다.
- Ground -> JumpStart : IsFalling()이 true일 때
- JumpStart -> JumpLoop : JumpStart 애니메이션의 남은 재생 시간이 0.1초 미만 일 때
- TimeRemaining(ratio) 노드는 스테이트 애니메이션의 남은 재생시간을 반환
- JumpLoop -> JumpEnd : IsFalling()이 false 일 때
- JumpEnd -> Ground : JumpEnd 애니메이션 남은 재생 시간이 0.45초 미만일 때
- 애니메이션 시퀀스 자르기
- 잘라서 사용하고 싶은 애니메이션 수 만큼 원본 애니메이션 복제.
- 애니메이션 시퀀스 에디터에서 사용하고 싶은 모션의 프레임을 제외하고 타임라인 우클릭 - 시퀀스 편집 - 프레임 ~에서 ~제거를 클릭.
- 편집 후 저장.
- 캐릭터 빨리 달리기(Sprint) 기능(shift키) 구현
점프와 마찬가지로 플레이어 컨트롤러에 입력 바인딩해 구현.
캐릭터의 속력 조정은 GetCharacterMovement()->MaxWalkSpeed 값을 조정하면 된다.
Blend Space와 함께 사용.
'Unreal Engine > [UE4] RPG Project' 카테고리의 다른 글
6. Dedicated Server 네트워킹 - Anim Montage이용한 플레이어 무기 모드 변경 기능 RPC (0) | 2022.07.07 |
---|---|
5. Dedicated Server 네트워킹 - Sprint 기능 Replication (0) | 2022.07.01 |
4. 캐릭터 콤보공격, 플레이어 입력구조 변경(플레이어 컨트롤러-폰 구조) (0) | 2022.01.15 |
2. 언리얼엔진의 PlayerCameraManager / 캐릭터 회전(ControlRotation) (0) | 2022.01.11 |
1. 플레이어 컨트롤러에서 캐릭터 Input 입력 바인딩하기 (0) | 2022.01.10 |