언리얼 스마트 포인터 라이브러리 언리얼 스마트 포인터 라이브러리(Unreal Smart Point Library)는 메모리 할당과 추적의 부담을 해소하도록 설계된 C++11 스마트 포인터들의 커스텀 구현이다. 표준인 Shared Pointer, Weak Pointer, Unique Pointer 와 null이 불가능한 Shared Reference 가 포함되어있다. 언리얼 오브젝트는 게임 코드에 더 최적화된 별도의 메모리 추적 시스템을 사용하기 때문에 Uobject 시스템과 사용할 수 없다. 스마트 포인터타입 Shared Pointer(TSharedPtr) 쉐어드 포인터는 참조하는 오브젝트를 소유하며, 무기한으로 오브젝트의 소멸을 방지하고, 참조하는 쉐어드 포인터나 쉐어드 레퍼런스가 없을 경우에 오브젝트..
언리얼 오브젝트 처리 자동 프로퍼티 초기화 UObject는 생성자 호출 전 초기화시 자동으로 0으로 채워진다. 클래스, UProperty, 네이티브 멤버 모두에게 적용된다. 이후 멤버는 클래스 생성자의 커스텀 값으로 초기화 가능하다. 레퍼런스 자동 업데이트 AActor 또는 UActorComponent가 소멸되거나 플레이에서 제거되면, 리플렉션 시스템에 보여지고 있던 모든 레퍼런스는 자동으로 null이 된다. 허상 참조를 예방하여 문제의 소지를 줄인다는 장점이 있지만, 다른 코드부분에서 AActor와 UActorComponent 포인터를 소멸시키는 경우 null 이 된다는 것을 뜻한다. null 검사 안정성이 높다. 자동 업데이트 기능은 UPROPERTY로 마킹되어 있거나 언리얼 엔진 컨테이너 클래스에 ..
TSubclassOf TSubclassOf는 UClass 유형의 안전성을 보장해주는 템플릿 클래스이다. 특정(UDamageType) 파생 클래스만 할당하기를 바랄 때 사용한다. 그러면 에디터의 프로퍼티 창에 해당 클래스의 파생 클래스만 선택되도록 한다. /** type of damage */ UPROPERTY(EditDefaultsOnly, Category=Damage) TSubclassOf DamageType; 이러한 UPROPERTY 안전성의 추가로, C++ 수준에서의 유형 안전성도 확보할 수 있다. 비호환 TSubclassOf 유형을 할당하려는 순간 컴파일 오류가 발생한다. 범용적인 UClass를 할당하려고 할 때, 할당이 가능한지 검증을 실행시간에 검사를 한다. 검사에 실패하면 nullptr를 반..
TSet TSet는 순서가 중요하지 않은 상황에서 고유 엘리먼트를 저장하는데 사용되는 고속 컨테이너 클래스이다. TSet는 TMap, TMultiMap과 비슷하지만 차이접이 있다. 독립된 키로 데이터를 연결하기 보다 데이터값 자체를 키로 사용하며 엘리먼트 값을 평가하는 오버라이드 가능 함수를 사용한다. TSet는 엘리먼트 추가,검색,제거가 매우 빠르다. TSet는 중복키를 지원하지 않지만, 템플릿 파라미터로 사용할 수 있다. DefaultKeyFuncs에서 파생된 구조체는 해시 함수 기능을 제공하도록 지정 가능하다. 또한 한 Set에 값이 같은 키가 중복이 가능하도록 할 수도 있다. 데이터 저장을 위한 커스텀 메모리 얼로케이터를 제공할 수 있다. TArray와 비슷하게 TSet는 동질성 컨테이너, 즉 모..
게임 플레이 타이머 설정된 주기마다 동작을 수행하는 타이머 구조체 타이머를 통해 딜레이 이후 또는 일정 시간에 걸쳐 동작을 수행하도록 스케쥴을 잡을 수 있다. 타이머 관리 타이머는 글로벌 TimerManager 에서 관리한다. 글로벌 타이머 매니저는 GameInstance 오브젝트와 각 World에 존재한다. 타임 매니저와 함께 타이머를 셋업하는데 사용되는 주 함수는 SetTimer와 SetTimerForNextTick 이 있다. 자세한 내용은 TimerManagerAPI Page 참조 타이머를 호출한 Actor같은 오브젝트가 시간이 다 되기전 소멸되면 타이머는 자동으로 취소된다. 타이머 매니저 접근은 AActor 함수의 GetWorldTimerManager를 통해 이루어진다. UWorld의 GetTim..
오브젝트 기본 게임 플레이 요소인 Actor와 Object 언리얼에는 게임 오브젝트 처리용 시스템이 있다. 오브젝트의 베이스 클래스는 UObject이다. UObject에서 파생되는 클래스에 UCLASS 매크로를 사용하여 태그하면 UObject 처리 시스템에서 인식 하게 된다. UCLASS 매크로 UClass 매크로는 UObject에게 언리얼 기반 정보를 UClass 로의 레퍼런스를 넘겨준다. 각 UClass는 Class Default Object(CDO) 오브젝트를 하나 유지한다. CDO는 기본 템플릿 오브젝트로 클래스 생성자에 의해 생성된 이후 변경되지 않는다. UCLASS와 CDO는 지정된 오브젝트 인스턴스에 대해 검색할 수 있지만 일반적으로 읽기전용이여야 한다. 오브젝트 인스턴스의 UCLASS는 G..
다이내믹 델리게이트 Serialize 가능하면서 리플렉션도 지원하는 델리게이트 다이내믹 델리게이트 선언하기 선언은, 전용 매크로를 사용한다. DECLARE_DYNAMIC_DELEGATE_RetVal, etc. - 다이내믹 델리게이트 생성 DECLARE_DYNAMIC_MULTICAST_DELEGATE_RetVal, etc. - 멀티-캐스트 델리게이트 생성 다이내믹 델리게이트 바인딩 BindDynamic(UserObject, FuncName) - 다이내믹 델리게이트에서 BindDynamic() 호출을 위한 헬퍼 매크로 AddDynamic(UserObject, FuncName) - 다이내믹 멀티캐스트 델리게이트에서 AddDynamic() 호출을 위한 헬퍼 매크로 RemoveDynamic(UserObject, ..
델리게이트 C++ 오브젝트 상의 멤버 함수를 가리키고 실행시키는 데이터 유형 Delegate로 C++ 오브젝트 상의 멤버 함수 호출을 안전한 방식으로 한다. 델리게이트를 사용하여 임의 오브젝트 멤버 함수에 동적으로 바인딩 시킬 수 있고, 그 다음 오브젝트에서 함수를 호출할 수 있다. 델리게이트는 항상 참조 전달해야 한다. heap에 메모리를 할당 해야 하기 때문이다. 싱글 캐스트와 멀티 캐스트 모두 지원되며, 다이나믹 델리게이트도 가능하다. 델리게이트 선언 델리게이트의 선언은 매크로를 사용하여 선언할 수 있다. 값을 반환하는 함수 페이로드(Payload, 유상) 변수 4개 까지 함수 파라미터 8개 까지 const 로 선언된 함수 DECLARE_DELEGATE( DelegateName ) - void Fu..
액터 스폰 게임플레이 코드에서 Actor의 새 인스턴스를 생성하는 함수에 대한 설명 SpawnActor 함수 스폰(Spawn)은 Actor의 새 인스턴스를 생성하는 과정이다. Actor의 스폰은 UWorld::SpawnActor()함수를 사용한다. 이 함수는 새로 생성된 Actor 포인터를 반환한다. AActor* UWorld::SpawnActor ( UClass* Class, FName InName, FVector const* Location, FRotator const* Rotation, AActor* Template, bool bNoCollisionFail, bool bRemoteOwned, AActor* Owner, APawn* Instigator, bool bNoFail, ULevel* Over..
액터의 수명 주기 액터의 생성과 소멸에 대해 알아보자 수명 주기 분해도 디스크에서 로드 레벨에 배치되어있는 액터에 대해서, LoadMap이 발생하였을 때나 AddToWorld가 호출되었을때 발생한다. 패키지/레벨에 있는 액터가 디스크레엇 로드된다. PostLoad 이후 - 디스크에서의 로드 완료후 serialize된 액터에 의해 호출된다. PostLoad와 PostActorCreated는 상호 배제 된다. InitializeActorsForPlay 플레이용 액터 초기화 RouteActorInitialize 액터 초기화 경로 변경 - 초기화 되지 않은 액터에 대해 호출 PreInitializeComponents 컴포넌트 초기화 이전 InitializeComponent 컴포넌트 초기화 PostInitiali..
액터 (Actor) Actor는 레벨에 배치할 수 있는 오브젝트이다. 액터는 이동, 회전, 스케일과 같은 3D 트랜스폼을 지원하는 범용 클래스다. 액터는 게임플레이 코드를 통해 스폰 및 소멸 가능하다. 액터 생성 AActor 클래스 인스턴스를 생성하는 것을 Spawn이라 한다. SpawnActor() 함수나 템플릿으로 생성한다. 액터 스폰 챕터에서 자세히 확인 컴포넌트 액터는 Component라 불리는 특수유형 Object를 담는 그릇으로 볼 수 있다. 여러 컴포넌트를 사용하여 액터의 이동 및 렌더링 방식 등을 제어할 수 있다. 액터는 플레이 도중 네트워크를 통한 프로퍼티 및 함수 호출의 리플리케이션 기능이 있다. UActorComponent 액터 컴포넌트 베이스 컴포넌트, 액터의 일부로 포함, tick..
언리얼 C++ 언리얼 엔진의 C++ 코드에 대한 안내서 C++ 및 블루프린트 언리얼 엔진에서 새로운 게임플레이 요소를 만들기 위해서는 C++나 블루프린트 스크립트, 두 방법중 하나로 선택하여 만들 수 있다. 클래스 마법사 언리얼 에디터안의 클래스 마법사를 사용하여 C++클래스를 만든다. 부모클래스를 설정하고, 이름을 설정하면 마법사가 파일을 자동으로 생성해줘 편집을 시작할 수 있다. #include "GameFramework/Actor.h" #include "MyActor.generated.h" UCLASS() class AMyActor : public AActor { GENERATED_BODY() public: // 이 액터의 프로퍼티에 기본값을 설정합니다. AMyActor(); // 매 프레임 호출됩..