LoginSignup
22
10

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-03-09

解説動画

出来ること

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

22
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
10