Lyra프로젝트를 보다 보면 거의 모든 cpp 클래스 생성자에 ALyraCharacter(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); 위처럼 되어 있는것을 볼 수 있습니다. FObjectInitislzier클래스는 무엇이며 생성자의 인자로 왜 전달하는 것인지 궁금하여 정리하게 되었습니다. UE 포럼에도 비슷한 글이 있었습니다. 생성자에 'FObjectInitializer'이거 왜쓰냐? 무슨 차이냐? 라는 질문인데 https://forums.unrealengine.com/t/do-i-have-to-use-fobjectinitializer-in-constructor/363383/3 Do I have to use FObje..
자주사용하는 URPOPERTY안에 들어가는 Attribute들... GC에 의해 관리가 되도록 UPROPERTY를 붙이고 BlueprintReadOnly, Category정도만 생각없이 쓰다가 최근에 Lyra클론 코딩하면서 다양한 속성값들을 쓰게 되었고 아무 생각없이 쓰다 답답하여 글을 한번 정리하게 되었습니다. 공식문서를 봐도 아키타입? 어쩌구 저쩌구 하던데 머선 말인지 잘 모르겠어서 여러 글을 참고하다 이해하게 되어 따로 정리 하게 되었습니다. 일단 아키타입과 인스턴스가 뭔지 결론 부터 보면은 아래 MyTestActor라는 cpp클래스를 상속받은 블루프린트 클래스가 BP_MyTestActor(아키타입)이고 Level에 배치한 BP_MyTestActor는 BP_TestActor의 인스턴스입니다. UCL..
GetOuter()란? NewObject를 사용할 일이 생겨 NewObject함수를 보다가 첫번째 인자로 GetOuter()가 무엇인지 궁금하여 찾아 보게 되었습니다. 공식문서를 보면 "Returns the UObject this object resides in"이라고 되어 있습니다. 뭔가 느낌적인 느낌으로 자신이 소유하는 UObject를 반환한다고 생각이 가기는 합니다. 이를 이해하기 위해 바로 코드부터 보겠습니다. MyTestActor.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyTestActor.generated.h" UCLASS() class TESTSTUDY_API AMyTestActor ..
렌더링 파이프 라인이란?3차원으로 만들어진 모델(Texture, Material, Animation, Geometry 등등)을 2차원 스크린 좌표계까지 투영하는 과정의 프로세스를 자세하게 표현한 것입니다. 컴퓨터의 메모리에 존재하는 3D Resource가 모니터에 출력되는 과정이 렌더링 파이프 라인을 따르게 됩니다.초록색 부분은 Fixed Function(고정 단계) : 미리 정해진 특정한 연산들만 수행이 가능하고, 실행 시점에서 기능은 바꿀 수 없지만 상태 객체라는 개념을 이용하여 설정들의 변경이 가능합니다. 빨간색 부분은 Programmable 단계로 HLSL로 shader 프로그래밍이 가능한 단계. 렌더링 파이프라인의 핵심 5단계는 IA(Input Assembler) - VS(Vertex Shade..
공식 문서를 읽어보면 UClass::StaticClass는 "return a object representing this class at runtime"이라고 합니다. 즉 런타임에 클래스를 나타내는 UClass 객체를 반환 한다고 되어 있습니다. 그럼 UClass객체는 뭔지부터 살펴보기 전에 언리얼을 '프로퍼티 시스템' 혹은 '리플렉션'에 대해서 먼저알아 보도록 하겠습니다. 리플렉션(Reflection)이란? 프로그램 실행시간에 자기 자신을 조사하는 기능입니다. C++에서는 해당 기능을 지원하지 않기 때문에 언리얼에서 자체적으로 만든 시스템입니다. 프로퍼티 시스템이라고도 불립니다. 해당 기능은 언리얼 에디터의 디테일 패널, 직렬화, GC, Network Reflication, 블루프린트/C++ 커뮤니케이..
이번글은 C++의 스마트 포인터에 대한 글입니다. 스마트 포인터 C++이후에 나온 언어들을 보면은 C#, JAVA 등등은 '가비지 컬렉터'라고 불리는 '자원 청소기'가 내장되어 있습니다. 프로그램 상에서 더이상 사용하지 않는 자원들을 자동으로 해제 해주기 때문에 사용자가 굳이 메모리 해제를 일일히 신경쓰면서 작업할 필요가 없습니다. 하지만 우리의 C++의 경우 이딴건 지원을 하지 않습니다! (이게 매력인거 같습니다) 그래서 스마트 포인터를 사용하는데 스마트 포인터를 사용하는 가장 큰 이유는 'RAII'때문입니다. Resource Acquisition Is Intialization이라는 말인데요 '오브젝트와 자원 획득과의 초기화를 같이한다(생명주기를 같이한다)'라는 말입니다. (따라서 모든 스마트 포인터는..
이번글은 union 키워드에 대한 간단한 글입니다! union union이란? A union is a special class type that can hold only one of its non-static data members at a time. 라고 합니다! 해석하면 한번에 하나의 non-static 데이터 멤버를 가질 수 있다고 합니다. 약간 카멜레온을 생각해주시면 될거같습니다. 어쩔때는 A였다가 어쩔때는 B였다가 하는 식으로요(저는 이렇게 이해했습니다) 아니면 키워드 그대로 '연합체'느낌으로 받아 드리셔도 될거같습니다. 우리는 하나의 연합체다ㅎㅎ 그래서 메모리도 공유한다. 또한 union은 다른 데이터 멤버중에 가장큰 크기를 가지는 데이터 타입의 크기를 할당받습니다. 바로 예시코드를 보면서 이..
해시 테이블 이번글은 뻐꾸기 해싱(Cuckoo Hashing)에 대한 글입니다! 해시 테이블의 핵심은 '해싱'입니다. '해싱'이란 각각의 주어진 데이터를 최대한 고유한 숫자 값으로 표현하여 나중에 해당 데이터의 유무를 확인하거나 해당 데이터에 대응하는 원본 데이터를 추출 하는 작업입니다. 그리고 주어진 데이터로 부터 고유한 숫자 값을 계산하는 함수를 '해시 함수'라고합니다. 그래서 해시 함수를 무엇을 정하느냐에 따라 해시 함수를 통해 나오는 '해시 값'이 각기 달라지겠지만 가장 일반적인 방법으로는 입력 받은 데이터 : x 가 있을 때 (x % n)으로 '해시 값'을 반환합니다. 이런 방법으로 해시 맵을 구성하여 데이터를 넣다보면 n이 7이라 가정을 했을 때 x가 3, 10 순으로 들어오게 된다면 (x %..