Unreal

17. Jump Animation

Kelvin의 게임개발 2024. 1. 24. 00:01
728x90
반응형

1. Jump

 

Character를 Jump 시키기 위해서 우선 InputAction부터 만들어야 한다

 

Jump같은 경우에는 InputValue가 눌렀는지 안눌렀는지 bool값만 있으면 되기 때문에 Digital (bool)로 ValueType을 지정해준다

 

C++에서 만든 InputAction을 넣어주기 위해 변수로 선언을 해주고 Bind할 함수도 선언 해준다

UPROPERTY(EditAnywhere, Category = Input)
UInputAction* JumpAction;

void Jump(const FInputActionValue& Value);

 

SetupPlayerInputComponent()에서 EnhancedInputComponent로 InputAction에 원하는 함수를 Bind해준다

void ASlashCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent))
	{
		EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Triggered, this, &ASlashCharacter::Jump);
	}
}

 

Jump는 ACharacter에 미리 구현이 되어 있기 때문에 부모클래스의 Jump를 Super::를 이용하여 호출해서 사용할 수 있다

void ASlashCharacter::Jump(const FInputActionValue& Value)
{
	Super::Jump();
}

 

CharacterMovementComponent에는 Jump/Fall에 관한 다양한 설정값이 존재한다 ex) Jump Z Velocity, Air Control Time 등등

 

 

이제 Input Mapping Context에서 원하는InputAction에 원하는Key를 매핑하면 된다 (Jump같은 경우는 Modifier는 필요 없다)

 

 

2. Jump Animation

 

이제 Jump 할 때 Animation을 넣어야 한다

 

Is Falling : Character가 떨어지고 있으면 T, 아니면 F로 결과값 bool로 반환한다

 

bIsFalling = SlashCharacterMovementComponent->IsFalling();

Is Falling() : Character가 떨어지고 있으면 T, 아니면 F로 결과값 bool로 반환한다

 

이제 Jump관련 State를 기존 State와 연결시켜야 한다

 

AnimBP에서 하나의 StateMachine에 너무 많은 State를 만드는건 지양해야 한다 (복잡해진다)

 

따라서 여러개의 StateMachine을 만들고 사용하는게 더 정리하기 좋다

 

AnimBP에서는 Pose Data를 Cache해서 사용할 수 있다 추후에 이 캐시데이터에 접근하여 Pose에 접근할 수 있다

 

이렇게 Use Cache Pose 'CacheDataName' 으로 가져와 사용이 가능하다

 

이런식으로 Pose들을 Cache한 뒤 다양한 StateMachine을 만들고 안에서 사용하면 더 정리가 깔끔해진다

 

새로운 StateMachine을 넣고 OnGround State에는 Idle <-> Run StateMachine의 Pose를 Cache한 Data를 넣어준다

 

InAir에는 Jump하는 AnimSequence를 연결해준다

 

OnGround <-> InAir의 조건에 MovementComponent->IsFalling() 데이터를 가져와 조건을 걸어준다

 

Land할때도 마찬가지로 처리한다

 

이때 Land 후 OnGround로 바로 State를 전환하기 위해서

조건 화살표를 클릭 후 Detail Tab에서 Automatic Rule Based On Sequence Player In State를 True로 체크해주어야 한다

 

마무리로 새롭게 만든 StateMachine을 OutputPose에 연결해준다

 

하지만 이때 Land의 Animation이 너무 길어 착지 후 OnGround State로 전환되어도 Land Animation이 계속 재생될 수 있다

따라서 원하는 부분까지만 Animation을 재생하는 처리를 해주어야 한다

Get Relevant Anim Time : 현재 속해있는 StateMachine의 State에서 재생중인 Animation의 시간을 float으로 반환한다

 

이런식으로 Land -> OnGround()에 조건을 달 수 있다 (Land Animation 0.25초 이상 && GroundSpeed 0이상일 때 OnGround로 그 즉시 넘어가게 한다)

 

이렇게 처리를 한다면 Staet자동 전환이 아니기 때문에 Automatic Rule Based On Sequence Player In State는 false로 체크해주어야 한다

 

State끼리 Transition Rule은 여러개가 존재할 수 있다 (드래그 드랍으로 추가 가능)

 

 

728x90
반응형

'Unreal' 카테고리의 다른 글

19. Collision & Overlap (1)  (117) 2024.01.31
18. IK (Inverse Kinematics)  (109) 2024.01.27
16. Anim Instance  (93) 2024.01.23
15. Animation BP  (89) 2024.01.23
14. The Character Class & Hair And Eyebrows  (214) 2024.01.13