목록분류 전체보기 (71)
Visual Studio
TMap의 키값으로 UObject 객체를 사용할 경우 Raw Pointer나 TObjectPtr 대신 TObjectKey를 사용할 수 있다.근데 공식 문서 어디에도 TMap의 키값으로 TObjectKey를 권장한다는 내용이 없는 걸 보니 무조건 써야 하는 것은 아닌 듯 하다. TObjectKey에는 FObjectKey 타입의 ObjectKey 멤버가 있는데, FObjectKey::ObjectIndex를 먼저 비교하고 동일할 시 FObjectKey::ObjectSerialNumber를 비교한다.어차피 64비트에서는 모든 연산이 64비트로 이뤄지므로 오히려 포인터보다 비교 연산자의 성능이 떨어질 것으로 예상된다.Type Hash를 구하는 과정에서도 포인터 타입은 UE::Private::MurmurFinali..
캡쳐 없는 람다의 경우 대부분의 컴파일러에서는 최적화를 해주기 때문에 static을 붙이건 붙이지 않건 동일하게 동작한다. 다만 명시적으로 한번만 선언되길 원한다면 static으로 선언한다. 캡쳐 있는 람다의 경우에는 static으로 선언한 람다가 캡쳐를 갖고 있다면 실제로 컴파일 되었을 때 non-static 함수보다 최적화의 품질이 떨어져 초기화 할때 사용하는 instruction의 개수가 non-static보다 많게 된다. 따라서 캡쳐되는 변수가 안전하고(정적이며, 스레드 세이프) 해당 람다 함수가 여러번 혹은 지속적으로 호출된다면 static으로 선언하고, 안전하지 않거나 호출 횟수가 적은 경우에는 non-static으로 선언하는 것이 좋다. 다만 캡쳐 있는 static lambda는 해당 변수가..
Delegates FCoreDelegates FCoreUObjectDelegates FWorldDelegates FGameDelegates FEditorDelegates FEditorSupport FLevelEditor OnMapChanged OnLevelEditorCreated OnTapManagerChanged OnTabContentChanged OnActorSelectionChanged OnElementSelectionChanged OnComponentEdited OnTakeHighResScreenShot Engine GEngine GEditor GUnrealEd (GEditor와 동일한 객체, 선언 타입이 다름) Asset, Package IAssetTools IAssetRegistry FPack..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bu4nJL/btsDxzKSWFR/PO9jf58wfeF4UpFuZ7ugk1/img.png)
개요Language Server 방식을 사용하기 이전에는 IDE에서 인텔리센스 플러그인을 구현하기 위해 Parser, Type checker 등인텔리센스에 필요한 기능을 IDE 플러그인 기능이 지원하는 언어로 새로 작성해야 했습니다.Language Server는 이러한 작업을 없애고 IDE에 종속적이지 않은 표준화된 인텔리센스 구현을 위해 제안된 방식입니다.예를 들어, Language Server에 현재 작업중인 문서와 커서의 위치, 액션(자동완성, 정의로 이동 등)을 보내면, Response로 인텔리센스 데이터를 받을 수 있습니다.이 방식을 사용하면 IDE에서 사용하는 플러그인을 구현할 때 Language Server에 Request를 보내고 인텔리센스 데이터를 받아와 화면에 출력하는 코드만 작성하면 ..
UnrealUnreal Object SystemUObject는 nullptr과 비교하지 않고 IsValid를 사용하여 검사한다.UObject를 상속받은 멤버 변수에 raw pointer 대신 TObjectPtr을 사용한다.TWeakObjectPtr는 Raw pointer보다 더 정확한 IsValid 체크를 할 수 있도록 도와준다. 해당 객체가 댕글링되면 nullptr로 세팅된다.Math 관련FVector, FMatrix, FBox, FBoxSphereBounds 등의 수학 클래스들은 기본 생성자에서 명시적으로 멤버 변수를 초기화해주지 않는다. 따라서 생성자 인자로 EForceInit::ForceInit을 넣거나 직접 값을 초기화 해주는 것을 권장한다.Package 관련Package Path: 해당 패키지..
Fast Object Picking | 포프머신 포인터의 확실한 이해 | 고속성장에 필요한 C | 컴퓨터 동작원리의 이해 수백명에게 5.0 만점 리뷰를 받은 초특급 C 언어 인강! POCU 아카데미에서 C 언어를 마스터하세요! blog.popekim.com
nullptr 키워드는 std::nullptr_t 타입의 prvalue 리터럴이다. nullptr는 어떤 포인터 타입이나 멤버 포인터 타입의 null 포인터와도 암시적인 형변환이 가능하며, 매크로 NULL과 같이 타입 std::nullptr_t에 포함되는 값을 가진 어떤 null 포인터 상수와도 암시적 형변환이 가능하다. std::nullptr_t std::nullptr_t는 그 자체로는 포인터 타입이 아닌 별개의 타입이며, null포인터 리터럴인 nullptr의 타입이다. 어떤 포인터 타입이나 멤버 포인터 타입과도 암시적 형변환이 가능하다. sizeof(std::nullptr_t) 는 *sizeof(void ) 과 동일하다. 예제 nullptr가 더이상 리터럴이 아니게 되어도 null 포인터 상수의 의..
Software 버전 관리 규칙, 너만 모르는 Semantic versioning :: 키위남 소프트웨어를 개발하다보면 정말 수많은 규칙들을 세우고 없애고 수정하는 것 같아요. 저도 혼자 개발하고 흡–족 할 때는 이런 규칙과 컨벤션들에 대해 무관심 했었는데, 이제 프로로 데뷔한 kiwinam.com
블루프린트와는 다르게 DefaultSceneRoot가 자동으로 생성되지 않는다. CreateDefaultSubobject로 컴포넌트 생성시 RootComponent가 존재하지 않을 경우, 가장 처음 생성한 컴포넌트가 RootComponent가 된다. 추가로 CreateDefaultSubobject는 생성자에서만 호출 가능하고, NewObject, SpawnActor는 생성자에서 호출하면 안된다. 참고자료 [UE4] 오브젝트 생성 - CreateDefaultSubobject , NewObject, SpawnActor CreateDefaultSubobject , NewObject, SpawnActor 언리얼 엔진에서의 UObject는 오브젝트 프로토입을 기본으로 합니다. 각 UClass는 UObject와 연..