24.10.17 애니메이션 인스턴스 업데이트 내용입니다.
애님인스턴트로 빼는것보다 기본생성자로 변수를 재정의 하여 사용하는것이 더 용이하다고 판단되어 사용하지 않습니다.
이 애니메이션 인스턴스는 MyCharacter의 자식 클래스인 EDR_Boss_Giant에서 사용될 애니메이션들을 가지고 있습니다.
Anim_EDR_AnimInstance.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
//
#include "CoreMinimal.h"
#include "Animation/AnimInstance.h"
#include "Anim_EDR_AnimInstance.generated.h"
/**
*
*/
UCLASS()
class EDR_API UAnim_EDR_AnimInstance : public UAnimInstance
{
GENERATED_BODY()
public:
UAnim_EDR_AnimInstance();
virtual void NativeUpdateAnimation(float DeltaSeconds) override;
// 몽타주 실행 함수
void PlayAttackMontage();
void PlayDeathMontage();
private:
UPROPERTY(EditAnyWhere,BlueprintReadOnly,Category = Pawn, Meta=(AllowPrivateAccess = true))
float CurrentPawnSpeed;
// 애니메이션 몽타주 저장할 변수
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Attack, Meta = (AllowPrivateAccess = true))
UAnimMontage* AttackMontage;
UPROPERTY()
TObjectPtr<class UAnimMontage> DeathMontage;
};
반응형
Anim_EDR_AnimInstance.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "Anim_EDR_AnimInstance.h"
#include "GameFramework/Character.h"
#include "GameFramework/PawnMovementComponent.h"
UAnim_EDR_AnimInstance::UAnim_EDR_AnimInstance()
{
CurrentPawnSpeed = 0.0f;
// 공격 애니메이션 몽타주 저장
static ConstructorHelpers::FObjectFinder<UAnimMontage> ATTACK_MONTAGE(TEXT("/Game/GJ/Animation/Enemy_Anim/GiantEnemy/JumpingAttack_Montage.JumpingAttack_Montage"));
if (ATTACK_MONTAGE.Succeeded())
{
AttackMontage = ATTACK_MONTAGE.Object;
}
static ConstructorHelpers::FObjectFinder<UAnimMontage>DEATHANIM(TEXT("/Game/GJ/Animation/Enemy_Anim/GiantEnemy/Death1_Montage.Death1_Montage"));
if (DEATHANIM.Succeeded())
{
DeathMontage = DEATHANIM.Object;
}
}
void UAnim_EDR_AnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
Super::NativeUpdateAnimation(DeltaSeconds);
auto Pawn = TryGetPawnOwner();
if (::IsValid(Pawn))
{
// 폰의 속력값 받아오는 함수
CurrentPawnSpeed = Pawn->GetVelocity().Size();
}
}
// 공격 애니메이션 실행 함수
void UAnim_EDR_AnimInstance::PlayAttackMontage()
{
if (!Montage_IsPlaying(AttackMontage))
{
GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Yellow, TEXT("qqAnimPlay"));
// 애니메이션 플레이
Montage_Play(AttackMontage, 1.0f);
}
}
// 사망 애니메이션 실행함수
void UAnim_EDR_AnimInstance::PlayDeathMontage()
{
if (!Montage_IsPlaying(DeathMontage))
{
GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Yellow, TEXT("qqAnimPlay"));
// 애니메이션 플레이
Montage_Play(DeathMontage);
}
}
DeathMontage는 EDR_Boss_Giant의 사망 애니메이션을 담는 객체입니다.
EDR_Boss_Giant의 체력이 0이 되었을 때 DeathMontage를 실행하는 함수를 추가하였습니다.
'Unreal Engine 5 > EDR_Project' 카테고리의 다른 글
EDR_Project / Character (1) (4) | 2024.10.17 |
---|---|
EDR_Project / EDR_Boss_Giant (0) | 2024.10.17 |
EDR_Project / Attack (10) | 2024.10.17 |
EDR_Project / AnimInstance (0) | 2024.10.17 |
EDR_Project / CanAttack (0) | 2024.10.17 |