게임 엔진/Unreal
-
[Unreal/C++] Montage에서 SkeletalMeshComponent 가져오기게임 엔진/Unreal 2024. 2. 24. 16:36
다음과 같이 PreviewMesh를 이용하거나, Skeleton에서 FindCompatibleMesh로 매칭이 되는 스켈라탈 메쉬를 로드하여 가져와 SkeletalMeshComponent에 설정할 수 있다. USkeletalMesh* pPreviewMesh = _pMontage->GetPreviewMesh(); if (pPreviewMesh == nullptr) { pPreviewMesh = _pMontage->GetSkeleton()->FindCompatibleMesh(); } USkeletalMeshComponent* pSkeletalMeshComp = NewObject(); pSkeletalMeshComp->SetSkeletalMesh(pPreviewMesh); if (IsValid(pSkeleta..
-
[Unreal/C++] 런타임에서 몽타주에 노티파이 추가하는 방법게임 엔진/Unreal 2024. 1. 25. 17:20
애니메이션 몽타주 로드 시 다음 코드 실행하면 된다. _pAnimAsset = 대충 애니메이션 로드하는 함수. UAnimMontage* pAnimMtg = Cast(_pAnimAsset); if (pAnimMtg == nullptr) { return; } // 노티파이 추가 int newIndex = pAnimMtg->Notifies.Add(FAnimNotifyEvent()); FAnimNotifyEvent& newEvent = pAnimMtg->Notifies[newIndex]; if (UObject* AnimNotifyClass = NewObject(pAnimMtg, UCustomNotify::StaticClass(), NAME_None, EObjectFlags::RF_Transactional)) {..
-
[Unreal/C++] "Unable to destroy previously allocated sequence instance - this could indicate a memory leak." 에러 처리게임 엔진/Unreal 2023. 6. 17. 18:08
정석적인 방법은 Component 등 플레이 마다 Begin과 End 함수가 항상 동작하는 액터에서 시퀀스 플레이어를 관리하여 Begin에 생성, End에 제거하는 식으로 사용하는 것이다. 코드 참고 - ActorSequenceComponent 코드 참고 - ActorSequenceComponent void UActorSequenceComponent::BeginPlay() { Super::BeginPlay(); if (Sequence != nullptr) { SequencePlayer = NewObject(this, "SequencePlayer"); SequencePlayer->SetPlaybackClient(this); // Initialize this player for tick as soon as ..
-
[Unreal/C++] 애니메이션 State Event 타이밍 이슈 처리게임 엔진/Unreal 2023. 6. 17. 17:17
애니메이션 State Event를 사용하는데, 다른 캐릭터의 이벤트 타이밍이 정상적으로 동작하지 않는다면 다음 옵션이 켜져 있는지 확인 후 해당 애니메이션에서만 옵션을 False로 처리하자. USkinnedMeshComponent::bEnableUpdateRateOptimizations (기본값 : True) 해당 옵션이 활성화 되어 있으면 화면에 표시되는 크기에 따라 애니메이션 업데이트를 늦추게 된다. 일반적인 경우에는 성능을 위해 필요하지만 이벤트가 정확한 타이밍에 발동해야 하는 경우에는 해당 동작에만 이 옵션을 꺼주면 정상적인 동작을 확인할 수 있다. bEnableUpdateRateOptimizations | Unreal Engine Documentation bEnableUpdateRateOptim..
-
[Unreal/C++] 카메라 밖에 있는 액터 애니메이션 노티파이 처리게임 엔진/Unreal 2023. 5. 11. 22:02
USkinnedMeshComponent의 VisibilityBasedAnimTickOption을 OnlyTickPoseWhenRendered에서 다른 옵션으로 변경하면 된다. AlwaysTickPoseAndRefreshBones 애니메이션 실행 후 본 업데이트 및 실제 Transform 변경 AlwaysTickPose 애니메이션 실행 후 본 업데이트 OnlyTickMontagesWhenNotRendered 몽타주 애니메이션 실행 OnlyTickPoseWhenRendered 화면에 보일 때만 모든 업데이트 진행 엔진 코드에 존재하는 옵션에 대한 설명은 다음과 같다. /** Skinned Mesh Animation Tick option based on rendered or not. This dictates ..
-
[Unreal Editor] 프로퍼티에 플래그 조건으로 사용 여부 결정하기게임 엔진/Unreal 2023. 2. 17. 23:06
UPROPERTY의 meta 내부에 EditCondition = "" 으로 사용 여부를 결정할 수 있다. UENUM() enum class ETestEnum { One, Two, }; UPROPERTY(EditAnywhere) ETestEnum TestType; // TestType이 One일 때만 사용(편집 여부) UPROPERTY(EditAnywhere, meta=(EditCondition="TestType == ETestEnum::One")) float SizeNumber; // TestType이 Two일 때만 사용(편집 여부) UPROPERTY(EditAnywhere, meta=(EditCondition="TestType == ETestEnum::Two")) FString SizeDescripti..
-
[Unreal 5] C++에서 이펙트 Looping 체크 방법게임 엔진/Unreal 2022. 12. 21. 19:09
Particle System에서 Looping 체크 방법 UParticleSystemComponent->Template->IsLooping() 으로 체크. Niagara에서 Looping 체크 방법 불가능. ※ UNiagaraComponent->GetAsset()->IsLooping()이 있으나 함수 내부가 구현되어 있지 않다. IsLooping 꼬라지 bool IsLooping() { return false; } 참고문헌 UParticleSystemComponent | Unreal Engine Documentation UParticleSystemComponent A particle emitter. docs.unrealengine.com UParticleSystem::IsLooping | Unreal E..
-
[Unreal 5/C++] 애니메이션 스테이트 노티파이 사용 방법게임 엔진/Unreal 2022. 9. 24. 18:04
애니메이션 스테이트 노티 파이 사용 방법 애니메이션 스테이트 노티파이 애니메이션 그래프에서 스테이트를 클릭해 디테일 창을 확인하면 노티 파이를 확인할 수 있다. 이 노티 파이는 스테이트에 들어오는 순간, 스테이트에서 나가는 순간, 애니메이션 블랜딩 완료 시에 적용된 노티파이를 호출하게 된다. 노티파이 이벤트 사용 방법 스테이트 이름을 "Noti"라고 한다면 다음과 같은 노티파이 이벤트를 생성해야 한다. 즉, "AnimNotify_"가 설정한 이름 앞에 붙어야 한다. 만약 설정한 스테이트 노티파이 이름이"AnimNotify_Noti"라면 "AnimNotify_AnimNotify_Noti"라는 이름의 이벤트로 노티가 발생하게 된다. ※ C++ 함수로 이벤트를 만드는 것도 동일하게 설정된 이름 앞에 AnimN..