[언리얼 엔진] 오브젝트

    오브젝트

    기본 게임 플레이 요소인 Actor와 Object

    언리얼에는 게임 오브젝트 처리용 시스템이 있다. 오브젝트의 베이스 클래스는 UObject이다. UObject에서 파생되는 클래스에 UCLASS 매크로를 사용하여 태그하면 UObject 처리 시스템에서 인식 하게 된다.

    UCLASS 매크로

    UClass 매크로는 UObject에게 언리얼 기반 정보를 UClass 로의 레퍼런스를 넘겨준다. 각 UClass는 Class Default Object(CDO) 오브젝트를 하나 유지한다. CDO는 기본 템플릿 오브젝트로 클래스 생성자에 의해 생성된 이후 변경되지 않는다. UCLASS와 CDO는 지정된 오브젝트 인스턴스에 대해 검색할 수 있지만 일반적으로 읽기전용이여야 한다.
    오브젝트 인스턴스의 UCLASS는 GetClass() 함수를 통해 접근할 수 있다.

    프로퍼티와 함수 유형

    UObject는 멤버 변수나 모든 유형의 함수를 가질 수 있다. 이러한 변수나 함수를 인식하고 조작하기 위해선 특수 매크로로 표시해야하고 특정 유형 표준을 준수해야한다. 프로퍼티와 UFuction 페이지를 참조

    오브젝트 생성

    • NewObject() - 자동 생성되는 이름으로 새 인스턴스를 만든다.
    • NewNamedObject() - 지정된 이름과 파라미터 옵션으로 새 인스턴스를 만든다. 이름이 새인스턴스의 Outer와 충돌하는 경우 Assert 발생
    • ConstructObject() - 가능한 모든 생성 옵션으로 새 인스턴스를 만든다.
    • new - 생성자에 인수가 필요한 경우와 같이 저수준 상황에서 개체를 생성하는데 사용

    UObjects에서 제공하는 기능

    • 가비지 컬렉션
    • 레퍼런스 업데이트
    • 리플렉션
    • 시리얼라이제이션
    • 디폴트 프로퍼티 변경사항 자동 업데이트
    • 자동 프로퍼티 초기화
    • 자동 에디터 통합
    • 실행시간에 유형정보 사용가능
    • 네트워크 리플리케이션

    언리얼 오브젝트 처리 문서 참조

    언리얼 헤더툴

    UObject 파생 유형에 제공되는 함수성을 사용하기 위해선, 전처리 단계를 거쳐야 한다. Unreal Header Tool UHT에서 이루어진다.

    헤더 파일 포맷

    #pragma once
    
    #include 'Object.h'
    #include 'MyObject.generated.h' // #include 코드중 마지막에 있어야한다.
    
    UCLASS()    //UMyObject를 언리얼 엔진 4에 보이도록 만든다. 클래스 지정자를 통해 기능을 켬/끔 할 수 있다.
    
    //다른 모듈에 노출시키고자한다면 MYPROJECT_API 지정을 통해 노출 시키자
    class MYPROJECT_API UMyObject : public UObject
    {
        GENERATED_BODY()
        //해당 매크로는 인수를 받지 않으나 클래스가 엔진에 필요한 인프라 스트럭처를 지원하도록 구성하고, 모든 UCLASS에 필수이다.
    };

    오브젝트 업데이트

    모든 오브젝트는 매프레임 마다 Tick 가능하여 필요한 동작이나 계산을 할 수 있다.

    Object에는 내장된 업데이트 기능이 없지만 inherits 클래스 지정자를 사용하여 FTickableGameObject 클래스를 상속받아서 필요에 따라 추가할 수 있다.

    오브젝트 소멸

    • WeakPoint는 오브젝트 가비지 컬렉션에 영향을 주지 않는다.

    오브젝트 소멸처리는 오브젝트가 엔진에 더이상 레퍼런스 되지 않을 때 가비지 컬렉션 시스템에 의해 자동으로 이루어진다. MarkPendingKill() 함수를 오브젝트에서 바로 호출하게 되면 해당 오브젝트로의 모든 포인터는 NULL로 설정되고 글로벌 검색에서도 제거된다.

    문서

    반응형

    댓글

    Designed by JB FACTORY