언리얼
-
[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 ..
-
언리얼...17일지 2022. 10. 2. 12:43
언리얼 UI 시스템 언리얼의 UI 시스템은 유니티와 달리 게임 화면에 띄워서 작업하는 게 아닌 새로운 창에서 작업하게 된다. 여기에서 화면 크기를 가정한 사각형에 UI를 띄우고 피벗 등을 조절해 UI를 제작하게 된다. 언리얼 UI 시스템에는 기본적인 버튼, 텍스트, 이미지 같은 구성요소 외에도 각 버튼이나 이미지에 애니메이션을 적용하여 메뉴의 진행을 나타낼 수 있는 기능이 존재한다. ※ 애니메이션을 통해 연결된 클래스의 변수를 세팅할 수도 있으나 순수 블루프린트로 작업하는 게 아니라면 변수는 코드에서 관리하는 게 일관성 유지에 도움이 되고 버그가 발생했을 때 대응하기도 편하다.
-
언리얼...16일지 2022. 10. 1. 15:12
모듈 구성 C++로 프로젝트를 진행하게 되는 경우 필요에 따라 이를 적절하게 묶어 사용할 필요가 있게 된다. 이때, 이를 모듈로 구성하게 되는데 모듈은 언리얼에서 지정한 구성을 따라야 한다. 여기에서 Public 폴더에는 헤더 및 선언이 들어가며 Privtate 폴더에 소스 및 정의가 들어가게 된다. 이후 언리얼 프로젝트 파일을 수정하여 모듈을 프로젝트에 추가하면 에디터에서도 해당 모듈의 폴더를 확인할 수 있게 된다. 언리얼 엔진에서 게임플레이 모듈을 만드는 방법 | 언리얼 엔진 5.0 문서 (unrealengine.com) 게임플레이 모듈 생성 게임의 런타임 모듈을 처음부터 생성하는 방법을 알아봅니다. docs.unrealengine.com
-
언리얼...15일지 2022. 9. 29. 21:15
AIController란? 언리얼에는 액터를 조종하기 위해 Controller라는 계층을 두고 있는데 플레이어의 경우 PlayerController를 통해 입력을 받고 이 입력을 조종하는 캐릭터에 전달해주게 된다. AIController는 AI를 위한 컨트롤러이며 비헤이비어 트리(일명 BT)의 입력을 받아 행동을 하도록 만드는 보조 클래스다. 비헤이비어 트리 기본 BT는 언리얼의 AI 시스템으로 노드를 이용해 AI의 행동 패턴을 구현할 수 있는 비주얼 스크립팅의 일종으로 볼 수 있다. BT의 구성은 AI에 필요한 정보를 공유할 수 있도록 도와주는 블랙보드가 존재하고 이 블랙 보드를 이용해 AI 행동을 결정하는 비헤이비어 트리로 나뉜다. BT의 태스크 실행 시 다음 네 값 중 하나를 반환한다. Aborte..