21. Pistol이 나오지 않는 버그 수정
오늘도 버그와 마주하게 되었습니다.
분명 진도에서는 Mannequin의 손에 Pistol이 쥐어져 있는데.. 제 Mannequin은 왜 빈손인걸까요..
왜일까 생각해서 BP를 통해 역추적을 하기 시작했습니다.
이번 포스팅은 역추적으로 로직을 거슬러 올라가는 과정에 대한 포스팅입니다.

이 부분은 Blueprint로 작성된 부분이며 *Possess(빙의) 이벤트로부터 시작하게 됩니다.
EventPossessed -> Switch Has Authority -> Wait for ExperienceReady -> Wait for Inventory Readness -> Add Initial Inventory
위와 같은 상태로 구성됩니다.
1. EventPossessed
- 우리가 플레이어 Pawn에 빙의되는 것을 Possess라고 하는데, Possess되는 시점에 해당 이벤트가 들어오게 되고 로직이 진행됩니다.
2. Switch Has Authority
- 서버인지 클라이언트인지 구분하기 위한 로직인데, 현재는 이에 따른 구분이 없으므로 Authority로 들어갑니다.
3. Wait for ExperienceReady
- ExperienceReady 상태인지 검사합니다.

- 로직이 완료되면 FExperienceReadyAsyncDelegate를 통해 완료 보고를 받게 됩니다.
4. Wait for Inventory Readness
- 이 부분은 Blueprint Macro입니다.

- 복잡해보이지만 Get Component By Class의 결과값이 nullptr이 아닐때까지 무한 반복하는 로직입니다.
- 하나는 HmInventoryComponentManager 이고, 다른 하나는 B_QuickBarComponent 입니다.
- IsValid의 결과가 Is Not Valid라면, Delay Until Next Tick을 통해 다음 Tick에서 실행하는 것입니다.
- 문제는 여기서 다음 Add Initial Inventory로 넘어가지 않는 것이었습니다. (BP를 걸었는데 다음 노드로 넘어가지 않는 현상)
1, HmInventoryComponentManager를 잘 넣어주고 있는지?
- HmInventoryComponentManager는 ShooterCore의 AddComponent에서 잘 넣어주고 있는 것을 확인했습니다.

2. B_QuickBarComponent를 잘 넣어주고 있는지?
- 이 부분은 사실 잘 기억나지 않아 최근 배웠던 로직을 되짚어보는 계기가 되었습니다.

- HAS_ShooterGame_SharedComponent에서 넣어주는 부분입니다.
- 왜 ShooterCore에서 넣어주지 않고 HAS_ShooterGame_SharedComponent에서 넣어주는건가 되짚어보니,
- Experience애 구애받지 않고 전역적으로 사용할 Component (Inventory Manager)는 ShooterCore에 넣어주고,
- QuickBar는 Experience에 따라 달라질 수 있으므로, SharedComponent에 담는 것으로 이해했습니다.