게임 엔진
-
[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..
-
[Unity] 유니티 에셋 권한 관리 방법게임 엔진/Unity 2022. 10. 7. 23:08
에셋 권한 관리 방법 험블 번들 등 외부에서 에셋을 구입해 유니티에 등록하는 경우 My Assets에 구입한 에셋이 보이지 않는 경우가 존재한다. 보통 에셋에 수량 제한이 존재하는 경우 발생하는데, 이 경우 Dashboard에서 수량을 자신의 계정에 부여해야 한다. 에셋 스토어 - 우 상단 바둑판 - Dashboard 순서로 들어가면 아래와 같은 사이트가 나오는데, 유니티 계정으로 로그인하면 관리 화면으로 넘어갈 수 있다. 이후 사이트 메뉴에서 Projects - Unity Teams Seat Management에 들어가면 프로젝트 별로 시트(수량)를 관리하는 창으로 넘어가게 된다. 나타난 사이트의 좌측 메뉴에서 조직 - 에셋 관리로 들어가면 드디어 구입한 에셋을 모두 확인할 수 있게된다. 마지막으로 사..