내일배움캠프 64일차

박나연·2025년 7월 7일

내배캠

목록 보기
57/69

최종 프로젝트 3주차 - 상점 로직 (구매)

오늘의 키워드 : 구매로직짜기

아.. 원래 오늘 구매랑 판매 다 하려고 했는데 생각보다 좀 걸려버렸다. 내일 오전 중에 완성을 목표로 해보자고!

<오늘 작업> 7/7 럭키 세븐~

  • StoreManager.cs 작성 : 상점 전체 흐름 제어
  • PurchaseManager.cs 작성 : 구매리스트에 확률 적용, 슬롯 클릭→구매창→구매 확정
  • PurchaseSlotController.cs 작성 : 슬롯 UI 표시
  • InventoryUIManager.cs 작성 : 인벤토리 슬롯 관리, 빈 슬롯 검색

상점 구매 로직

1. 구매 목록 생성

  • StoreManagerStart() 또는 씬 로드 시 GeneratePurchaseList() 호출

2. 구매 슬롯 클릭
1. PurchaseSlotControllerOnPointerClickOnSlotClicked(this)
2. PurchaseManager: selectedSlot = slot 저장

  • 랜덤으로 전체 아이템 개수 결정 (minItems ~ maxItems)
  • potionProb, runeProb, skillProb에 따라 풀(potionPool, runePool, skillPool)에서 가중치 랜덤 추첨
  • purchaseSlotPrefabpurchaseList(ScrollView Content)에 Instantiate
  • PurchaseSlotController.Initialize(data, OnSlotClicked) 로 아이콘·이름·가격 세팅
  1. ShowPurchaseWindow(data) 호출
    • windowIcon.sprite = data.icon
    • windowName.text = data.displayName
    • windowDesc.text = data.description
    • windowPrice.text = data.price.ToString()
    • purchaseWindow.SetActive(true)

3. 구매 확정

  • 구매창 confirmPurchaseBtn.onClickPurchaseManager.ConfirmPurchase()
  • selectedSlot.Data.itemType에 맞춰 potionItemPrefab, runeItemPrefab, skillItemPrefab 중 하나 선택
  • InventoryUIManager.FindFirstEmptySlot() 로 빈 인벤토리 슬롯 검색
  • 빈 슬롯이 있으면:
    1. Instantiate(prefab, slot.transform, false)
    2. di.Setup(data)
    3. rectTransform.anchoredPosition = Vector2.zero
  • selectedSlot.SoldOut() → 구매 리스트에서 Sold-Out 표시
  • ClosePurchaseWindow() → 구매창 닫기

4. 인벤토리 관리

  • InventoryUIManager
    • OnOffInventory() : I키 또는 버튼으로 인벤토리 열기/닫기
    • FindFirstEmptySlot() : 모든 InventorySlotController 순회 → 자식에 DraggableItem 없으면 반환

마무리하며

이번주부터 모의면접이 진행된다고 한다. 너무 싫고 떨려...

내일 할 일

내일은 소지금도 연결해서 구매, 판매 다 할 수 있도록 하려고 한다. 오후에는(밀려도 저녁 이후부터는) 타이틀 씬 작업을 진행해보려고 한다.

0개의 댓글