애니메이션을 섞는다.

 

 

생성시 스켈레톤을 선택한다.

 

 

 

각각의 애니메이션을 축에 맞게 배치 후, Shift를 눌러서 이동시켜보면 배치한 애니메이션들이 적절하게 섞이는것을 확인할 수 있다.

 

 

// MyAnimInstance.h
private:
    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Pawn, Meta = (AllowPrivateAccess = true))
    float Horizontal;

    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Pawn, Meta = (AllowPrivateAccess = true))
    float Vertical;

// ------------
// MyAnimInstance.cpp
void UMyAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
		// .. 생략
		auto Character = Cast<AMyCharacter>(Pawn); // ACharacter에서 AMyCharacter로 변경
		if (Character)
		{
			IsFalling = Character->GetMovementComponent()->IsFalling();

			Vertical = Character->UpDownValue; // 추가된 코드
			Horizontal = Character->LeftRightValue; // 추가된 코드
		}
}

// ------------
// MyCharacter.h
public: // 따로 Get 메소드를 만들기 귀찮아서 public으로 열어둠
	UPROPERTY()
	float UpDownValue = 0;

	UPROPERTY()
	float LeftRightValue = 0;


// ------------

// MyCharacter.cpp
void AMyCharacter::UpDown(float Value)
{
	//UE_LOG(LogTemp, Warning, TEXT("UpDown %f"), Value)

	UpDownValue = Value;
	AddMovementInput(GetActorForwardVector(), Value);
}

void AMyCharacter::LeftRight(float Value)
{
	//UE_LOG(LogTemp, Warning, TEXT("LeftRight %f"), Value)

	LeftRightValue = Value;
	AddMovementInput(GetActorRightVector(), Value);
}

 

 

블렌드 스페이스, 코드 추가, 스테이트 수정까지 완료하고 나면 이동 애니메이션이 방향에 따라 적절하게 섞인것을 볼 수 있다.

ADAD 연타를 하거나 대각선끼리 이동시 부자연스러움이 느껴지는데 이부분은 Interpolation Time을 0.1정도 줘서 자연스럽게 만들어 줄 수 있다.

 

 

애니메이션 처리는 서버에 넘길 필요없이 클라에서 처리하면 되는 기술이다.

 

참고로 블렌드 스페이스 1D는 축이 하나이다.

+ Recent posts