Asset
해당 Asset에서 우클릭하여 Copy Reference를 해준다.
이렇게 Asset주소를 들고온 후
생성자에서 다음과 같이 TEXT에 붙여주면 된다.
붙여넣기를 하면 앞부분과 마지막에 '가 하나 더 붙는데 이건 삭제해주면 된다.
'부분을 삭제하지 않으면 Crash가 난다.
그리고 Class 정보를 들고오기에 _C를 붙여주면 된다.
여기서 _C는 해당 BP의 Generated Class를 의미한다.
CPP
CPP도 동일하게 Copy Reference를 해준다.
붙여넣기하면 여기도 '가 생기는데 동일하게 삭제해주면 된다.
C++ 직접 참조(StaticClass()) vs 경로 기반 로딩 (FClassFinder)
C++직접 참조
- 컴파일 타임에 타입 안정성을 검사한다.
- 런타임 시에 오류 위험이 없다.
- StaticClass() 호출은 정적 메타데이터를 참조하기에 비용이 낮다.
- h파일을 참조하기에 결합도가 높아진다.
- 클래스 변경 시 의존한 파일들까지 재빌드할 필요가 있다.
- 런타임 중 다른 Class로 바꾸는 유연성이 떨어진다.
경로 기반 로딩
- h파일 없이 경로 문자열만으로 참조가 가능하다.
- 경로를 바꾸면 코드의 수정 없이 다른 클래스를 사용 가능하다.
- C++보다 BP 중심으로 확장할 때 유용하게 사용된다.
- 경로 오타나 누락 시 Crash가 난다.
- 프로젝트 리펙토링, 폴도 이동 시 경로가 달라지면 다 수정해야한다.
- 내부적으로 StaticLoadClass를 호출하는 비용이 있어서 자주 사용하면 좋지 않다. (미미한 수준이긴 하다)
Object
Object는 위와 다르게 FClassFinder가 아니라 FObjectFinder를 사용하면 된다.
여긴 굳이 '를 지우지 않아도 된다.
그리고 이후에 StaticMesh 경로를 다른 StaticMesh 경로로 바꿔도 이전에 만들어진 해당 CPP기반 BP의 StaicMesh도 다 바뀐다.
ConstructorHelpers::FClassFinder의 장단점
장점
- BP내부에서 파생된 Class Type을 찾을 때 정확하게 해당 Class로 접근이 가능하다.
- h파일을 직접 추가하지 않기 때문에 결합도를 낮출 수 있다.
단점
- 런타임에 잘못된 경로를 찾으면 Crash가 나거나 null 반환
- 경로를 하드코딩하기에 유지보수성이 낮음.
- 잘못된 Class Type이 들어가도 컴파일러가 막지 않는다.
'Unreal 게임 개발 > Unreal C++ 공부' 카테고리의 다른 글
Delegate를 인자로 사용하기 위한 방법 - 구조체 (0) | 2025.03.25 |
---|---|
게임 시작 시 포커스가 뷰포트로 들어가게 하기 (0) | 2025.03.21 |
Unreal StaticClass() (0) | 2024.10.03 |
C++ 람다 표현식 (Lambda expression) (0) | 2024.09.05 |
Unreal Module 추가 방법 (0) | 2023.01.26 |