문제
- CombatComponent의 기능을 나누어 InputBuffer, WeaponTrace라는 새로운 2가지 컴포넌트 생성
- 이후 InputBuffer를 그대로 쓰려니 캐릭터, 로봇에 따라 다르게 동작해야 하는 부분을 인지
- 캐릭터, 로봇 전용 InputBufferComponent를 만들기로 결정
ㅡ> InputBuffer를 같은 부모 클래스로 하게끔 - 각 클래스들을 구현하고 에디터에서 동작을 확인하려니 WeaponTrace는 정상 작동하지만, InputBuffer는 전혀 정상 작동하는 것 같지가 않음
해결과정
- 기존 Component를 분리하여 2개의 컴포넌트를 만드는 과정에서 이름변경을 하게 되면서 리다이렉터들이 생성
- 이전에 리다이렉터 때문에 해당 클래스 인식에 오류가 생기는 현상을 겪은 적이 있어 생성된 리다이렉터들을 에디터가 아닌 Conif 폴더에서 DefaultEngine.ini 에서 직접 삭제
- 생각해보니 에디터에서 'Fix Up Redirectors' 라는 기능을 제공
- 필자가 이름을 바꾼 컴포넌트가 속한 캐릭터 클래스의 BP의 경우에도 위에서 언급한 리다이렉터의 영향을 받음
- ini파일에서 직접 리다이렉터를 삭제함으로써 기존 BP 클래스를 아예 사용할 수 없게 되어 BP 래퍼 클래스를 새로 생성
- BP 래퍼 클래스를 새로 생성했으니 괜찮을 것이라 생각했으나, 여전히 함수는 호출되지만 실질적인 기능은 하지 않음
- InputBuffer 컴포넌트가 인식은 되지만, 실제 인스턴스와 함수의 대상으로 지정된 인스턴스는 상이하여 발생하는 문제로 인식
- 리다이렉터가 생겼던 시점의 컴포넌트 이름이 InputBuffer 였는데, 이를 계속 쓰는 것이 문제일 수도 있겠다 판단
- PlayerInputBuffer라는 이름으로 컴포넌트 포인터 변수의 이름을 직접 변경 (리다이렉터가 생기지 않게)
ㅡ> 에디터에서 확인 결과 제대로 인식되지 않던 InputBuffer 관련 기능이 정상 작동
결론
- 리다이렉터를 에디터의 기능을 활용하지 않고 직접 ini 파일에서 삭제한 것이 원인으로 보임
- BP 래퍼로 사용되는 클래스였기에 에디터의 'Fix Up Redirectors'를 활용하는 것이 훨씬 안전
- 에디터에서 'Fix Up Redirectors'를 활용하면 기존 BP 래퍼를 쓰지 못하게 되는 일도 없었을 것
- 더불어 이름이 변경된 클래스를 참조하는 에셋들에서 참조 오류가 생기지도 않았을 것
참고자료