[내일배움캠프 본 캠프 72일차] SO를 통한 상태 변경

2026. 1. 9. 20:54본 캠프

 

미션 기획 중 위험한 물건을 회수하는 시스템이 생겨서 플레이어로 하여금 상세보기를 통해 찾은 물체를 클릭했을 때

해당 오브젝트를 회수한 판정과 동시에 월드오브젝트에도 동일하게 사라지게 만드는 기능을 만들어야 했다.

 

 

숨겨진 아이템 중 무기에 해당하는 SO를 구별해주고

 

상세보기 오브젝트 - 월드 오브젝트의 상태를 일치화 시키기 위해서는 상태SO가 필요하기에 구성해준다.

ID와 미션에따라 어떤 물품이 회수되는지에 대한 Tag도 추가해두면 상태는 준비가 됐다.

 

 

상세보기용 칼과 월드의 칼을 별도로 구분해야됐었는데 각각 적용되는 스크립트가 달라서 적용하면서도 내가 너무 과하게 분리하는 건 아닐까 하는 생각이 많이 들었었다.

 

 

상세보기용은 클릭에 반응해야하는 InspectTarget -> Action 구조가 기반이 되야하기 때문이고

월드 오브젝트는 그 스크립트가 적용될 필요가 없다. 그리고 Visual 스크립트를 각각 구현해서  상세보기용 오브젝트 최상위 부모에 InspectionViewBinder를 통해 상세보기에서 클릭을 통해 비주얼이 꺼지면 월드도 동일하게 적용하게 만들어서

플레이어로 하여금 내가 회수했다는 피드백을 주도록 만든다.


 

이후 DailyMissionManager에게 Tag를 통해서 클릭을 통해 비활성화된 오브젝트를 확인하고 Mission의 정보에 기입한다.

UI연출로 플레이어의 진행도를 우측상단에 추가로 보여줘야 하는 부분도 필요해서 지금 진행중

 

상세보기 기능하나에 회수시스템(상태)를 추가했는데 이를 위해서 생긴 프리펩의 종류 구분이 이렇게나 많이 분리해야 되는가? 에 대한 고민을 계속 했었다. 단순히만 봐도 정상/이상 기본 두종류에서 각각 월드/상세보기용 두종류로 나뉘어지고

또 그 안에서 회수물품은 회수 물품대로 월드/상세보기용 을 또 나누다 보니 더 좋은 방향은 없었을까 라는 생각은 계속 든다.

 

제일 어려웠던 부분 중 하나는 콜라이더 처리였는데, 애니메이션이 처리가되는 외부컨테이너 오브젝트의 콜라이더와 회수물품 클릭을 위한 콜라이더가 겹쳐서 애니메이션 재생을 위해 눌렀는데 이미 안에 회수물품이 사라져버리는 상황이 많았었다.

 

 

그래서 외부 콜라이더를 먼저 클릭했을 때는 내부 회수물품의 콜라이더가 비활성화되고 애니메이션 이벤트로 설정해서 애니메이션이 끝나면 내부 회수물품의 콜라이더가 활성화 되도록 코드를 구성했는데

 

책 같이 완벽하게 내부가 가려진 경우는 티가 안났지만, 칫솔 컵 같은 경우에는 애니메이션이 시작되자마자 날카로운 칫솔이 회수 대상이라는 걸 바로 알 수 있게 만들어서 해당 부분을 어떻게 수정해야하나 고민이다.

애니메이션 이벤트 프레임을 조절해봤는데도 위치가 잘못된 건지 코드적인 부분을 수정해야하는 건지 디버깅을 좀 더 해봐야 할 거 같다.