Base/Unreal C++ 46

비트 필드

구문 : 정수형식(열거형 포함) 변수명 : 차지하는 비트 수비트필드로 선언된 변수는 정수형식(uint8, uint16, ...)이 차지하는 공간을 연속하는 비트필드가 공유하여 사용할 수 있음ex) uint8 bExample : 1; 의 경우에는, uint8의 메모리 영역 내부의 각 1bit씩 배치됨8개의 변수를 비트필드를 사용하지 않고 bool 변수로 선언했을 경우, 1byte(8bit) * 8 = 8byte(64bit)의 메모리 공간이 필요하나, 비트필드를 활용한다면 1byte(8bit) 공간 안에 8개의 bool 변수를 담을 수 있게 된다이는 각각 8칸, 16칸, 32칸의 크기를 가진 "정수 형(int)" 모양을 가진 상자들이라고 볼 수 있다uint8은 8칸 짜리 박스이므로 안에 최대 8개의 1비트 ..

Base/Unreal C++ 2024.11.13

Singleton

여러 곳에서 동일한 인스턴스를 사용하고자 할 때 주로 사용됨대부분의 RPG게임이나 정적인 데이터가 많은 게임에서 매우 유용하고 편리한 방식싱글톤 패턴을 따르는 클래스는 여러개일 수 있음. 각각의 싱글톤 클래스의 인스턴스가 하나인 것이 중요 싱글톤 클래스는 UObject를 상속받아서 만든다이게 언리얼 스타일 싱글톤 클래스임 싱글톤 클래스를 UObject를 상속받아 만들 시의 장점메모리 관리UObject를 상속받으면 가비지 컬렉션 시스템이 관리해줌에디터 지원UObject를 상속받으면 블루프린트로 확장하거나 편집이 가능해짐반자동 생성UObject 기반이면 GEngine->GameSingleton 같은 곳에 쉽게 등록 가능안전성UObject는 언리얼 엔진이 알아서 메모리를 해제해주므로 메모리 누수의 걱정이 적음..

Base/Unreal C++ 2024.10.10

전방 선언

클래스의 존재만을 미리 선언해놓는 방식해당 클래스의 구체적인 정의나 구현은 필요 없지만, 포인터나 참조로 사용할 때 주로 사용됨컴파일 성능을 높이고 불필요한 의존성을 줄이기 위한 테크닉이며, 큰 프로젝트에서 유용함 장점컴파일 속도 향상 : 전방 선언은 클래스의 정의를 실제로 가져오는 것이 아니므로, 헤더 파일을 추가할 때보다 컴파일 시간이 훨씬 빠름헤더 파일 간의 의존도 감소 : 불필요한 헤더 간의 의존성을 줄일 수 있어서, 코드 간의 의존성이 낮아지고 유지보수가 쉬움 단점제한적인 사용 : 전방 선언으로는 포인터나 참조로만 사용 가능하고, 실제 클래스 멤버나 메서드를 사용할 수 없음. 만약에 멤버나 메서드를 사용하기 위해서는 #include가 필요추가적인 구현 파일에서의 #include 필요 : 전방 선..

Base/Unreal C++ 2024.09.26

Event

Dynamic Multicast Delegate와 기능적으로 유사Dynamic Multicast Delegate의 특징이벤트보다 유연한 바인딩/해제 관리가 가능동적인 바인딩/해제가 많이 발생하는 로직에 유용함의도적으로 특정한 상황에서 더 안정적으로 작동하도록 설계됨 안정성이벤트는 외부에서 델리게이트에 접근해 임의로 바인딩을 추가하거나 제거하는 것을 방지할 수 있음이벤트는 의도적으로 중요한 게임 이벤트를 관리하도록 설계되었으므로, 외부에서 실수로 이벤트를 해제하거나 중복 호출하는 등의 예기치 않은 상황을 방지함의도적인 사용 목적특정 시스템 이벤트를 처리할 때, 더 명확하고 안전하게 사용할 수 있음일반적으로 "중요한 게임 이벤트"를 전달하는 용도로 설계되어, 코드의 가독성이 높아지고 의도한 게임플레이 구조를..

