UObject 인스턴스 생성

게임플레이 코드에서 오브젝트의 새 인스턴스, 즉 UObject 생성 메서드입니다.

Windows
MacOS
Linux

NewObject

NewObject() 는 가장 단순한 UObject 팩토리 메서드입니다. 옵션 outer 오브젝트와 클래스를 받은 다음 자동 생성된 이름으로 인스턴스를 새로 만듭니다.

template< class T >
T* NewObject
(
    UObject* Outer=(UObject*)GetTransientPackage(),
    UClass* Class=T::StaticClass() 
)

파라미터

설명

Outer

옵션. 생성중인 Object 에 대한 Outer 로 설정할 UObject 입니다.

Class

옵션. 생성될 Object 의 클래스를 나타내는 UClass 입니다.

반환값

지정된 클래스의 스폰된 인스턴스로의 포인터입니다.

NewNamedObject

NewNamedObject()NewObject() 를 확장하여 새 인스턴스의 이름은 물론 오브젝트 플래그 과 템플릿 오브젝트를 인수로 지정할 수도 있습니다.

template< class TClass >
TClass* NewNamedObject
(
    UObject* Outer, 
    FName Name, 
    EObjectFlags Flags = RF_NoFlags, 
    UObject const* Template=NULL
)

파라미터

설명

Outer

생성중인 Object 에 대한 Outer 로 설정할 UObject 입니다.

Name

Object 에 대한 Name 으로 설정할 FName 입니다.

Flags

옵션. 새 Object 를 설명하는 FObjectFlags enum 값입니다.

Template

옵션. 새 Object 생성시 템플릿으로 사용할 UObject 입니다.

반환값

지정된 클래스의 스폰된 인스턴스의 포인터입니다.

ConstructObject

완벽한 유연성을 위해서는 ConstructObject() 함수를 사용하여 UObject 의 새 인스턴스를 생성할 수 있습니다. 이 함수는 StaticConstructObject() 를 호출하여 Object 할당, ClassConstructor 실행, config 과 localized 프로퍼티 로드 및 컴포넌트 인스턴싱과 같은 초기화를 수행합니다.

template< class T >
T* ConstructObject
(
    UClass* Class, 
    UObject* Outer = (UObject*)GetTransientPackage(), 
    FName Name=NAME_None, 
    EObjectFlags SetFlags=RF_NoFlags, 
    UObject const* Template=NULL, 
    bool bCopyTransientsFromClassDefaults=false, 
    struct FObjectInstancingGraph* InstanceGraph=NULL 
)

파라미터

설명

Class

생성할 **Object* 의 클래스를 나타내는 `UClass` 입니다.

Outer

옵션. 생성중인 Object 에 대한 Outer 로 설정할 UObject 입니다.

Name

옵션. 새 Object 에 대한 Name 으로 설정할 FName 입니다.

SetFlags

옵션. An EObjectFlags enum value describing the new Object.

Template

옵션. 새 Object 생성시 템플릿으로 사용할 UObject 입니다.

bCopyTransientsFromClassDefaults

옵션. 전달된 아키타입 포인터 대신 클래스 디폴트 오브젝트에서의 트랜션트 프로퍼티를 복사해 올지 결정하는 bool 입니다. true 면 클래스 디폴트 오브젝트의 휘발성 프로퍼티가 사용됩니다.

FObjectInstancingGraph

옵션. 인스턴싱된 오브젝트와 컴포넌트를 그 템플릿에 대입시킨 매핑이 들어있는 FObjectInstancingGraph 구조체입니다. 새 Object 에 소유된 컴포넌트 인스턴싱에 사용됩니다.

반환값

지정된 클래스의 스폰된 인스턴스로의 포인터입니다.

오브젝트 플래그

EObjectFlags Enum 은 Object 를 빠르고 간단하게 기술하는 데 사용됩니다. Object 유형, 가비지 컬렉션 처리 방식, Object 가 수명의 어느 단계에 있는가 등을 기술하는 여러가지 플래그가 있습니다. 특수한 all or none 마스크도, 미리정의된 플래그 그룹도 있습니다.

플래그

설명

Object Type

RF_Public

0x00000001

Object 는 포함된 패키지 밖에서도 보입니다.

RF_Standalone

0x00000002

Object 는 아무것에 레퍼런스되지 않아도 편집가능 상태로 유지됩니다.

RF_Native

0x00000004

네이티브 Object 입니다. UClass 오브젝트에만 사용됩니다.

RF_Transactional

0x00000008

트랜잭션 가능한 Object 입니다.

RF_ClassDefaultObject

0x00000010

자기 클래스의 디폴트 오브젝트인 Object 입니다. 즉 해당 클래스의 인스턴스가 새로 생성될 때 사용할 기본 템플릿입니다.

RF_ArchetypeObject

0x00000020

Object 는 다른 오브젝트에 대한 템플릿입니다. 클래스 디폴트 오브젝트처럼 취급됩니다.

RF_Transient

0x00000040

Object 는 디스크에 저장되지 않습니다.

가비지 컬렉션

RF_RootSet

0x00000080

Object 는 어느 것에 레퍼런스되지 않아도 가비지 콜렉팅되지 않습니다.

RF_IsLazyReferenced

0x00000100

Object 는 게으른 포인터로 참조되어, 삭제 후에도 청소 작업을 해 줘야 합니다.

RF_Unreachable

0x00000200

Object 는 오브젝트 그래프 상에서 도달할 수 없습니다.

RF_TagGarbageTemp

0x00000400

Object 는 가비지 컬렉션을 사용하는 다양한 유틸리티가 사용할 수 있도록 마킹됩니다. 이 플래그는 가비지 콜렉터 자체적으로는 해석하지 않습니다.

오브젝트 수명

RF_NeedLoad

0x00000800

Object 는 로딩이 필요합니다.

RF_AsyncLoading

0x00001000

Object 는 비동기 로딩중입니다.

RF_NeedPostLoad

0x00002000

Object 는 사후 로딩이 필요합니다.

RF_NeedPostLoadSubobjects

0x00004000

Object 는 여전히 서브 오브젝트를 참조하여 serialize 된 컴포넌트 레퍼런스를 고쳐줘야 합니다.

RF_PendingKill

0x00008000

Object 는 소멸 대기중입니다. Object 를 게임플레이 용도로는 사용할 수 없는 것으로 마킹은 하지만, 여전히 유효한 Object 입니다.

RF_BeginDestroyed

0x00010000

Object 에서 BeginDestroy() 가 호출되었습니다.

RF_FinishDestroyed

0x00020000

Object 에서 FinishDestroy() 가 호출되었습니다.

특수 마스크

RF_AllFlags

0x0003ffff

Object 에는 모든 플래그가 있습니다. 주로 오류 검사용으로 사용됩니다.

RF_NoFlags

0x00000000

Object 에는 플래그가 없습니다. 형 변환(cast)을 피하기 위해 사용됩니다.

미리정의된 그룹

RF_Load

RF_Standalone

RF_Native

RF_Transactional

RF_ClassDefaultObject

언리얼 파일에서 로드되는 플래그입니다.

RF_PropagateToSubobjects

RF_ArchetypeObject

상위 오브젝트에서 하위 오브젝트에 상속되는 플래그입니다.

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback