시작하며 코드에서 UI 로직을 만들려고 할 때 블루프린트에서 디자인한 위젯을 제어하려할때 BindWidget meta 지정자를 이용하여 제어할 수 있다. BindWidget 예제 UPROPERTY(BlueprintReadWrite, meta = (BindWidget)) class UTextBlock* TextName; UPROPERTY(BlueprintReadWrite, meta = (BindWidget)) class UImage* ImgIcon; 정작 UPROPERTY 공식문서에서는 없지만 UI개발시 가장 많이 사용하는 태그이다. 블루프린트에 동일한 클래스와 동일한 이름을 가진 위젯이 있다면 해당 위젯포인터로 코드(C++)에서 런타임에 엑세스 할 수 있다. 적용 방법 #pragma once #inclu..
Unreal Engine TTuple 개요 언리얼 엔진에서 TTuple을 사용하려 하는데 공식 가이드 문서도 없고(API 페이지만 있음) 마땅한 참고 예제가 없어 정리하고자 한다. Tuple은 2개이상의 값을 하나의 변수에 담기 위해 사용된다. 예제 // 선언과 초기화 TTuple TupleTest(1, TEXT("Test")); TTuple TupleTest2 = MakeTuple(2, TEXT("Test2")); //값 대입 TTuple TupleTest3; TupleTest3.Key = 3; TupleTest3.Value = TEXT("Test3"); TTuple TupleTest4; TupleTest4.Get() = 4; TupleTest4.Get() = TEXT("Test4"); TTuple T..
카오스 물리엔진 리지드 바디 시뮬레이션 (Rigid Body Simulation) 콜리전 디텍션 (Collision Detection) 피직스 컨스트레인트 (Physics Constraints) 비동기 쿼리 (Async Query) 랙돌 (Ragdoll) 비히클 (Vehicle) 카오스 디스트럭션 (Destruction) 카오스 클로스 (Cloth) 언리얼 엔진 5의 카오스 피직스 PhysX 에서 달라진 부분 비동기 물리 시뮬레이션 지원 (실험 기능) Double Precision 지원 (Origin Shift 미지원) 낮은 프레임율에서의 안정성 개선, 길게 연결된 체인의 안정성 개선 PhysX 비주얼 디버거 미지원 (새로운 물리 디버깅 도구 지원 예정) 리지드 바디의 피직스 타입 기본 (Default)..
프로파일링 Stat UnitGraph CPU, Draw, RenderThread 중 어디서 병목현상이 발생하는지 GameThread에 집중해서 최적화 진행 / 쉐이더 컴파일을 미리하는 PSO(Pipeline State Object) 캐시 진행 Unreal Insight 어떤 Thread 나 어떤 Scope에서 병목현상이 나는지 확인할 수 있다. 주요 Trace 채널 CPU LoadTime GPU Net 데디케이티드 서버 멀티플레이 테스트 Nullrhi (Null Rendering Hardware Interface) rendering 없이 클라이언트 실행 Nullrhi 옵션을 통해 로컬에서 8인 멀티플레이 테스트 최적화 핵심전략 White List : 필요한 기능을 필요한 시간에만 필요 없는 Module,..
언리얼 서밋 2022 언리얼 서밋 내용들중 모듈형 게임플레이 세션의 내용들을 정리하고자 한다. 게임플레이 프레임워크 언리얼 엔진의 인터랙티브 경험 제작 가상 세계를 정의하는 언리얼 엔진 표준 게임 피처 플러그인 런타임 플러그 앤 플레이 지원 기능 명세서 / 엔진에 창작자 의도 설명 플러그인 상태 설치됨 / 등록됨 / 로드됨 / 활성화 활성화 / 비활성화로 게임플레이 조절 액션 동작 리스트 : 활성화시 실행 기본 지원 동작 4가지 / 확장 가능 치트 : 치트 매니저 + 치트 매니저 확장 컴포넌트 : 액터 + 액터 컴포넌트 데이터 레지스트리 : 추가 데이터 레지스트리 데이터 레지스트리 소스 : 데이터 레지스트리 확장 게임 피처 에셋 매니저 : 활성화 시 엔진에 등록할 콘텐츠 모듈형 게임플레이 제작 지원 기능..
개요 프로퍼티의 메타데이터 지정자 중에 GetOptions 항목에 대해 알아 보자. GetOptions: FName이나 FString 속성에 대해 에디터 환경에서 텍스트 상자대신 드롭다운을 생성하는 기능 드롭다운의 내용은 함수의 결과값으로 채워진다. 함수는 에디터에서 블루프린트를 열 때 한번 호출되고, 사용자가 드롭다운을 클릭할 때마다 호출 된다. 사용 방법 GetOptions 지정자 다음에 함수명을 지정한다. 함수는 FName 또는 Fstring의 배열값을 반환해야 한다. UPROPERTY(EditAnywhere, meta = (GetOptions="GetElementalOptions")) FString Elemental; UFUNCTION() TArray GetElementalOptions() { r..
시작하며 에디터 모드(PIE)에서는 정상적으로 동작되었지만 릴리즈 모드 에서는 아이콘이 적용되지 않는 이슈가 발생하였다. 따라서 해당 이슈 분석 결과를 기록하고자 한다. 에디터모드 vs 릴리즈모드에 따른 SoftObjectPtr의 IsValid 함수 사용 이슈 TSoftObjectPtr를 이용하여 애셋을 참조하는 경우 다음과 같이 조건 처리하였다. TSoftObjectPtr WeaponIcon = GetWeaponIcon(WeaponType); if( WeaponIcon.IsValid()) { FString IconPath = WeaponIcon.ToString(); //IconPath로 아이콘 리소스 교체 중략 } 위 코드 결과 TSoftObjectPtr의 IsValid 함수 사용 시 모드에 따라 결과..
기즈모란? 에디터에서 레벨에 배치된 액터를 선택하면 선택한 액터 중심에 기즈모(Gizmo)가 출력된다. 해당 기즈모를 통해 위치, 크기, 회전 등을 조절할 수 있다. 엔진 코드 문득 어떻게 기즈모의 코드가 궁금하여 검색을 해보았는데 Gizmo를 검색어로 아무리 찾아보아도 찾을 수 없었다. GizmoComponent가 있었으나 해당 코드는 아니였다. 결론부터 말하자면 레벨 에디터의 선택 오브젝트에 대한 기즈모 코드는 "UnrealWidget.h" 파일의 FWidget 클래스로 구현되어 있었다. 왜 클래스 명이 FWidget인지는 모르겠지만 한동안 찾아 헤매었는데 까먹지 않기 위해 기록해 놓자. 렌더 관련 레벨 에디터에서 기즈모가 렌더되는 코드부분이 궁금하여 찾아보았다. "UnrealWidgetRender...
시작하며 에디터에서 액터, 캐릭터 등을 설정할 때 입력한 데이터가 유효한지 확인이 필요할 때가 있다. 이럴 때 데이터 유효성 검사 기능을 통하여 확인 할 수 있다. 기능 활성화 데이터 유효성 검사 기능은 기본적으로 활성화 되어있으며 편집(Edit) > 플러그인(Plugins)를 선택하고 플러그인 메뉴에서 Data Validation 이 활성화 되어있는지 확인한다. 사용자 정의 데이터 유효성 검사 UObject에는 IsDataValid 가상함수가 정의되어있다. 해당 함수를 오버라이드 하여 원하는 데이터 유효성 조건을 처리할 수 있다. //.h #if WITH_EDITOR virtual EDataValidationResult IsDataValid(TArray& ValidationErrors) override..
시작하며 언리얼 엔진에서는 블루프린트에서도 integer 변수를 비트마스크로 선언하는 기능을 지원한다. 최적화를 위해 사용했던 바이너리 플래그를 블루프린트에서도 편하게 사용할 수 있다. Enum 정의 블루프린트 타입을 사용하기 위해 BlueprintType 지정자를 입력하고, 추가적으로 메타데이터 지정자에 Bitflags를 입력하여 비트플래그 Enum 이 되도록 한다. 블루프린트에서 Integer 타입을 비트마스크 열거형으로 사용하고자 한다면 UseEnumValuesAsMaskValuesInEditor를 true로 입력한다. 한가지 팁을 더 말하자면 에디터에서 열거자 표시시 첫값과 마지막 값은 표시가 되지 않기때문에 정의에서 첫값과 마지막값을 정의하여 모든 열거자가 노출될 수 있도록 한다. UENUM(B..
시작하며 화면에 가득찬 이미지를 설정하는데 게임 해상도에 따라 종횡비율이 변경되지 않기를 희망하고자 한다. 종횡비를 고정한 방법에 대해 기록하고자 한다. 예시 Overlay 슬롯에 가득찬 Image를 추가하였다. 게임 해상도에 따라 이미지가 늘어나는 것을 확인할 수 있다. 종횡비 고정 처리 Image를 Size Box으로 래핑 해주고, 그 Size Box를 Scale Box로 래핑 한다. Scale Box와 Size Box의 조합으로 원하는 비율을 고정 할 수 있다. Scale Box의 스트레칭 옵션으로 상하 혹은 좌우만 늘릴 것인지 상하좌우 모두 늘릴것인지 설정 할 수 있다. Size Box의 Width와 Height Override를 입력해서 원하는 사이즈를 가지도록 설정하고 Scale Box의 슬롯..
시작하며 게임을 개발하다보면 특정 방향을 기준으로 회전된 벡터값을 구하거나 두 개의 방향벡터 사이의 각을 구해야 할 경우가 있다. 예제 코드를 기록하여 기억해 두고자 한다. 예시 캐릭터가 바라보는 방향을 기준으로 Z축 기준 +-30 각도의 방향 벡터를 구해보자. 코드 //회전된 방향 계산 FVector Forward = GetActorForwardVector(); Forward.Normalize(); FVector LeftDirection = Forward.RotateAngleAxis(-30.0f, FVector::UpVector); FVector RightDirection = Forward.RotateAngleAxis(30.0f, FVector::UpVector); //두 벡터 사이의 각도 float ..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.