정말 오랜만에 TIL을 작성하는 듯 싶다. 마지막으로 TIL을 작성한 날로부터 약 1달이 넘게 지나간 것 같은데 그 동안 팀 프로젝트 2개와 개인 프로젝트 하나를 추가로 진행했고, 이제 약 8주간 진행될 최종 프로젝트를 진행하고 있다.
현재 나는 최종 프로젝트에서 Sound와 UI 작업을 진행하고 있고, 현재 HUD의 기능들을 조금 더 다듬고 있다. 추후 맵의 환경요소들 (조작 패널이나 사다리 등)을 제작할 예정이고, 오늘부터 다시 매일의 진행 사항을 기록하며 정리해보는 시간을 가져보겠다.
UI Manager가 Addressables로 씬별 UI 프리팹을 로드·관리 → 캔버스에 띄워주는 구조를 구현했다.UIBase 추상 클래스로 UI의 공통 인터페이스를 정의했다. InGameUI는 플레이어 상태, 스킬 게이지, 크로스 헤어, 무기 정보를 실시간으로 업데이트하도록 연결한다.LowHealthOverLay, CrosshairController, PauseHandler등의 각 UI 프리팹 스크립트들은 피해 효과, 조준 및 발사 효과, 일시정지 등 각종 부가적인 효과를 담당한다.CrosshairController 개선Lobby UINew Game 선택 시 저장된 데이터가 아닌 새 게임을 시작하는지 묻는 팝업UI를 띄우도록 수정하였다.HUDWeaponUI는 플레이어가 장착한 무기들을 슬롯 형태로 표시하고, 선택된 슬롯에 대해 크기, 색상, 애니메이션 등을 변화시키는 컴포넌트이다.
WeaponUI
필드 구성(헤드)
RectTransform과 Animator를 배열로 관리normalSize 선택 시 selectedSize, 슬롯 선택 시 확대 보간 속도 scaleSpeed[SerializeField]로 설정하여 에디터 상에서 조정 가능하도록 했다.Update
Vector3.Lerp로 부드럽게 확대LayoutRebuilder.ForceRebuildLayoutImmediate를 호출Refresh
장착된 무기 리스트, 사용 가능 여부 리스트, 현재 선택된 인덱스를 받아서 처리한다.
인덱스가 유효하고 사용 가능할 경우
슬롯별로 해당 슬롯 타입에 맞는 무기를 검색하고, 아이콘 색상을 조정하고, 이름 및 탄약 텍스트를 표시한다. 슬롯이 선택된 경우에만 보이도록 enabled를 토글한다.
슬롯 선택 시 selectedSlotAlpha, 비선택 시 idleAlpha를 슬롯 이미지에 적용한다.
변화될 크기도 설정한다.
이전 선택 슬롯 (prevSelectedSlot)과 현재 슬롯 (currentSelectedSlot)이 다르면 슬롯을 빛나게 하는 애니메이션을 실행하는 이전 슬롯의 애니메이터를 해제하고 새 슬롯의 애니메이터를 활성화한다.
IsMatchSlot
GetWeaponName
InventoryUI, HackingUI, WeaponModifyUI 등을 추가하여 게임의 각 기능에 맞는 UI 프리팹을 제작하고 바인딩 할 예정이다.VerticalLayoutGroup에 Use Child Scale → Height 옵션이 꺼져 있어서, 자식 localScale이 레이아웃 계산에 반영되지 않았다.VerticalLayoutGroup → Control Child Size → Height 및 Use Child Scale → Height 모두 활성화WeaponUI에서 slotTransform[i].localScale을 Vector3.Lerp로 애니메이션하도록 전환LayoutRebuilder.ForceRebuildLayoutImmediate()에 잘못된 부모(layoutParent)를 넘겨줌LayoutRebuilder에 전달할 RectTransform을 VerticalLayoutGroup이 붙은 컨테이너(WeaponLayout)로 수정slotText[i].enabled = isSelectedslotAmmoText[i].enabled = isSelected && slotAmmoImage[i].enabled