Menu
CoddyTech

복습: 아이템 데이터베이스

Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 50개 중 23번째.

challenge icon

챌린지

중급

대장간 상점은 게임의 모든 상점이 공유하는 아이템 데이터베이스에서 아이템을 판매합니다. 두 가지 에셋 유형과 Shop을 작성하세요:

  • ItemData (ItemData.cs에 있음): Create 메뉴 항목과 공개 필드 itemName(string) 및 price(int)가 있는 ScriptableObject입니다.
  • ItemDatabase (ItemDatabase.cs에 있음): Create 메뉴 항목과 공개 필드 하나인 items(ItemData 목록)가 있는 ScriptableObject입니다.
  • Shop에는 ItemDatabase 유형의 공개 필드 database가 있습니다. itemText에는 선택한 아이템이 표시됩니다. 처음에는 첫 번째 아이템이 표시되며, 형식은 Iron Sword: 30 gold입니다. goldText에는 골드가 Gold: 50으로 표시됩니다.
  • 오른쪽 화살표를 누르면 다음 아이템을 선택하고, 마지막 아이템 다음에는 다시 첫 번째 아이템을 선택합니다. 왼쪽 화살표를 누르면 반대 방향으로 이동하며, 첫 번째 아이템에서 마지막 아이템으로 넘어갑니다.
  • 스페이스 키를 누르면 선택한 아이템을 구매합니다. 플레이어가 이미 구매한 아이템이면 Already owned: Iron Sword를 로그에 기록합니다. 아이템 가격이 보유 골드보다 비싸면 Not enough gold for Iron Sword를 로그에 기록합니다. 그렇지 않으면 골드가 가격만큼 줄고, 아이템을 보유하게 되며, 텍스트가 업데이트되고 Console에 Bought Iron Sword가 표시됩니다.
  • 구매한 아이템은 Shop에 보관하세요. 에셋은 그대로 둡니다. 데이터베이스는 공유되며, Editor에서 에셋을 변경하면 Play 모드가 끝난 뒤에도 변경 사항이 유지됩니다.

프로젝트에는 ItemData 에셋 네 개(Iron Sword 30, Oak Shield 20, Healing Potion 10, Long Bow 45)와 이 순서대로 아이템이 나열된 Database 에셋이 있습니다. Inspector에서 Database를 Shop의 database 필드에 넣으세요. Play를 누르고, 쇼핑한 다음 Check를 누르세요.

직접 해보기

using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;

public class Shop : MonoBehaviour
{
    public TMP_Text itemText;
    public TMP_Text goldText;
    public int gold = 50;

    // 데이터베이스 필드, 화살표 키로 둘러보는 기능, Space로 구매하는 기능을 여기에 추가합니다
}

Unity 게임 아키텍처의 모든 레슨