解説動画
出来ること
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
画像2
応用(お化粧直し)
このコードを追加すると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