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

# 解説動画
https://youtu.be/Ke03SEwCr5g

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

# 想定シーン
・パラメータ調節（特にビルドが大変なVR）
・シナリオライターとの共同開発

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


```csharp
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`
<img width="538" alt="スクリーンショット 2019-03-09 10.29.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/67439/7e23d26c-560c-51f4-36ae-ba2256022e74.png">

# 画像2
SHEET_NAMEは以下の文字列
<img width="463" alt="スクリーンショット 2019-03-09 10.33.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/67439/cbe6d117-39e8-1708-6587-092a3fe5e8f0.png">

# 応用（お化粧直し）
このコードを追加すると１つ１つ読み込める

```csharp

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]);
            }
		}
	}
```

# 追記：キャラクターデータを取得する応用編
以下のようなキャラクタークラスをスプレットシートのデータから生成する

```csharp: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));
	}
}
```

```csharp: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