Unity - 최종 프로젝트 FPS게임 만들기 -6-

한예준·2025년 7월 9일

오늘은 해킹 시스템에 연결되는 HackingProgressUI를 만들고, HUD에서의 무기UI와 인벤토리 UI의 구조를 통합했다.


오늘 작업 내용

HackingProgressUI 제작

WorldSpace UI

  • 해킹 시 적 오브젝트 위에 실시간으로 뜨는 진행률 UI 프리팹을 설계했다.

    • Canvas의 Render Mode를 World Space로 설정한 프리팹을 만들어서 화면이 아닌 월드에 UI가 나타나도록 했다.
    • 플레이어가 해킹을 시도하면 해킹을 당하는 오브젝트의 머리 위 (OffSet을 사용) 에 UI가 띄워지도록 오브젝트가 해킹을 당할 때 그 오브젝트의 Transform을 받아서 UI를 생성하도록 했다.
    • 슬라이더와 퍼센트 텍스트, 애니메이터 등의 연출을 추가했다.
    • 이후 프리팹을 Addressables에 등록하여 풀 매니저가 자동으로 로드/릴리즈 할 수 있었다.
  • 해킹UI 흐름 정리

    • 해킹 시도할 시 ObjectPoolManager에서 Get()으로 꺼냄
    • 진행률은 SetProgress, 성공/실패 시엔 OnSuccess/OnFail로 애니메이션 처리
    • 애니메이션이 끝나면 풀로 반환(Release)
  • 트러블 슈팅

    • Render Mode가 World Space인 캔버스의 자식 오브젝트로 프리팹을 만들었는데, 이를 다시 씬에 띄워보니 Render Mode가 자동으로 OverLay화 되어 있었다.
    • 이를 해결하기 위해 오브젝트 자체의 Render Mode를 World Space로 설정하였다.
    • 그 결과 정상적으로 World Space에 UI가 나타나는 것을 확인할 수 있었다.

    무기/슬롯 UI 구조 통합

    SlotUtility

  • SlotType별 슬롯을 매칭하는 로직 (IsMatchSlot)

  • 무기 이름, 탄약, 스탯 추출 (GetWeaponName, GetWeaponAmmo, GetWeaponStat)

  • stat을 구조체로 정리

    무기/슬롯 UI

  • 기존 WeaponUI, InventoryUI, QuickSlotUI. 또 앞으로 만들 무기 개조 UI에서 각각 다르게 관리하던 슬롯 매칭/ 무기 이름/ 탄약/ 슬롯 순서 관련 로직을 SlotUtility라는 static class로 통합했다.

  • SlotUtility 기반으로 리팩토링했다.

    • SlotType을 기준으로 슬롯을 일관성 있게 배치
    • 무기가 없는 슬롯의 이미지/텍스트/탄약 모두 보이지 않도록 만들었다.
    • stat을 SlotUtility에서 추출했다.
    • 무기와 관련된 추가적인 UI (무기 개조 UI) 등을 확장하기 용이해질 거라 기대한다.
  • 이를 통해 코드 중복을 제거하여 한결 깔끔해졌다.


    미니게임 UI 틀 제작

    MiniGame UI

  • 미니게임을 열도록 요청할 때 열릴 UI를 미리 만들어보았다.

  • 팀장님이 미니게임 로직을 완성했으니, 내일은 이를 UI에 연결하는 작업을 진행하도록 하겠다.

    회고

  • 무기/슬롯 구조를 한 번에 공용화하여 HUD/인벤토리/개조/비교 등 어떤 UI도 쉽게 새로 만들거나 수정할 수 있도록 유틸리티 헬퍼를 도입했는데, 이를 통해 구조를 설계하니 한결 편리해졌다.

  • 이전 개인 프로젝트나 학습에서 WorldSpace UI를 만들어봤는데, 이 때는 적에게 미리 달아놓는 방식을 채택했다. 하지만 이번엔 미리 만들어 놓는 것이 아닌 해킹을 시도할 때 ObjectPool 방식으로 생성하는 기능을 사용했다. 이를 다른 UI에도 쉽게 활용할 수 있을 것이라 기대해본다.

  • 내일은 미니게임 UI를 연결하고, 맵 상호작용 요소들과 연결되는 UI들을 만들 예정이다.

0개의 댓글