Unity 내배캠 TIL

Unity 게임 개발 최종 팀 프로젝트(16주차 2일)

오늘도즐겨 2025. 1. 7. 22:37

🔥 1월 7일 월요일 목표 🔥

🔍 팀 프로젝트 유저테스트 기반 Gacha 시스템 리팩토링

🔍 팀 프로젝트 Banner Slot 동적할당 생각하기

 

📌 유저테스트 기반 Gacha 시스템 리팩토링

 

마우스 오버 했을 때 캐릭터가 커지든 뭔가 인터렉션이 있어야 할 것 같아요.(배너)

수령할 때 이펙트 / 연출 있어야 될 것 같고 + 일괄 수령 있어야 할 것 같아요 (버튼 추가)

돈이 있는데 왜 빨간색으로 글자가 나오죠?

왜 모집이 끝나면 메인화면으로 가는지 이해가 안 돼요.

모집을 빠르게 보고 싶다는 것은 결과를 빠르게 알고 싶다는 거지 그냥 결과도 안 보고 끝내고 싶다는 건 아니에요.

모집 시에 좋은 등급이 나왔으면 연출에 딜레이를 추가로 주고 sfx만 줘도 맛이 좋아져요.

이미 있는 것을 뽑았을 때 영혼석 (뭐 게임마다 부르는 이름은 다르지만, 한계 돌파에 쓰이는 재화)가 몇 개 생겼는지 표기해야 해요.

 

Exit 버튼 - 스킵 버튼으로 변경 클릭 시, 배너 캔버스 띄워주기

재화 체크 - 부족할 때 빨간색 표시

 

가챠씬에 전체 뽑은 이미지들을 확인할 수 있는 페이지에서 위치값 오류

 

기존에 레이아웃 그룹을 사용하지 않고, 미리 List에 할당해 주어,

위치값을 지정해 주고, DOTween을 활용해 애니메이션 적용!

근데 문제점은 생성되면서, 위치값이 이상하게 세팅이 되어

가챠배너스롯들이 10개 일 때와 1개 일 때의 위치를 마음대로 설정하기가 어려웠다.

 

💡 가챠배너스롯 리스트의 값이 1개일 때에만,

HorizontalLayOutGroup컴포넌트의 childAlignment를 스크립트로 제어

중앙으로 세팅해 주니 해결되었다.

if (GachaUnitBannerSlots.Count == 1)
{
    horizontalLayoutGroup.childAlignment = TextAnchor.MiddleCenter;
}

 

 

👀 레이아웃그룹 컴포넌트의 속성 변경방법

//레이아웃그룹 컴포넌트의 속성 변경방법
[SerializeField] private HorizontalLayoutGroup horizontalLayoutGroup;
horizontalLayoutGroup.childAlignment = TextAnchor.MiddleCenter;


📌 Banner Slot 동적할당 생각하기

기본적으로 배너슬롯을 인스펙터에서 할당해 주고, 위치값을 세팅해 주었었다.

하지만 1개 뽑기일 때와 10개 뽑기일 때가 다르기 때문에 동적할당이 알맞다고 생각했다.

 

먼저 빈 리스트를 퍼블릭으로 세팅해준다.

public class UIGachaBannerSlotsCanvas : UIBase
{
	public List<UIGachaBannerUnitSlot> GachaUnitBannerSlots = new ();
}

 

다음엔 리스트에 담아주고, 정보를 세팅할 공간에서 생성을 하고, 생성한 위치값을 지정해준다.

미리 정보를 세팅해주는 이유는 SkipButton을 활용해서 넘어 갔을 경우에도, 정보는 그대로 가져가기 위함

public void SetUnitPrefabs(int prefabsCount, int gachaUnitKey)
{
    uiGachaCanvasList.Clear();
    gachaResultList.Clear();
    for (int i = 0; i < prefabsCount; i++)
    {
        //TODO : 프리팹 미리생성, 비활성화 + I번째에 I번째 정보 세팅 해주기
        UIGachaCanvas uiGachaCanvas = Instantiate(uiSetGachaCanvas);
        uiGachaCanvas.gameObject.SetActive(false);
        uiGachaCanvasList.Add(uiGachaCanvas);
        UIGachaBannerUnitSlot gachaUnitBannerSlot = Instantiate(uiSetGachaBannerUnitSlot);
        gachaUnitBannerSlot.gameObject.SetActive(false);
        gachaUnitBannerSlot.transform.SetParent(uiGachaBannerSlotsCanvasPrefab.GachaBannerPanel.transform);
        uiGachaBannerSlotsCanvasPrefab.GachaUnitBannerSlots.Add(gachaUnitBannerSlot);
        
        SetGachaInfoInit(gachaUnitKey); // 뽑기 결과 전체데이터 세팅
        
        uiGachaCanvasList[i].Init(gachaResultList[i]);
        uiGachaCanvas.Init(gachaResultList[i]);
        uiGachaBannerSlotsCanvasPrefab.GachaUnitBannerSlots[i].Init(gachaResultList[i]);
        Core.UnitManager.AddUnitInfo(gachaResultList[i]);
    }
}

 

📌 UIGachaInfoCanvas - Banner Slot 클릭시 오픈