본문 바로가기

728x90
728x90

unrealengine

언리얼 엔진 5 데이터 테이블과 FInstancedStruct: 다형성 끝판왕 설계 가이드 데이터 기반 게임 설계에서 "데이터 테이블(Data Table)"은 이미 필수 도구입니다. 하지만 전통적인 데이터 테이블은 한 가지 구조체(Struct)만을 기반으로 하기에, 다양한 타입의 데이터를 한 테이블에서 다루고 싶을 때 유연성이 떨어지는 한계가 있었죠. 언리얼 엔진 5의 FInstancedStruct를 활용하면 이 한계를 극복해, 진정한 다형성 데이터 테이블을 구현할 수 있습니다.데이터 테이블의 기본 구조와 한계언리얼 엔진의 데이터 테이블은 특정 구조체(FTableRowBase 상속)를 기반으로 하며, 각 행(Row)이 해당 구조체의 인스턴스가 됩니다. 예를 들어 무기, 아이템, 적 정보 등 다양한 게임 데이터를 테이블 형태로 관리할 수 있습니다.하지만, 예를 들어 아이템마다 속성이 다르거나(무.. 더보기
C++ 개발 생산성 극대화! 기본값을 지원하는 Getter/Setter 자동 생성 매크로 (수정 및 개선) 개발 효율을 높여줄 팁을 들고 왔습니다. 특히 C++ 개발, 그중에서도 언리얼 엔진(Unreal Engine)을 다루시는 분들이라면 주목해주세요! 반복적인 코딩 작업을 줄여주고 생산성을 확 끌어올려 줄 Getter/Setter 자동 생성 매크로에 대해 이야기해보려 합니다. 왜 이 매크로가 필요할까요?C++로 개발하다 보면 멤버 변수를 선언하고, 그에 대한 Getter/Setter를 만드는 작업은 정말 흔하죠. 여기에 언리얼 엔진에서는 UPROPERTY 매크로를 이용해 변수 속성을 지정하고, 기본값까지 설정해야 합니다. 이 모든 과정을 매번 손으로 타이핑하는 건 시간 낭비이자 오타 발생의 주범이 될 수 있습니다.오늘 소개해 드릴 매크로는 Getter/Setter 자동 생성을 중점적으로 다룹니다. 멤버 변.. 더보기
🎮 [언리얼 엔진 5] FGameplayTag에서 특정 단어 포함 여부 확인하는 방법 언리얼 엔진 5에서 FGameplayTag를 사용할 때, "Character.Status.Dead"와 같은 태그 문자열에서 "Dead"라는 **세그먼트(단어)**가 포함되어 있는지를 확인하고 싶은 경우가 종종 있습니다.이번 포스팅에서는 Unreal Engine 5에서 FGameplayTag의 내장 함수만을 활용한 방법과, 안전한 문자열 기반 방법까지 두 가지를 소개해드립니다.✅ 목표예를 들어, FGameplayTag 값이 다음과 같다고 가정합니다.Character.Status.Dead 이때 "Dead"라는 단어가 이 태그에 포함되어 있는지를 확인하고 싶은 상황입니다.✅ 방법 1. MatchesTag() 함수 사용 (전제 조건 있음)FGameplayTag는 자체적으로 계층 구조 기반 비교를 지원합니다.Ma.. 더보기
🎮 [언리얼 엔진 5] UWorldSubsystem에서 파라미터 복제(Replicate) 구현 방법! 언리얼 엔진 5에서 UWorldSubsystem 안의 변수를 복제(Replicate)하는 방법을 소개드릴게요.UWorldSubsystem은 일반적인 액터가 아니라서 DOREPLIFETIME 같은 복제 매크로가 직접 적용되지 않아요. 그래서 약간의 우회적인 방식으로 구현해야 합니다. 아래 내용을 따라 해보시면 쉽게 구현하실 수 있어요 😊✅ 왜 UWorldSubsystem에서 복제가 어렵나요?UWorldSubsystem은 AActor가 아니기 때문에:DOREPLIFETIME 사용 불가bReplicates 같은 속성 없음네트워크를 통해 직접 복제 불가따라서 복제를 위해서는 복제 가능한 별도의 액터를 만들어서 그 액터를 통해 데이터를 주고받는 방식으로 우회합니다.✅ Step 1. 복제 가능한 액터 생성하기AA.. 더보기
언리얼 엔진 5 (UE5) FRotator → FQuat 변환 방법 언리얼 엔진 5(UE5)에서 FRotator를 **FQuat(Quaternion, 사원수)**로 변환하는 방법을 소개해드립니다.1. FRotator를 FQuat로 변환하기 (C++ 코드)아래 코드에서는 FRotator를 FQuat로 변환하는 방법을 보여줍니다.FRotator Rotation(0.0f, 90.0f, 0.0f); // 예제 회전 값 (Pitch, Yaw, Roll)FQuat QuatRotation = Rotation.Quaternion(); // FQuat 변환// 변환된 FQuat 값 출력 (디버깅 용도)UE_LOG(LogTemp, Log, TEXT("Quat: X=%f, Y=%f, Z=%f, W=%f"), QuatRotation.X, QuatRotation.Y, QuatRotation.Z.. 더보기
언리얼 엔진 5에서의 스윕 테스트 함수들: SweepMultiByObjectType, SweepTestByObjectType 언리얼 엔진 5 (UE5)에서 충돌 감지와 관련된 다양한 스윕 테스트 함수들이 있습니다. 이번 글에서는 SweepMultiByObjectType, SweepTestByObjectType, 그리고 SweepTestByProfile 함수에 대해 알아보겠습니다.1. SweepMultiByObjectTypeSweepMultiByObjectType 함수는 월드에 대한 스윕 테스트를 수행하여 지정된 객체 유형과의 모든 초기 겹침을 반환합니다. 이 함수는 게임 월드에서 여러 객체와의 충돌이나 겹침을 감지하는 데 특히 유용합니다.사용 방법스윕 형태: 월드를 통해 스윕 할 형태(구, 상자, 캡슐 등)를 정의합니다.시작 및 종료 지점: 스윕의 시작 지점과 종료 지점을 지정합니다.객체 유형: 겹침을 확인할 객체 유형을 정의.. 더보기
"Warning: FNetGUIDCache::SupportsObject: PhysicsConstraintComponent" 오류 해석 및 해결 방법 in 언리얼5 오류 발생 원인:Unreal Engine에서 "PhysicsConstraintComponent"는 네트워크 복제(replication)를 지원하지 않는 구성 요소입니다. 이 구성 요소는 두 개의 강체의 움직임을 제한하는 데 사용되며, 네트워크 환경에서 모든 클라이언트에 동일하게 동작하도록 복제하기에는 복잡하고 성능 문제를 일으킬 수 있습니다. 해결 방법:불필요한 복제 방지:모든 클라이언트에서 동일하게 동작해야 할 필요가 없는 경우, 해당 구성 요소의 복제를 비활성화합니다.클라이언트에서 로컬 물리 시뮬레이션을 통해 구성 요소의 동작을 모방할 수 있습니다.구성 요소 단순화:더 간단한 조인트 유형을 사용하거나 제약 조건의 수를 줄여 구성 요소를 단순화합니다.현실감과 네트워크 성능 사이의 균형을 찾기 위해 다양.. 더보기
missing a MarkArrayDirty on element add/remove 경고 해결 in 언리얼 5 안녕하세요 "missing a MarkArrayDirty on element add/remove?" 라고 경고 로그가 나오는 경우 해결법입니다. Unreal Engine의 FFastArraySerializer와 관련된 문제입니다.이 오류는 요소를 추가하거나 제거한 후 배열의 상태가 제대로 표시되지 않을 때 발생합니다. 다음은 고려해야 할 몇 가지 주요 사항입니다: Marking Items Dirty : 배열에 항목을 추가하거나 업데이트할 때는 해당 항목에 대해 MarkItemDirty를 호출해야 합니다.Marking Array Dirty: 배열에서 항목을 제거할 때는 MarkArrayDirty를 호출해야 합니다. 이렇게 하면 배열의 상태가 올바르게 업데이트되고 복제됩니다. 다음은 간단한 예제입니다:// .. 더보기

728x90
728x90