Unity를 사용 및 배워보면 데이터를 저장 및 불러오기에 대한 고민이 깊어진다.
유저가 플레이했던 정보를 어떻게 저장할지.., 아이템의 정보는 어떻게 처리할지..., 대화창의 대화는 어떻게 처리할지... 등등
그래서 Unity의 데이터 저장하는 방법중 excel로 불러오는 방법을 적어보고자 한다.
답은 No이면서 Yes이다. Unity내에서 지원되는 부분이 없지만, c#내에서 있는 Microsoft Excecl Object Library
을 참조로 추가하여 직접 구현할 수 있다.
또는 유저가 만들어 놓은 스크립트를 이용해야 된다.
당연빠따 유저가 만들어놓은 것을 사용하는 것이다. - 사이트
사용방법은 README(리드미)를 읽던가 여기 유튜브(고박사의 유니티 노트)를 시청하시면 됩니다.
위에 올려놓은 사이트에 접속하여 다운받는다 clone이든 Download zip이등 원하는 방법으로 다운받으면 된다.
Assets
폴더 안에있는 ExcelImporter
을 자신의 Unity Assets폴더 안으로 옮겨준다.
첫행에 변수명, 나머지 행에는 값을 넣으주면 된다.
# 주석주석
_itemType
은 enum입니다._id _itemName _itemExplanation _itemType _price _dropPrefabPath _iconPath _maxCount
0 나무 검 나무로 만든 검입니다. Equipment 10 Prefabs/Entities/DropItem/0 Sprite/Icon/0 1
1 허름한 가죽 재료가 될 허름한 가죽입니다. Equipment 10 Prefabs/Entities/DropItem/1 Sprite/Icon/1 1
2 허름한 가죽 상의 허름한 가죽으로 만든 상의입니다. Equipment 10 Prefabs/Entities/DropItem/@@@ Sprite/Icon/@@@ 1
3 허름한 가죽 하의 허름한 가죽으로 만든 하의입니다. Equipment 10 Prefabs/Entities/DropItem/@@@ Sprite/Icon/@@@ 1
4 허름한 가죽 모자 허름한 가죽으로 만든 모자입니다. Equipment 10 Prefabs/Entities/DropItem/@@@ Sprite/Icon/@@@ 1
5 테스트용 포션 포션 Consumable 1 Prefabs/Entities/DropItem/@@@ Sprite/Icon/@@@ 99
6 기타기타기타 기타기타기타 ETC 100 Prefabs/Entities/DropItem/@@@ Sprite/Icon/@@@ 99
7 테스트용 퀘스트 아이템 퀘스트 아이템 QuestItem 1 Prefabs/Entities/DropItem/@@@ Sprite/Icon/@@@ 1
예시
public enum ItemType
{
Equipment,
Consumable,
ETC,
QuestItem
}
[System.Serializable]
public class ItemData
{
[SerializeField] private int _id;
[SerializeField] private string _itemName;
[SerializeField] private string _itemExplanation;
[SerializeField] private ItemType _itemType;
[SerializeField] private int _price;
[SerializeField] private int _maxCount;
[SerializeField] private string _dropPrefabPath;
[SerializeField] private string _iconPath;
private GameObject _dropPrefab;
private Sprite _icon;
public int ID { get { return _id; } }
public string ItemName { get { return _itemName; } }
public string ItemExplanation { get { return _itemExplanation; } }
public ItemType ItemType { get { return _itemType; } }
public int Price { get { return _price; } }
public int MaxCount { get { return _maxCount; } }
public GameObject DropPrefab
{
get
{
if(_dropPrefab == null)
{
_dropPrefab = Resources.Load(_dropPrefabPath) as GameObject;
}
return _dropPrefab;
}
}
public Sprite Icon
{
get
{
if (_dropPrefab == null)
{
_icon = Resources.Load(_iconPath) as Sprite;
}
return _icon;
}
}
}
만든 excel파일을 우클릭하여 생성에 있는 ExcelAssetScript를 눌른다.
그러면 새로운 스크립트가 만들어진다.
이미 만들어진 파일(내용 수정한 상태)
원본 상태
안에 있는 내용을 수정해주면 됩니다.
List<EntityType>
을 List<내가만든 클래스이름>
으로 수정하면 됩니다.수정 후 상태
ClassName.Class에서 선언된 변수이름.내가 사용할 변수
로 사용해주시면 됩니다using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemDB : CustomSingleton<ItemDB>
{
[SerializeField] private ItemExcel _itemExcel;
public bool GetItemData(int id, out ItemData itemData)
{
if(id > _itemExcel.ItemDatas.Count)
{
Debug.Log("Error 아이템의 id값을 확인해 주세요.");
itemData = null;
return false;
}
else
{
itemData = _itemExcel.ItemDatas[id];
return true;
}
}
}