UGS(유니티 구글시트)로 데이터 관리하는 방법/ 스크립트에서 데이터 추가하는것 이어서 작성할 것

2024. 11. 28. 21:02카테고리 없음

데이터관리로 유니티 구글 시트(Unity Google Sheets)를 선택한 이유

Unity에서의 구글 시트를 선택한 이유는 게임 데이터 관리와 실시간 수정이 간편하다는 장점때문에 선택을 하게 됐다.

구글 시트를 Unity에서 사용하는 이유

  1. 실시간 수정 및 관리 편의성
    - UGS는 Unity 에디터와 직접 연동되어 별도의 툴 없이Unity 내부에서 데이터를 실시간으로 확인하고 수정 가능하다.
    - 개발자뿐만 아니라 비개발자(디자이너, 기획자)도 UGS 대시보드에서 데이터를 쉽게 수정할 수 있어서 직관적인 UI와 관리 편.          의성이 실무에서 큰 장점으로 뽑힌다.
    • MySQL, PostgreSQL, MongoDB 등은 데이터를 수정하려면 DB 쿼리를 작성하거나, 별도의 관리 툴을 통해 접근해야 한다
  2. Unity와의 강력한 통합
    - UGS는 Unity 엔진에 최적화된 서비스로, 게임 개발과 데이터 관리를 하나의 환경에서 모두 처리할 수 있다.
    • Firebase는 Unity SDK를 제공하지만, 완전히 Unity 친화적인 환경은 아니라서 추가적인 설정이 필요하다.
    • SQL 계열 데이터베이스나 NoSQL (MongoDB)은 Unity와 통합하려면 커스텀 코드 작성 및 추가적인 백엔드 개발이 필요하다.
  3. 스케일링 및 글로벌 지원
    - UGS는 클라우드 기반으로, 사용량이 증가해도 안정적으로 스케일링이 가능하며, 글로벌 서버를 통해 빠르고 안정적인 데이터 제공을 보장한다.
    - 게임 출시 후 유저가 많아져도 서버를 따로 관리하지 않아도 되는 편리함 안정적인 서비스 제공이 큰 매력포인트이다.

    • Firebase는 글로벌 서비스에 강점이 있지만, Unity SDK에서 일부 제한적인 기능으로 인해 직접 API 호출이 필요할 때가 있다.
    • SQL 계열 데이터베이스는 클라우드로 확장하려면 추가 설정 및 비용 발생한다.
  4. 데이터 관리와 게임 분석 통합
    - 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를 가지고 있는 데이터를 가져올 수 있다.