애셋 참조 강참조는 오브젝트 A가 오브젝트 B를 참조하여 A로드 시 B도 로드되게 한다. 약참조는 오브젝트 A가 오브젝트 B를 경로같은 문자열 형태로 참조하게 만드는 형태이다. 직접 프로퍼티 참조 애셋 참조의 가장 흔한 경우는 UPROPERTY 매크로를 통해 노출시키고 디자이너가 해당 애셋에 블루프린트나 월드 인스턴스를 통해서 지정한다. /** construction start sound stinger */ UPROPERTY(EditDefaultsOnly, Category=Building) USoundCue* ConstructionStartStinger; 생성 시간 참조 오브젝트 생성시 프로퍼티를 일부분으로 설정하는 방식이다. ConstructorHelpers 클래스를 사용하여 생성 단계 도중 오브젝트와..
코어 리디렉트 개발도중 클래스, 프로퍼티, 함수, 이름 등을 변경해야할 경우가 있을때, 코어 리디렉트(Core Redirect)를 사용하여 문제를 해결한다. DefaultEngine.ini 파일에 구성된다.(플러그인은 플러그인이름.ini파일) [CoreRedirects]섹션에 배치된다. 지원하는 코어 리디렉트 유형 ClassRedirects 폐기된 기존 UClass를 새 UClass를 가리키도록 변경 OldName = (필수)폐기된 UClass 이름 NewName = (필수)새 UClass 이름 MatchSubstring = (옵션)true인 경우 OldName이 부분문자열로 일치해도 동작 OverrideClassName = (옵션)true인 경우 이전 클래스의 기존 인스턴스는 새 클래스로 리매핑을 해야..
비동기 애셋 로딩 (Asynchronous Asset Loading) UE4에서 애셋 비동기 로딩을 쉽게 하기 위한 신규시스템이 도입되었다. 데이터 로드 및 참조에 사용되는 방법은 일반적으로 두가지가 있다. FSoftObectPath와 TSoftObjectPtr FSoftObjectPath는 애셋의 전체이름이 저장된 스트링이있는 구조체이다. 애셋의 참조 정보와 생성 메소드들을 포함한다. 에디터에서는 UObject처럼 표시된다. TSoftObjectPtr은 FsoftObjectPath를 감싸는 TWeakObjectPtr 이다. 에디터 UI에서 특정 클래스만 선택되게끔 제한하도록 하는 역할. 블루프린트에서 애셋의 SoftReference로 표시 애셋 레지스트리와 오브젝트 라이브러리 애셋 레지스트리는 애셋에 ..
Assert assert는 코드의 검증 도구이다. 언리얼 엔진에서는 검증을 위한 매크로 시리즈가 제공된다. 메크로를 확인하려면 아래의 파일에서 찾아볼 수 있다 /UE4/Engine/Source/Runtime/Core/Public/Misc/AssertionMacros.h 런타임 어서트 매크로는 다음과 같은 3가지 종류가 있다. 실행 중지 (DO_CHECK) 디버그 빌드에서 실행 중지 (DO_GUARD_SLOW) 실행 중지하지 않고 오류 보고 (DO_CHECK) check(표현식) 표현식의 결과가 false인 경우 실행을 중지한다. 가장 간단한 형태의 매크로 check(Mesh != nullptr) check(bInitialized); checkf(표현식, ...) check와 동일하지만 표현식의 결과가 f..
C++14 C++ 14의 새로운 기능들을 정리하고자 한다. 1. Binary literal Binary literal은 2진법 숫자를 나타내는 표기법이다. 기존의 16진수 앞에 0x가 붙은것처럼 2진수 앞에는 0b가 붙는다. 또한 ' 문자로 숫자를 구분지을 수 있다. int b = ob110; // 6; int b2 = 0b1111'1111 2. Generic lambda C++11 까지는 lambda 함수의 인자타입이 명시적으로 적었어야했다. 람다 함수의 인자는 auto 키워드를 가질수 없어서 인자타입마다 람다 함수를 모두 만들어야 했다. auto intAdd = [] (int a, int b) -> int { return a + b; } auto floatAdd = [] (float a, float ..
C++ 11 C++ 11에서 추가된 기능들을 정리하고자 한다. 1. auto 컴파일 시에 자동으로 타입을 정해주는 키워드 auto i = 10; // i는 int 타입 auto l = 10L; // i는 long 타입 auto* pi = &i; // i는 int* 타입 auto* pc = new MyClass(); //pc는 MyClass* 타입 iterator를 사용할 때 간략화 하기 좋다. std::list::iterator iter = m_list.begin(); auto iter = m_list.begin(); 2. lambda (람다) 이름 없는 함수, 함수 객체 자리에 함수 자체를 직접 구현 가능하며 함수 포인터처럼 사용도 가능하다. bool compare(const int& A, const ..
05. 컴퓨터 아키텍처와 운영체제 컴퓨터는 어떻게 프로그램과 메모리를 조직적으로 관리할까? 컴퓨터 아키텍처(Computer Architectur)는 컴퓨터의 여러 구성 요소를 배치하는 방법을 뜻한다. 기본적인 구조 요소들 컴퓨터 구조의 대표적인 두가지는 폰 노이만(von Neumann)구조와 하버드(Harvard)구조 이다. 두 구조의 유일한 차이는 메모리 배열이다. 폰노이만 구조는 데이터 버스와 주소버스가 하나 뿐이라서 동시에 명령어와 데이터를 가져올수 없다. 그래서 약간 더 느리다. 하버드 구조는 동시에 명령어와 데이터를 둘다 가져올수 있어서 좀 더 빠르지만 두 번째 메모리를 처리하기 위한 버스가 더 필요하다. 프로세서 코어 멀티 프로세서(multiprocessor) 시스템은 단일 CPU보다 더 좋은..
04. 컴퓨터 내부 구조 컴퓨터 하드웨어는 어떻게 구성되는가 현대적 컴퓨터는 크게 메모리(Memory), 입출력(intput and output), CPU(central processing unit) 세가지 부분으로 나눌 수 있다. 메모리 컴퓨터에서 조작할 비트들을 저장할 장소를 메모리라고 부른다. 입력과 출력 컴퓨터에 정보를 전달하거나 컴퓨터에서 정보를 가져올 방법을 입력과 출력이라 부른다. 이들은 컴퓨터 주변에 위치하여 주변장치(peripheral device)라고 부른다. 중앙 처리 장치 중앙 처리 장치(CPU)는 실제 계산을 처리하는 컴퓨터 부품이다. 산술 논리 장치 ALU(arithmetic logic unit)은 CPU의 핵심 부품이다. ALU는 산술 계산, 불리언 대수 및 기타 연산을 수행한..
01. 컴퓨터 내부의 언어체계 컴퓨터는 어떤 말을 사용할까? 언어는 정보를 소통하기 위해 만들어졌다. 프로그래머는 컴퓨터에게 명령을 내리는 사람이다. 사람이 컴퓨터의 말을 배워서 컴퓨터에게 명령을 내린다. 언어란 무엇인가 모든 언어의 뜻은 기호들의 집합으로 인코딩(encoding) 된다. 언어가 제대로 동작을 하려면 의사소통하는 당사자들이 모두 같은 문맥(context)을 공유해서 같은 기호에 같은 뜻을 부여해야 된다. 문자 언어 문자언어는 기호를 나열한 것이다. 기호를 정해진 순서대로 나열하여 단어를 만들 수 있다. 비트 자연어에서는 문자(character)라고 부르는 것을 컴퓨터에서는 비트(bit)라고 부른다. 비트는 2진법의 바이너리(binary)와 숫자의 디지트(digit)가 합쳐진 말이다. 비트..
렌더링 파이프라인 (Rendering Pipeline) 파이프라인의 모든 단계는 Direct3D API를 사용하여 구성할 수 있으며, HLSL 언어를 사용하여 프로그래밍 가능하다. 일반적으로 VS(Vertex Shader)단계와 PS(Pixel Shader)단계에서 사용된다. 1. 입력 어셈블러 (Input Assembler) 메모리에 사용자가 채워놓은 기본데이터(삼각형, 선, 점)를 다른 파이프라인 단계에서 사용하기 위한 기본 형식으로 조립하는 단계 2. 꼭지점 셰이더 (Vertex Shader) 변환(Transformation), 스키닝(Skinning), 조명(Vertex Lighting) 등의 작업을 수행한다. 이중 변환 작업 과정에 대해 좀더 설명하자면, [오브젝트 공간] -> 월드 변환 -> ..
절차지향과 객체지향 절차 지향 프로그래밍 (Procedure Programming) Top-Down 방식으로 접근하며 순차적인 처리가 중요시 되어 프로그램이 전체적으로 연결되도록 만드는 프로그래밍 기법이다. 대표적인 절차지향 언어는 C언어가 있다. 함수로 부터 데이터를 받아서 기능을 구현하는 방식으로 진행된다. 절차적 프로그래밍 이라는 말이 더 정확하다. 코드의 가독성이 좋고, 실행속도가 빠르다는 장점이 있지만, 유지보수 및 디버깅이 어렵다. 객체지향 프로그래밍 (Object Oriented Programming) Bottom-Up 방식으로 접근하며, 데이터와 절차를 하나의 덩어리(Object)로 묶어서 처리한다. 모듈화 및 캡슐화로 유지보수에 용이하며, 코드의 재사용성이 높다. 처리속도가 상대적으로 느..
알고리즘 정렬 알고리즘 (Sorting Algorithm) [ Bubble Sort, Heap Sort, Merge Sort, Quick Sort, Insert Sort ] Bubble Sort 서로 인접해 있는 두 원소를 비교하며 정렬하는 알고리즘이다. 0번 인덱스 부터 n-1번 인덱스까지 모든 인덱스를 비교하면 정렬 시간복잡도는 O(n^2) Heap Sort 데이터를 바이너리 힙 자료구조에 담아서 최대값이나 최소값부터 하나씩 꺼내서 정렬하는 알고리즘이다. 시간 복잡도는 O(nlogn) Merge Sort Divide and conquer 의 원리로 원소 한개씩 나누어 결합(Combine) 과정에서 원소끼리 비교후 정렬되어 임시 배열에 저장하고, 정렬이 다되면 임시배열을 복사하여 결과 목록을 만든다. ..