일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- DirectX11
- winapi
- C++
- IFileDialog
- DeferredRendering
- NRVO
- directx
- 백준
- 티스토리챌린지
- baekjoon
- 줄 세우기
- GeeksForGeeks
- 프로그래머스
- Unreal Engine5
- 언리얼엔진5
- RootMotion
- UnrealEngine4
- Frustum
- RVO
- C
- const
- UnrealEngine5
- Programmers
- 오블완
- 팰린드롬 만들기
- softeer
- UE5
- 1563
- algorithm
- 2294
- Today
- Total
Game Develop
[UE5] 특정 인터페이스가 구현됐는지 검사할 때 주의할 점 본문
언리얼에는 특정클래스에 특정인터페이스가 상속되어있는지 확인하는 함수가 있다.
spawnedActor->GetClass()->ImplementsInterface(UPoolableActor::StaticClass())
이 함수를 사용할 때 주의할 점은, 클래스타입만으로 GetClass() 호출 후, ImplementsInterface를 호출하면 false만 리턴한다는 것이다. (실제로 상속받았는데도)
예를들어 나같은 경우 블루프린트액터가 아닌 일반액터에 대한 액터풀을 생성하거나 액터풀에서 액터를 꺼내올 때 아래와 같이 액터의 StaticClass만 넘긴다.
m_ActorPool->CreateActorPool(AMeleeMinion::StaticClass(),1);
그럼 검사를 할 때 AMeleeMinion::StaticClass()->GetClass()->ImplementsInterface(UPoolableActor::StaticClass())
이런식으로 했었는데, 그동안 잘 검사하는 줄 알았다. checkf를 박아놨었기 때문에..
근데 오늘 문득 checkf에 false가 아닌 true가 작성되어있는 걸 보고, false로 바꿨더니 바로 크래쉬가 났다.
이게 뭔말이냐면, 무조건적으로 크래쉬나게하려면 checkf에 false를 넣어놔야하는데, 그동안 true라서 검사 잘 안되는 상태였어도 크래쉬가 안 났던 것이다.
어쨌든 분명히 인터페이스는 잘 상속되어있고, 실제로 Activate와 DeActivate도 잘 동작하는데 왜 그럴까... 하다가 구글링하니까 보통 검사할 때 StaticClass가 아닌 스폰된 액터로 검사하는걸 확인했다.
그래서 액터풀에서 SpawnActor로 생성한 액터->GetClass()->ImplementsInterface(....)를 호출하니까 true로 잘 리턴됐다.
왜 StaticClass로 하면 false만 리턴하는지는 잘 모르겠다. 제발 아는사람이 있으면 댓글 달아줬으면 좋겠다.
결론 : 클래스타입으로 인터페이스상속 여부 검사하면 false만 리턴하니까 조심하자.
'UnrealEngine5 > 이것저것' 카테고리의 다른 글
[UE5] C++로 위젯블루프린트 생성 후 부착하기 (0) | 2023.08.16 |
---|---|
[UE5] 유효성 검사. (0) | 2023.08.04 |
[UE5] 가상함수 생성하기. (0) | 2023.03.28 |
[UE5] AIPerception 각 옵션변경 실시간 적용하기 (0) | 2023.03.03 |
[UE5] C++로 AI Perception 사용할 때 주의할점. (0) | 2023.02.28 |