애님인스턴스 h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Animation/AnimInstance.h"
#include "AnimEnum.h"
#include "CharacterAnimInst.generated.h"
/**
*
*/
UCLASS()
class SLASHOPENWORLD_API UCharacterAnimInst : public UAnimInstance
{
GENERATED_BODY()
private:
const int MaxIdleCnt = (int)ECharacterState::IDLE_MAX;
const float IdleChangeTime = 3.f;
float CurIdleTime = 0.f;
public:
// 첫번째 상태는 Idle 상태
UPROPERTY(BlueprintReadWrite)
ECharacterState CurState = ECharacterState::IDLE_BREATHE;
public:
virtual void NativeBeginPlay() override;
virtual void NativeUpdateAnimation(float DeltaSeconds) override;
private:
void RunIdleRandomly();
};
애님인스턴스 cpp
#include "CharacterAnimInst.h"
#include "Utility.h"
#include <Kismet/KismetMathLibrary.h>
void UCharacterAnimInst::NativeBeginPlay()
{
Super::NativeBeginPlay();
}
void UCharacterAnimInst::NativeUpdateAnimation(float DeltaSeconds)
{
Super::NativeUpdateAnimation(DeltaSeconds);
CurIdleTime += DeltaSeconds;
auto owningActor = GetOwningActor();
FVector velocity = owningActor->GetVelocity();
if (velocity == FVector::ZeroVector)
RunIdleRandomly();
}
void UCharacterAnimInst::RunIdleRandomly()
{
auto tmpState = CurState;
// Idle 타이머 설정
if (CurIdleTime >= IdleChangeTime)
{
CurIdleTime = 0.f;
// 기존 Idle 애니메이션 중복 방지
while (tmpState == CurState)
{
// Idle 애니메이션이 무조건 0번째로 온다는 보장이 없기에
tmpState = (ECharacterState)UKismetMathLibrary::RandomIntegerInRange((int)ECharacterState::IDLE_BREATHE, (int)ECharacterState::IDLE_MAX);
}
CurState = tmpState;
GEngine->AddOnScreenDebugMessage(0, 1.f, FColor::Red, Utility::EnumToFString(CurState));
}
}
결과) 1%가 부족한 느낌이다 왜냐하면 애니메이션이 중간에 끝났을 시 처음부터 재생하지 않는다.
언리얼 Idle 애니메이션 무작위 실행 - YouTube
'게임엔진 > Unreal' 카테고리의 다른 글
[Unreal] UENUM에서의 비트마스크 사용 (0) | 2023.07.06 |
---|---|
[Unreal] UENUM 명칭 주기 (애님 블루프린트) (0) | 2023.07.06 |
[Unreal] enum 타입을 FString 형태로 변환 (0) | 2023.06.11 |
[Unreal] 캐릭터가 바라보는 방향으로 회전 및 이동하기 (0) | 2023.05.14 |
[Unreal] Could not find NetFxSDK install dir; 오류 해결 (0) | 2023.04.23 |