2024. 11. 28. 21:02ㆍ카테고리 없음
데이터관리로 유니티 구글 시트(Unity Google Sheets)를 선택한 이유
Unity에서의 구글 시트를 선택한 이유는 게임 데이터 관리와 실시간 수정이 간편하다는 장점때문에 선택을 하게 됐다.
구글 시트를 Unity에서 사용하는 이유
- 실시간 수정 및 관리 편의성
- UGS는 Unity 에디터와 직접 연동되어 별도의 툴 없이Unity 내부에서 데이터를 실시간으로 확인하고 수정 가능하다.
- 개발자뿐만 아니라 비개발자(디자이너, 기획자)도 UGS 대시보드에서 데이터를 쉽게 수정할 수 있어서 직관적인 UI와 관리 편. 의성이 실무에서 큰 장점으로 뽑힌다.
- MySQL, PostgreSQL, MongoDB 등은 데이터를 수정하려면 DB 쿼리를 작성하거나, 별도의 관리 툴을 통해 접근해야 한다
- MySQL, PostgreSQL, MongoDB 등은 데이터를 수정하려면 DB 쿼리를 작성하거나, 별도의 관리 툴을 통해 접근해야 한다
- Unity와의 강력한 통합
- UGS는 Unity 엔진에 최적화된 서비스로, 게임 개발과 데이터 관리를 하나의 환경에서 모두 처리할 수 있다.
- Firebase는 Unity SDK를 제공하지만, 완전히 Unity 친화적인 환경은 아니라서 추가적인 설정이 필요하다.
- SQL 계열 데이터베이스나 NoSQL (MongoDB)은 Unity와 통합하려면 커스텀 코드 작성 및 추가적인 백엔드 개발이 필요하다.
- 스케일링 및 글로벌 지원
- UGS는 클라우드 기반으로, 사용량이 증가해도 안정적으로 스케일링이 가능하며, 글로벌 서버를 통해 빠르고 안정적인 데이터 제공을 보장한다.
- 게임 출시 후 유저가 많아져도 서버를 따로 관리하지 않아도 되는 편리함과 안정적인 서비스 제공이 큰 매력포인트이다.
- Firebase는 글로벌 서비스에 강점이 있지만, Unity SDK에서 일부 제한적인 기능으로 인해 직접 API 호출이 필요할 때가 있다.
- SQL 계열 데이터베이스는 클라우드로 확장하려면 추가 설정 및 비용 발생한다.
- 데이터 관리와 게임 분석 통합
- UGS는 데이터 관리뿐만 아니라 게임 분석 및 사용자 통계를 제공하는 기능도 포함되어 있어, 다양한 데이터를 하나의 플랫폼에서 관리 가능하다.
- UGS는 게임 데이터와 사용자 분석 데이터를 하나의 대시보드에서 관리 가능하여, 팀 간 협업 및 데이터 기반 의사결정을 더욱 쉽게 만든다.
- MongoDB, MySQL 등은 단순히 데이터를 저장/조회하는 역할을 할 뿐, 추가적인 분석 도구를 제공하지 않는다.
- Firebase는 일부 분석 기능을 제공하지만, 게임 특화된 데이터(게임 내 진행 상황, 유저 행동 패턴 분석)까지는 부족하다.
사용 방법
유니티 패키지매니저에서 추가하는 방법있는데 그거는 밑에 링크를 참고해서 추가하면 될거 같다.
https://github.com/shlifedev/uni-google-sheets
GitHub - shlifedev/uni-google-sheets: Google Sheet Intergration for Unity
Google Sheet Intergration for Unity . Contribute to shlifedev/uni-google-sheets development by creating an account on GitHub.
github.com
추가가 끝나면 이제 세팅을 해야하는데
이렇게 세팅을 해주면 데이터베이스가 생성이 된다.
들어가서 데이터를 추가하면 밑에와 같이 만들 수 있다.
그럼 그 데이터를 어떻게 사용하냐
UGS데이터 가져오는 방법
구글에 시트를 만들고 나면 유니티에서 구글 시트 정보가 저장된 스크립트를 하나 만드는데 그거를 사용하면 구글시트에 작성한 데이터를 사용할 수 있다.
사용방법
시트 정보가 저장된 스크립트를 상속받아서 해당 스크립트에서 데이터를 가져오면 된다. 이때 시트데이터를 관리하는 스크립트를 따로 둬서 정보를 쉽게 가져올 수 있다.
public class DataManager : Singleton<DataManager>
{
public CharacterDataManager Character;
public ItemDataManager Item;
public QuestDataManager Quest;
public DungeonDataManager Dungeon;
public SpawnerDataManager Spawner;
public MonsterDataManager Monster;
public SkillDataManager Skill;
public ObjectDataManager Object;
public StoreDataManager Store;
public void Initialize()
{
UnityGoogleSheet.LoadAllData();
Character = new CharacterDataManager();
Item = new ItemDataManager();
Quest = new QuestDataManager();
Dungeon = new DungeonDataManager();
Spawner = new SpawnerDataManager();
Monster = new MonsterDataManager();
Skill = new SkillDataManager();
Object = new ObjectDataManager();
Store = new StoreDataManager();
}
}
public class ItemDataManager : ItemData
{
public ItemData GetItemData(int itemId)
{
return ItemDataMap[itemId];
}
public List<ItemData> GetItemDataListByType()
{
//return ItemDataList.FindAll(x => x.itemType == Weapon);
return null;
}
public bool Equipment(int itemid)
{
if (!ItemDataMap.ContainsKey(itemid)) {
Debug.LogError("Item ID not found in the dictionary: " + itemid);
return false; // 또는 처리할 로직
}
switch (ItemDataMap[itemid].itemType)
{
case ItemType.Weapon:
case ItemType.Ring:
case ItemType.Head:
case ItemType.Body:
case ItemType.Belt:
case ItemType.Foot:
return true;
default:
return false;
}
}
}
시트의 정보를 가져올때에는 해당시트의 이름 + List 혹은 Map을 붙이면 정보를 가져올 수 있는데 List는 해당 정보를 다 가져오는 거고 Map은 특정 데이터 하나를 가져오는 것이다. ex) ItemDataMap / ItemDataList
이렇게 만들어두면 이제 시트에 저장된 정보를 가져오고 싶을때 DataManager.Instance.Item.GetItemData(1001)이런식으로 작성하면 해당 1001번의 id를 가지고 있는 데이터를 가져올 수 있다.