애니메이션 편집기라고 보면 된다.

 

 

메시를 더블클릭해서 들어온 후 해당 메뉴에서 애님 몽타주를 만들면 편집 창으로 들어올 수 있다.

애셋 브라우저에서 애니메이션 몇 개를 끌어오면 연속되어 재생되는것을 확인할 수 있다.

원한다면 애니메이션 세그먼트에서 재생 시간, 재생 속도, 루프 횟수를 조절할 수 있다.

 

 

점프같은 경우는 AnimInstance에서 캐릭터의 상태를 매 틱 체크하는 방식이었지만 반대로 공격은 캐릭터에서 발생 시 AnimInstance에 접근해서 Attack Montage를 실행 시킬 것이다.

 

// MyAnimInstance.h
class TESTUNREALENGINE_API UMyAnimInstance : public UAnimInstance
{
	GENERATED_BODY()

public:
	UMyAnimInstance(); // 생성자 추가

	virtual void NativeUpdateAnimation(float DeltaSeconds) override;

	void PlayAttackMontage(); // 메소드 추가

private:
	// .. 생략
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Pawn, Meta = (AllowPrivateAccess = true))
	UAnimMontage* AttackMontage; // Montage 추가
};

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

// MyAnimInstance.cpp
UMyAnimInstance::UMyAnimInstance()
{
	static ConstructorHelpers::FObjectFinder<UAnimMontage> AM(TEXT("AnimMontage'/Game/Animations/Greystone_Skeleton_Montage.Greystone_Skeleton_Montage'"));

	if (AM.Succeeded())
	{
		AttackMontage = AM.Object;
	}
}

void UMyAnimInstance::PlayAttackMontage() // 실제 Montage 실행부
{
	if (!Montage_IsPlaying(AttackMontage))
	{
		Montage_Play(AttackMontage, 1.f);
	}
}

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

// MyCharacter.cpp
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	// .. 생략
	PlayerInputComponent->BindAction(TEXT("Attack"), EInputEvent::IE_Pressed, this, &AMyCharacter::Attack);
}

void AMyCharacter::Attack()
{
		// MyAnimInstance에 접근
	auto AnimInstance = Cast<UMyAnimInstance>(GetMesh()->GetAnimInstance());

	if (AnimInstance)
	{
    		// 메소드 직접 실행
		AnimInstance->PlayAttackMontage();
	}
}

 

Attack을 바인딩 했으니 당연히 입력에서 Attack을 마우스 왼클릭으로 설정해주면 된다.

 

 

코드 및 AnimGraph를 완성하면 좌클릭시 설정한 애니메이션 몽타주가 재생된다.

+ Recent posts