9
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Unity超簡単!Googleスプレッドシートでパラメータ調節する方法(共同開発にオススメ)

解説動画

出来ること

Googleスプレッドシートの情報をUnityに読み込ませ、アプリ実行中でもパラメータ変更ができる
(Deploygateで公開したアプリに関して、スプレットシートの変更だけでパラメータが変更できることは確認済み)

想定シーン

・パラメータ調節(特にビルドが大変なVR)
・シナリオライターとの共同開発

(VRでうまくいくかはまだ試していないので、コメントで報告していただけると嬉しいです)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class CSVReader : MonoBehaviour {
    const string SHEET_ID = "IDを入れる詳しくは下の画像1";
    const string SHEET_NAME = "シート名を入れる詳しくは下の画像2";

    IEnumerator Method(string _SHEET_NAME){
        UnityWebRequest request = UnityWebRequest.Get("https://docs.google.com/spreadsheets/d/"+SHEET_ID+"/gviz/tq?tqx=out:csv&sheet="+_SHEET_NAME);
        yield return request.SendWebRequest();

        if(request.isHttpError || request.isNetworkError) {
            Debug.Log(request.error);
        }
        else{
            Debug.Log(request.downloadHandler.text);
        }
    }
    public void ReLoadGoogleSheet(){
        StartCoroutine(Method(SHEET_NAME));     
    }   
}

画像1

SHEET_IDは以下の
https://docs.google.com/spreadsheets/d/この部分/edit?usp=sharing
スクリーンショット 2019-03-09 10.29.14.png

画像2

SHEET_NAMEは以下の文字列
スクリーンショット 2019-03-09 10.33.02.png

応用(お化粧直し)

このコードを追加すると1つ1つ読み込める


using System.IO;
    void ViewCSV(string _text){
        StringReader reader = new StringReader(_text);
        string[] headerline = null;
        while (reader.Peek() != -1){
            string line = reader.ReadLine();        // 一行ずつ読み込み
            string[] elements = line.Split(',');    // 行のセルは,で区切られる
            for(int i=0; i<elements.Length; i++){
                if(elements[i] == "\"\""){
                    continue;                       // 空白は除去
                }
                elements[i] = elements[i].TrimStart('"').TrimEnd('"');
                Debug.Log(elements[i]);
            }
        }
    }

追記:キャラクターデータを取得する応用編

以下のようなキャラクタークラスをスプレットシートのデータから生成する

CharacterData.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharacterData {
    int id;
    string name;
    int hp;
    int at;

    public CharacterData(string[] _dataList){
        id      = int.Parse(_dataList[0]);
        name    = _dataList[1];
        hp      = int.Parse(_dataList[2]);
        at      = int.Parse(_dataList[3]);
    }
    public void DebugParametaView(){
        Debug.Log(String.Format("{0} id:{1} hp:{2} at:{3}", name, id, hp, at));
    }
}
CSVReader.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using System.IO;

public class CSVReader : MonoBehaviour {
    const string SHEET_ID = "シートID";
    const string SHEET_NAME = "シート1";

    void Start(){
        StartCoroutine(Method(SHEET_NAME));
    }

    IEnumerator Method(string _SHEET_NAME){
        UnityWebRequest request = UnityWebRequest.Get("https://docs.google.com/spreadsheets/d/"+SHEET_ID+"/gviz/tq?tqx=out:csv&sheet="+_SHEET_NAME);
        yield return request.SendWebRequest();

        if(request.isHttpError || request.isNetworkError) {
            Debug.Log(request.error);
        }
        else{
            List<string[]> characterDataArrayList = ConvertToArrayListFrom(request.downloadHandler.text);           
            foreach(string[] characterDataArray in characterDataArrayList){
                CharacterData characterData = new CharacterData(characterDataArray);
                characterData.DebugParametaView();
            }
        }
    }

    List<string[]> ConvertToArrayListFrom(string _text){
        List<string[]> characterDataArrayList = new List<string[]>();
        StringReader reader = new StringReader(_text);
        reader.ReadLine();  // 1行目はラベルなので外す
        while (reader.Peek() != -1){
            string line = reader.ReadLine();        // 一行ずつ読み込み
            string[] elements = line.Split(',');    // 行のセルは,で区切られる
            for(int i=0; i<elements.Length; i++){
                if(elements[i] == "\"\""){
                    continue;                       // 空白は除去
                }
                elements[i] = elements[i].TrimStart('"').TrimEnd('"');
            }
            characterDataArrayList.Add(elements);
        }
        return characterDataArrayList;
    }
}

スタジオしまづでゲームの作り方を学びたい人向けのサロン▶︎https://camp-fire.jp/projects/view/149191

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
9
Help us understand the problem. What are the problem?