복습: 아이템 데이터베이스
Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 50개 중 23번째.
챌린지
중급대장간 상점은 게임의 모든 상점이 공유하는 아이템 데이터베이스에서 아이템을 판매합니다. 두 가지 에셋 유형과 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로 구매하는 기능을 여기에 추가합니다
}