일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 티스토리챌린지
- operator new
- 게임
- 예외
- UE4
- 영화
- 참조자
- exception
- Smart Pointer
- 루아
- reference
- lua
- 오블완
- implicit conversion
- resource management class
- c++
- 상속
- 영화 리뷰
- 스마트 포인터
- 메타테이블
- 암시적 변환
- 비교 함수 객체
- 반복자
- more effective c++
- 다형성
- Effective c++
- virtual function
- effective stl
- 언리얼
- Vector
- Today
- Total
목록UE4 (33)
스토리텔링 개발자
개요 언리얼 엔진에 있는 타입을 크게 나눠보면 아래와 같습니다. UObject를 위시하는 클래스 타입 구조체 타입 이 중 2번, 구조체에 대해서 정리해 보았습니다. 구조체의 선언 선언부는 UObject 기반 클래스와 같습니다. GENERATED_BODY() 매크로로 리플랙션 관련 함수들을 추가 생성자 선언 / 정의 USTRUCT() struct FTempStruct { GENERATED_BODY() public: FTempStruct() {} }; 구조체와 클래스의 차이 구조체를 사용하는 이유는 UObject 클래스가 구조체보다 무겁기 때문입니다. 구조체에서는 대표적으로 아래와 같은 기능들을 제공하지 않습니다. 가비지 컬렉팅 불가 구조체는 가비지 컬렉션의 관리를 받지 않습니다. 즉, 동적 할당을 한 경우..
개요 언리얼에서 레벨은 맵을 의미합니다. 엄밀하게는 맵과 맵 위의 모든 오브젝트들을 포괄하는 상위 오브젝트입니다. 어떤 오브젝트의 Outer 체인을 타고 올라가다 보면 반드시 그 끝에선 레벨 오브젝트를 만나게 된다는 뜻입니다. [UE4] 상위 객체 (Outer / Owner / AttachParent) 개요 이런 저런 객체들을 다루다 보면 의아할 때가 있습니다. 그러니까 객체들의 상위에 있는 객체가 분명한 네이밍인데 네이밍이 여러개일 때요. 저의 경우 Outer와 Owner가 굉장히 헷깔렸습니다. delightlane.tistory.com 다수의 레벨 구성 게임 전체의 맵과 오브젝트를 표현하기엔 단 하나의 레벨로는 무리입니다. 게임 내에 존재하는 그 수많은 오브젝트를 하나의 레벨에 담아 관리하는 건 부담..
개요 언리얼에는 각기 여러 상위 객체들이 있습니다. 네이밍 만으론 헷깔리기 때문에 각각을 한번 구분해서 정리해 보았습니다. 각 상위 객체 Outer(UObjectBase) Outer는 굉장히 친숙합니다. NewObject 함수의 인자 이름입니다. 그리고 이는 오브젝트의 부모 객체를 의미합니다. 모든 오브젝트(UObject)는 관리를 위해서 트리 형태로 연결되어 있습니다. 패키지 - 월드 - 레벨 - 각 액터들 이렇게 이어두면 첫 번째로 순회가 편해집니다. 패키지 내의 모든 오브젝트를 순회하려면 차례 차례 타고 내려가기만 하면 되기 때문입니다. 직렬화, 즉 패키징 순회도 이 트리 구조를 순회합니다. [UE4] 직렬화 [UE4] 직렬화 직렬화 객체 직렬화란 객체를 바이트화 하여 메모리, 데이터베이스, 파일 ..
개요 메모리에 이슈가 있어 최적화가 필요할 때, 쉽게 떠올릴 수 있는 방법은 텍스쳐의 품질을 낮추는 것입니다. 하지만 무턱대고 저품질 텍스쳐를 사용하면 비주얼적으로 만족스럽지 않습니다. 상황에 따라서 고품질과 저품질을 취사선택할 수 있다면 좋을 것 같습니다. 그리고 밉맵의 역할이 바로 그것입니다. 텍스쳐 스트리밍 시스템 언리얼에서는 텍스처 스트리밍 시스템(스트리머)이 밉맵 기능을 제공합니다. 가용 메모리를 효율적으로 관리하면서 시각적인 퀄리티를 보장해줍니다. 좀 더 자세히 알아보도록 하겠습니다. 밉맵(Mipmap) 텍스쳐 스트리밍 시스템은 밉맵(혹은 Mips (밉))들로 텍스쳐 메모리를 관리합니다. 여기서 밉맵이란 무엇일까요. 밉맵이란 텍스처 해상도에 따라 미리 계산된 이미지 시퀀스들을 뜻합니다. 비유하..
개요 게임에는 수많은 오브젝트들이 배치됩니다. 하지만 그 배치된 오브젝트들이 늘 그려질 필요는 없을 것입니다. 전혀 노출되지 않는 오브젝트까지 매번 계산하여 그리는 건 낭비이기 때문입니다. 이렇게, 필요 없는 상황에 렌더링을 하지 않게 하는 기법을 컬링이라고 합니다. 액터의 바운드 그려지지 않는 액터를 구분하기 위해서는, 우선 액터가 카메라의 시야에 있는지 없는지를 체크하기 위한 기준이 필요합니다. 액터는 컬링(가시성 테스트)을 위해 (박스형 + 구형)의 바운드 세트를 가지고 있습니다. 각각은 다음과 같습니다. 구형 바운드 간단한 거리 테스트에 사용합니다. 박스형 바운드 액터의 본 모양에 가까운 형태로 설정되어, 좀 더 정밀한 테스트에 사용합니다. 컬링의 종류 컬링이 필요한 상황은 각양각색입니다. 아래는..
개요 언리얼은 오브젝트 생성에 대한 다양한 방법을 제공합니다. 어떤 상황에서 어떤 메소드를 사용하는 것이 좋을까요? 오브젝트 생성 오브젝트를 생성하는 대표적인 메소드들입니다. ActorSpawn / NewObject 생성자에서는 사용할 수 없습니다. 일반적으로 BeginPlay에서 사용합니다. CreateDefaultSubobject 생성자에서만 사용 가능합니다. 생성자의 매개변수인 FObjectInitializer를 전달해야 하기 때문입니다. 즉, 해당 함수로 오브젝트를 생성하려면 사용할 수 있는 FObjectInitializer가 있어야 합니다. 오브젝트는 서브 오브젝트(혹은 컴포넌트)로 생성됩니다. 각각은 생성자에서 사용하느냐, 아니냐로 구분됩니다. NewObject의 매개변수 NewObject 메..
개요 언리얼의 리플렉션에 대해 정리하겠습니다. 리플렉션이란 위키백과에서는 리플렉션을 아래와 같이 정의합니다. 런타임 시점에 사용되는 자신의 구조와 행위를 관리(type introspection)하고 수정할 수 있는 프로세스를 의미한다. 즉, 자신의 정보를 런타임에 해석하고 활용할 수 있는 기능 이라 할 수 있습니다. 예를 들어보겠습니다. 변수 enum을 string으로 가져오고 싶을 때. 클래스 인스턴스가 특정 함수를 가지고 있는지 string으로 확인하고 싶을 때. 클래스 인스턴스의 클래스 이름에 어떤 문자열이 포함되어 있는지 확인하고 싶을 때. 언리얼 리플렉션 시스템 리플렉션 기능은 엔진에서 제공하는 기능입니다. 엔진에서 리플렉션을 지원하는 시스템이 언리얼 프로퍼티 시스템 혹은 언리얼 리플렉션 시스템..
개요 언리얼에서 클래스 멤버 변수에 프로퍼티 매크로가 붙어있는 것은 일반적인 형태입니다. 예컨대 아래와 같은 용도들로 활용되기 위해서 사용합니다. 블루프린트에서 사용하기 위해서. 혹은 가비지 컬렉션에 수집당하지 않게 하려고. 기타등등. 이렇게 다양한 기능으로 확장해주는 프로퍼티에 대해 알아봅니다. 매크로 함수 이번에 다룰 프로퍼티(UPROEPRTY())는 매크로 함수 중 한 종류입니다. 그러므로 우선 매크로 함수에 대해 알아보겠습니다. 언리얼 엔진은 아래와 같은 매크로 함수들을 제공합니다. UENUM() 마킹된 enum의 리플렉션 정보 수집 UCLASS() 마킹된 class의 리플렉션 정보 수집 USTURCT() 마킹된 struct의 리플렉션 정보 수집 UFUNCTION() 마킹된 함수의 리플렉션 정보 ..