에셋에 대한 관리가 중요한 이유는 프로젝트에서 코드를 제외한 대부분은 에셋으로 되어있기 떄문입니다.
에셋은 텍스쳐, 머티리얼, 메쉬, 레벨 등등 모두 포함한 것으로 ‘리소스 = 에셋’으로 이해하면 편합니다.
이렇게 많은 요소들을 에셋으로 묶어 놓은 이유는 에셋은 각 파일들을 언리얼 엔진에서 직렬화 (Serialize)해서 사용하기 편한 상태로 저장해놓은 것이기 때문입니다.
즉 프로젝트에 필요한 파일들을 원본 그대로 가지고 있는 것이 아니라 직렬화(Serialize)해서 언리얼에서 로드하기 편한 상태로 디스크에 저장하고 있다가 필요할 때 메모리에 로드하는 형태입니다.
그러므로 에셋을 만들고 관리할 때 두가지에 대해 신경써야합니다.
에셋은 게임, 에디터 동시에 사용되므로 코딩 시 어떤 모듈에 작성해야할 지 신중히 결정
저장해야 할 데이터와 런타임에 만들어도 되는 데이터를 잘 구분 지을 것.
Test 클래스를 예시로 가정해보겠습니다. 변수 a, b, Sum 이 있지만 프로퍼티로 지정된 변수는 a,b 입니다. 왜냐하면, Sum 은 클래스가 작동하는 과정에서 생기는 값이므로 따로 프로퍼티를 통해 저장할 필요가 없기 때문입니다. 이처럼 코드 작동에서 생기는 임시 값이나 변수들과 같이 런타임에 생성되고 계산되는 객체들 외에 저장할 데이터를 따로 구분하는 것을 권장 드립니다
2. 커스터마이징 에셋 구현을 위한 주요 클래스 및 함수
1. Asset 클래스 에셋의 본체가 되는 클래스.
UObject를 상속 받으며, 여러 데이터를 담아 활용할 수 있다.
적절히 WITH_EDITORONLY_DATA 혹은 WITH_EDITOR와 같은 매크로를 사용하여 에디터용 데이터와 로직을 잘 구분하여 작성하는 것이 좋다.
TestAsset Class
2. AssetFactory 클래스
UFactory 클래스를 상속받는 클래스.
에디터에서 에셋을 생성할 때는 NewObject<ClassType>()과 같이 선언하여 객체를 선언하는 것이 아닌