내일배움캠프 41일차 - 액터 내 오브젝트/컴포넌트의 올바른 생성방법
언리얼 C++ 강의와 과제를 진행하면서 겪었던 문제나 어려움은 대부분 내가 사용한 변수타입이나 함수의 사용법이 잘못됨에서 비롯된 것들이었다. 이번에 내가 잘못 사용했던 변수/함수의 제대로 된 사용법과 특정상황에서 사용해야하는 것들을 정리해보도록 하자.
1) 액터 내에서 오브젝트를 생성할 때
액터 내에서 오브젝트를 생성할 때 사용하는 함수는 크게 세가지가 있다.
1. CreateDefaultSubObject<ObjectType>(FName SubobjectFName)
생성자에서 컴포넌트를 생성할때 사용하는 함수이다. 이 함수는 오직 생성자내에서만 사용이 가능하며, 다른 함수에서 사용하면 크래시가 발생한다.
2. AddComponentByClass(클래스 타입, 수동어태치 여부, Transform 초기값, DeferredFinish=false)
런타임중에서 컴포넌트를 생성하고 싶을 때 사용하는 함수이다. 이 함수는 생성자 외 다른 함수에서 사용할 수 있으며, 자동 어태치일때 root컴포넌트에 자동적으로 붙는다.
최종적으로 컴포넌트를 완성시키려면 Component->FinishAddComponent()를 사용해야한다.
3. NewObject<ObjectType>()
런타임중에서 오브젝트를 생성하고 싶을 때 사용한다. 컴포넌트 아닌 오브젝트는 이것으로 만들 수 있으며, 컴포넌트를 생성할 수도 있지만 권장되지 않는다.
※ SpawnActor<ObjectType>(UClass* class); 사용 시 주의사항
SpawnActor를 사용할 때 class타입을 동적으로 추가하고 싶을 때 명시된 대로 UClass*로 넣는 것이 좋다. TSubClassOf등을 대신 넣어버리면 클래스타입이 제대로 반영되지 않아 nullptr로 인식되기도 한다.
댓글
댓글 쓰기