Base/Unreal C++ 2024.09.26

클래스 불러오기

ConstructorHelpers::FClassFinder 클래스변수이름(TEXT("경로"))ConstructorHelpers::FObjectFinder도 마찬가지임생성자에서만 사용 가능클래스를 찾는 데 사용됨하드 레퍼런스를 사용하므로, 로드 경로에 있는 자산이나 클래스가 반드시 존재해야 함사용 사례클래스가 반드시 있어야 하는 경우 / 즉시 해당 클래스를 찾아서 로드해야 할 때 유용특정 위젯, 캐릭터 블루프린트, 컴포넌트 등을 미리 로드해서 게임이 시작되자마자 바로 사용할 수 있어야 하는 경우 클래스변수이름 = LoadClass(nullptr, TEXT("경로"))LoadObject 도 마찬가지임클래스를 지연 로드(Lazy Loading) 방식으로 로드클래스가 필요한 시점에 동적으로 로드할 때 사용런타임..

Base/Unreal C++ 2024.09.20

World, Level

언리얼에서 모든 게임 컨텐츠의 기초는 World 에서부터 시작됨World는 Level로 이루어져 있고,Level은 World에서 독립적으로 행동하는 단위 오브젝트인 Actor의 묶음으로 구성되어 있음Actor는 Component들로 구성되어 있음위와 같이 생성된 계층 구조는 설계에 따라 관리 방식이 2가지로 나뉨기본서브오브젝트(Static) 방식으로 관리Actor : 설계자가 지정한 컴포넌트의 조합에 따라, 월드에서 스스로 동작하도록 설계되어 있음. 그러므로 액터는 컴포넌트와 함께 생성하고, 다 같이 소멸하는 것이 효과적임런타임에서 실시간으로 생성하는(Dynamic) 방식으로 관리World Setting / GameMode : 상황에 따라 플레이어가 플레이 하는 게임 모드가 바뀔 수 있으므로, 방장이 게..

Base/Unreal C++ 2024.09.19

액터 오브젝트에 컴포넌트 부착

헤더 파일에서 변수 생성이 예시에서는 TObjectPtr로 전방선언 생성자에서 컴포넌트 생성하여 액터에 부착CreateDefaultSubobject로 컴포넌트 생성생성한 컴포넌트를 SetupAttachment로 어디에 붙일지 정함SetupAttachment생성자에서 호출해야 함부모 컴포넌트의 자식 계층으로 설정 AttachToComponent해당 컴포넌트의 Owner Actor가 RootComponent가 있는 상태생성자에서 사용하지 않음부모 컴포넌트의 자식 계층으로 설정

Base/Unreal C++ 2024.09.19

Culling

게임에는 수많은 오브젝트들이 배치되는데, 이 배치된 오브젝트들이 노출되기 전에는 그려져 있을 필요가 없다전혀 노출되지 않는 오브젝트까지 매번 계산하여 그리는 건 낭비이기 때문이렇게, 필요없는 상황에 렌더링을 하지 않게 하는 기법을 Culling이라고 함그려지지 않는 액터를 구분하기 위해서는, 액터가 카메라의 시야에 있는지 없는지를 체크하기 위한 기준이 필요액터는 컬링(가시성 테스트)을 위해, "박스형 + 구형" 의 "바운드 세트" 를 갖고 있음구형 바운드 : 간단한 거리 테스트에 사용박스형 바운드 : 액터의 본 모양에 가까운 형태로 설정되어, 좀 더 정밀한 테스트에 사용됨Dynamic Occlusion다른 오브젝트에 가려져서 보이지 않는 오브젝트들을 컬링실시간으로 가려졌는지 확인하므로, 자원을 많이 소모..

Base/Unreal C++ 2024.09.19