XR플밍 - 11. 사전 합반 프로젝트 14일차(7/8)

이형원·2025년 7월 8일
0

XR플밍

목록 보기
128/215

0. 들어가기에 앞서

오늘은 프로젝트 마지막 날이며, 기능 구현은 하지 않고 빌드 파일 테스트 진행 및 버그 수정 위주로 진행했다.

1. 금일 한 업무 정리

기획팀에 QA를 주로 담당하는 기획자가 있었는데, 노션을 통해 실시간으로 버그 리포트를 받으며 해당 내용을 해결하는 식으로 버그 수정을 진행했다. 빌드본을 버전별로 계속 뽑으면서 QA가 진행되고 버그 리포트를 계속 보면서 문제를 고쳐나가는 식으로 진행했다.

2. 문제의 발생과 해결 과정

2.1 캐릭터 사망 후 게임 재시작 시 인벤토리의 물건이 남아있는 현상

아무래도 지금까지 인벤토리라는 기능 자체에 초점을 맞추다가, 게임의 시작과 끝에 초기화해주어야 하는 기능을 구현하지 못했단 점을 생각해냈다. 이를 위해서 인벤토리를 초기화하는 함수를 추가해주고, 게임 매니저에서 게임 오버 시 해당 함수를 호출하는 방식으로 처리했다.

2.2 UI 위치 오류 및 누락 오류

이와 같이 각종 UI 오류도 있었다. 해당 부분은 신속하게 오류인 부분을 반영했다.
세 번째 에너지 부분 시각화의 경우, 슬롯 변화와 함께 업데이트 되는 Action으로 되어 있었는데, 이 액션이 원인이었던 것으로 밝혀져 우선은 Update로 처리했다.

2.3 아이템 제작 오류

해당 부분은 아무래도 테스트 이전부터 인지하고 있었떤 버그였지만, 플레이어의 키입력 방지 방안에 대해 생각해보지 않았었다. 하지만 이와 같은 버그 리포트를 받았을 때 문득 떠오른 아이디어가 있었다.
아이템이 생성됐을 때 오브젝트를 바꿀 수 없도록 투명한 판넬로 우측의 메뉴를 가려버리는 방식이다.

결과 출력 콘솔에서 아이템을 가져가기 전까지는 UI와 상호작용이 불가능하며, 키입력으로 끄는 것 외에는 메뉴를 강제로 탈출할 방법은 없게 설정했다.

2.4 아이템 드래그 중 강제 종료

인벤토리를 연 상태로 드래그를 시작하고, 여전히 드래그 상태인 채로 인벤토리를 닫으면 발생하는 버그이다.

이런 식의 조작은(?) 생각지도 못해서 예상치 못한 버그의 발생 방식이었다. 이 부분도 우선은 막을 방법이 있을까 곰곰이 생각해보다가 ItemSlotUnit으로 모든 자식 슬롯 유닛에게 적용될 수 있도록 이와 같은 내용을 추가했다.

public void OnDisable()
{
    _endDragPoint = -1;
    DragSlot.Instance.ClearDragSlot();
}

endDRagPoint를 강제로 -1로 설정하여 드래그를 종료시키고, 드래그 슬롯을 안 보이게 처리하였다. 이와 같은 방식으로 드래그 강제 종료를 구현했다.

2.5 치명적 버그 발생

아이템 복사 및 사용 불가 버그가 있어서 해당 문제가 단순히 인벤토리 초기화가 안되서 생기는 문제라고 생각했었다. 실제로도 팀장님 또한 그걸 위해 인벤토리 초기화 함수를 만들어달라고 했고, 이걸 반영했을 때 문제가 없는 줄 알았다.

하지만 인벤토리 내 아이템이 사용이 안 되고, 복사가 되는 버그는 나중에 되서야 초기화의 문제가 아니라는 것을 알게 되었다.

에디터 상으로 확인한 오류 내용은 MissingReferenceException, 그러니까 인벤토리를 킬 때마다 파괴된 오브젝트를 참조한다고 뜨고 있었다.

이런 원인이 발생한 이유는 우선적으로 InventoryManager를 싱글톤으로 선언한 것에 있었다.

싱글톤으로 선언한 UI로 인해 연동되어 있는 Inventory UI 들은 씬이 바뀔 때마다 Missing이 나 버리는 것이고, 이것을 재참조하지 않아서 인벤토리 자체가 터지며 버그가 발생하는 것이었다.

이제 와서 인벤토리를 새로 만들 수도 없는 노릇이고, 결국 현상황에서 해결할 수 있는 방법은 싱글톤인 인벤토리 매니저 아래에 UI를 넣음으로서 같이 파괴가 되지 않도록 하고, 참조 상태를 유지하게 하는 방법 밖에 없었다.
그리고 InventoryManager.Instance를 통해 UI를 호출하는 방식으로 상호작용을 구현하는 방법밖에 없었다.

결과적으로 버그 자체는 고치긴 했지만, 효율 자체는 그리 좋지 않은 방식이 될 수밖에 없었다.
지나치게 많은 데이터를 Static으로 가질 수밖에 없었고 Inventory를 구성하는 방법에 대해 다시 고민해 볼 필요성을 느꼈다.

3. 프로젝트 종료 및 후기

이번 프로젝트는 너무나도 아쉬운 게 많았던 프로젝트였다.

불만을 늘어놓으려면 정말 몇백 줄이고 써내려갈 수도 있을 정도로 힘들고 섭섭한 일이 많았지만, 최대한 냉정하고 간결하게 프로젝트에서 어떤 문제가 있었고, 어떤 해결 방안이 필요한지 생각해 보았다.

  1. 기획팀과의 소통 이슈, 그리고 잦은 기획 내용 변경.

  2. 플밍팀 내의 소통 이슈, 협업 상황 공유가 잘 안됨.

  3. 인벤토리라는 시스템을 설계하는 것에서부터 좀 더 신중하고 많은 고뇌가 필요했음.

이와 같은 부분에서 소통이란 것이 매우 중요하고, 서로간의 상황 공유가 얼마나 잘 되어야 하는지 체감하게 되었다.
특히나 데일리 스크럼의 작성률이 저조해서 서로간의 상황 공유가 안 되고, 이게 번번히 지켜지지 않았다.

상황 공유와 빌드본 테스트를 최대한 일찍 진행하면서 프로토타입을 빨리 뽑아내는 게 관건이라고 느꼈다.

이렇게 하지 못해 발생했던 문제가 구현해놓고도 결국 쓰이지 못한 기능들이나, 빈번한 기획 변경으로 코드를 전면 수정하거나 하는 작업 때문에 의도한 대로의 작업을 마무리하지 못했다.

물론 남들만 잘못했고 나는 잘못 없다 이런 말을 하고 싶은 건 아니고, 나 또한 기획의 변경 내용을 제때 체크하지 못한 경우도 있었고 에셋 전달 사항 등을 곧바로 챙기지 않아서 뒤늦게 다시 물어보는 등의 실수도 저질렀다.

어찌 됐든, 아쉬운 건 많았지만 일단은 프로젝트는 끝이났다. 간신히 좀 쉴 수 있을 것 같다.

profile
게임 만들러 코딩 공부중

0개의 댓글