Example #1
0
void UMyAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
	Super::NativeUpdateAnimation(DeltaSeconds);

	const auto PawnOwner = TryGetPawnOwner();
	if (nullptr != PawnOwner)
	{
		//!< スピード
		const auto Velocity = PawnOwner->GetVelocity();
		Speed = Velocity.Size();

		//!< 方向
		Direction = (Velocity.Rotation() - PawnOwner->GetActorRotation()).Yaw;
		while (Direction < -180.0f)
		{
			Direction += 360.0f;
		}
		while (Direction > 180.0f)
		{
			Direction -= 360.0f;
		}

		//!< 落下
		const auto MovementComp = PawnOwner->GetMovementComponent();
		if (nullptr != MovementComp)
		{
			IsFalling = MovementComp->IsFalling();
		}
	}
}
void UARPG_Character_AnimInstance::NativeInitializeAnimation()
{
	//very inportant line
	Super::NativeInitializeAnimation();

	//Try to get Pawn Owner for tick use
	OwningPawn = Cast<ARPG_ProjectCharacter>(TryGetPawnOwner());
}
void UMyAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
	Super::NativeUpdateAnimation(DeltaSeconds);

	APawn* OwningPawn = TryGetPawnOwner();
	if (OwningPawn)
	{
		Speed = OwningPawn->GetVelocity().Size();
	}
}
void UMyAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
	Super::NativeUpdateAnimation(DeltaSeconds);

	ACharacter* OwningPawn = Cast<ACharacter>(TryGetPawnOwner());
	//const auto MovementComp = OwningPawn->GetMovementComponent(); 
	if (OwningPawn) {
		Speed = OwningPawn->GetVelocity().Size();
		Jump = OwningPawn->GetVelocity().Z;
		isFlying = OwningPawn->CharacterMovement->IsFalling();
	}
}
void UAnimInstance::UnlockAIResources(bool bUnlockMovement, bool UnlockAILogic)
{
	APawn* PawnOwner = TryGetPawnOwner();
	if (PawnOwner)
	{
		AAIController* OwningAI = Cast<AAIController>(PawnOwner->Controller);
		if( OwningAI )
		{
			if (bUnlockMovement && OwningAI->PathFollowingComponent)
			{
				OwningAI->PathFollowingComponent->ClearResourceLock(EAILockSource::Animation);
			}
			if (UnlockAILogic && OwningAI->BrainComponent)
			{
				OwningAI->BrainComponent->ClearResourceLock(EAILockSource::Animation);
			}			
		}
	}
}
void UBaseEnemyAnimInstance::UpdatePawnSpeed()
{
	APawn* Pawn = TryGetPawnOwner();
	if (Pawn) CharacterSpeed = Pawn->GetVelocity().Size();
}