[TIL] 36일 차 - Google Spread Sheet의 데이터를 Unity로 가져와 보자

ChangBeom·2025년 3월 18일

TIL

목록 보기
37/53
post-thumbnail

Google Spread Sheet의 데이터를 Unity로 가져올 수 있다면, Unity를 다룰 수 없는 기획자가 데이터를 생성할 수 있기 때문에 협업에 있어서 매우 중요한 요소이다. 오늘은 Google Spread Sheet에서 작성한 데이터를 Unity에서 사용할 수 있는 데이터로 가공하여 가져오는 법을 공부해보려고 한다.

참고 링크 : https://bonnate.tistory.com/262


[Google API 설정]

먼저 Google Spread Sheet API를 사용하기 위해 구글에서 설정을 해줘야 한다.

1. 아래의 링크(구글 클라우드 플랫폼)에 접속하여 로그인을 한다.

링크 : https://console.cloud.google.com/


2. 좌측 상단위의 버튼을 누른다. (나는 이미 HorrorEscape라는 프로젝트가 존재해서 다르게 보일 수 있다.)


3. 아래와 같은 창이 뜨면 오측 상단위의 새 프로젝트 버튼을 누른다.


4. 사용할 프로젝트 이름을 적고 만들기 버튼을 누른다.


5.알림에서 방금 생성한 프로젝트를 선택한다.


6. 탐색메뉴 -> API 및 서비스 -> OAuth 동의 화면으로 들어간다.


7. 시작하기 버튼을 누르고 다음 내용들을 작성한다.





8. OAUTH 클라이언트 만들기를 클릭한다.


9. 애플리케이션 유형과 이름을 작성하고 만들기 버튼을 누른다. (Unity에서 사용하려고 하기 때문에 데스크톱 앱으로 선택하자)


10. 생성된 클라이언트 ID와 클라이언트 보안 비밀번호를 기억해두자. 해당 값들은 Google Spread Sheet와 Unity를 연결할 때 사용한다.


11. 탐색메뉴에서 대상을 눌러 테스트 사용자를 추가 한다.


12. 마지막으로 Google Sheets API를 사용설정한다.


[Unity에 연동]

이제 유니티에 Google Spread Sheet를 연결해보자

1. Unity Asset Store에서 해당 API를 다운 받고 임포트 해준다.

링크 : https://assetstore.unity.com/packages/tools/utilities/google-sheets-to-unity-73410


2. Window -> GSTU -> Open Config를 클릭한다.


3. 이전에 발급 받았던 클라이언트 정보를 입력한 후 Build Connection을 누른다.(포트는 8080으로 한다)


4. 액세스 요청에 대한 페이지가 하나 뜨는데 아래 창이 나올 때 까지 진행 후 페이지를 닫는다.


[Unity에서 Google Spread Sheet의 데이터 가져오기]

이제 모든 준비는 끝났다. Script를 작성하여 Google Spread Sheet의 데이터를 Unity로 가져와서 가공해보자.

  • 나는 미리 저장해둔 대화 내용을 불러올 예정이라 다음과 같이 Google Spread Sheet를 수정했다.

이제 이 데이터를 Unity로 가져와보자

<Base Script>

using UnityEngine;

public abstract class DataReaderBase : ScriptableObject
{
    [Header("Sheet URL")]
    public string sheetURL;

    [Header("Sheet Name")]
    public string sheetName;

    [Header("Start Row Index")]
    public int startRowIndex;

    [Header("End Row Index")]
    public int endRowIndex;
}
  • Google Spread Sheet에 있는 데이터를 읽어올 때 필요한 기본적인 정보이다. Google Spread Sheet의 주소, Sheet이름, 읽어 올 데이터의 시작 Index, 마지막 Index 등이 들어간다.

<ChatData Script>

using GoogleSheetsToUnity;
using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.Events;

[Serializable]
public struct Chat
{
    public int id;
    public string content;

    public Chat(int id, string content)
    {
        this.id = id;
        this.content = content;
    }
}

[CreateAssetMenu(fileName = "Chat", menuName = "Scriptable Object/New ChatData")]
public class ChatData : DataReaderBase
{
    public List<Chat> chatDataList = new List<Chat>();

    /// <summary>
    /// 구글 스프레드 시트에서 데이터를 받아오는 함수
    /// </summary>
    /// <param name="list"> 구글 스프레드 시트의 셀 리스트 </param>
    internal void UpdateStats(List<GSTU_Cell> list)
    {
        int id = 0;
        string content = "";

        for(int i = 0; i < list.Count; i++)
        {
            switch (list[i].columnId)
            {
                case "id":
                    id = int.Parse(list[i].value);
                    break;
                case "content":
                    content = list[i].value;
                    break;
            }
        }
        chatDataList.Add(new Chat(id, content));
    }
}

//  인스펙터 창에서 데이터를 불러올 수 있는 버튼을 생성 (커스텀 에디터)

#if UNITY_EDITOR
[CustomEditor(typeof(ChatData))]
public class ChatDataReaderEditor : Editor
{
    ChatData data;

    private void OnEnable()
    {
        data = (ChatData)target;    
    }

    /// <summary>
    /// 커스터 에디터 버튼을 만들고, 버튼을 누르면 데이터를 불러옴
    /// </summary>
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        GUILayout.Label("\n\n스프레드 시트 읽어오기");

        if (GUILayout.Button("데이터 읽기(API 호출)"))
        {
            UpdateStats(UpdateMethodOne);
            data.chatDataList.Clear();
        }
    }

    /// <summary>
    /// 구글 스프레드 시트의 데이터를 읽는 함수
    /// </summary>
    /// <param name="callback"> 구글 스프레드 시트를 읽어온 후 이 데이터를 처리할 함수를 넣어야 함 </param>
    /// <param name="mergedcells"> 병합되어 있는 셀을 고려할 것 인지 (false면 고려x)</param>
    private void UpdateStats(UnityAction<GstuSpreadSheet> callback, bool mergedcells = false)
    {
        SpreadsheetManager.Read(new GSTU_Search(data.sheetURL,data.sheetName), callback, mergedcells);
    }

    /// <summary>
    /// 구글 시트의 내용을 data에 저장
    /// </summary>
    /// <param name="sheet"> 읽어온 구글 시트 </param>
    private void UpdateMethodOne(GstuSpreadSheet sheet)
    {
        for (int i = data.startRowIndex; i <= data.endRowIndex; ++i)
        {
            data.UpdateStats(sheet.rows[i]);
        }
        EditorUtility.SetDirty(target);
    }
}
#endif

위 코드가 Google Spread Sheet에서 데이터를 불러와 가공하는 코드이다. 코드에 대한 설명은 주석을 확인하면 알 수 있을 것이다.

  • 커스텀 에디터로 만든 Inspector창의 데이터 읽기(API 호출) 버튼을 누르면 데이터를 읽어 올 수 있다.


해당 기술을 사용하면 대화 내용 뿐만아니라 Google Spread Sheet에 저장한 데이터라면 아무거나 읽어올 수 있다. Google Spread Sheet에 다양한 정보를 저장하여 협업에 사용해보자.

0개의 댓글