質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1488閲覧

GASによるdoGET()やdoPOST()を使い、UnityからGET、POST通信でJSON形式を受け取る方法

TsukasaIshihara

総合スコア14

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/06/17 11:51

###1.本題
こんにちは、私はグーグルスプレッドシートの値をGASを利用して操作し範囲指定した箇所をJSON形式としてUnity側に読み込ませたいのですが、このサイトを利用したところGET()のところのJSON取得部分が省略されて書かれています

C#

1 2IEnumerator Get (string url) { 3 // HEADERはHashtableで記述 4 Hashtable header = new Hashtable (); 5 header.Add ("Accept-Language", "ja"); 6 7 // 送信開始 8 WWW www = new WWW (url, null, header); 9 yield return www; 10 11 // 成功 12 if (www.error == null) { 13 Debug.Log("Get Success"); 14 15 // 本来はサーバからのレスポンスとしてjsonを戻し、www.textを使用するが 16 // 今回は便宜上、下記のjsonを使用する 17 string txt = "{\"name\": \"okude\", \"level\": 99, \"friend_names\": [\"ichiro\", \"jiro\", \"saburo\"]}"; 18 // 自作したTestResponseクラスにレスポンスを格納する 19 TestResponse response = JsonMapper.ToObject<TestResponse> (txt); 20 Debug.Log("name: " + response.name); 21 Debug.Log("level: " + response.level); 22 Debug.Log("friend_names[0]: " + response.friend_names[0]); 23 Debug.Log("friend_names[1]: " + response.friend_names[1]); 24 Debug.Log("friend_names[2]: " + response.friend_names[2]); 25 } 26 // 失敗 27 else{ 28 Debug.Log("Get Failure"); 29 } 30 }

どうすれば、GASで記述したdoGET()のreturn部分の情報をUnity側で扱えるのでしょうか?(GAS側からのreturnの値はどこに格納されているまたどのような形式で格納されているのでしょうか?)

GAS自体のプログラムイメージはこのサイトをイメージしています

JavaScript

1var url = 'https://docs.google.com/spreadsheets/d/***スプレッドシートID***/pubhtml'; 2var sheetName = '***シート名***'; 3var book = SpreadsheetApp.openByUrl(url); 4var sheet = book.getSheetByName(sheetName); 5 6function doOutput(e){ 7 var json = convSheet(sheet); 8 Logger.log(JSON.stringify(json)); 9 return JSON.stringify(json); 10} 11 12function convSheet(sheet) { 13 14 var colStartIndex = 1; 15 var rowNum = 1; 16 var firstRange = sheet.getRange(1, 1, 1, sheet.getLastColumn()); 17 var firstRowValues = firstRange.getValues(); 18 var titleColumns = firstRowValues[0]; 19 20 var lastRow = sheet.getLastRow(); 21 var rowValues = []; 22 for(var rowIndex=2; rowIndex<=lastRow; rowIndex++) { 23 var colStartIndex = 1; 24 var rowNum = 1; 25 var range = sheet.getRange(rowIndex, colStartIndex, rowNum, sheet.getLastColumn()); 26 var values = range.getValues(); 27 rowValues.push(values[0]); 28 } 29 30 var jsonArray = []; 31 for(var i=0; i<rowValues.length; i++) { 32 var line = rowValues[i]; 33 var json = new Object(); 34 for(var j=0; j<titleColumns.length; j++) { 35 json[titleColumns[j]] = line[j]; 36 } 37 jsonArray.push(json); 38 } 39 return jsonArray; 40} 41

上記で使用されているのはdoOutput()ですが、doOutput()じゃないとだめなのでしょうか?
またdoOutput()とdoGet()の違いは何なのでしょうか?

###2.備考
・筆者はGASを使うのがはじめてなので、できる限りはじめっから具体的に説明してもらえると助かります

###3.追加質問
・returnで返される値の型はどんなものがあるのしょうか?
・Json形式によるやり取りとJsonファイルによるやり取りの違いはなんなのでしょうか?(今回の場合ではどちらの方法でも実行可能なのでしょうか?)

###4.環境
・Windows10
・Unity 2018.1.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

どうすれば、GASで記述したdoGET()のreturn部分の情報をUnity側で扱えるのでしょうか?(GAS側からのreturnの値はどこに格納されているまたどのような形式で格納されているのでしょうか?)

参照元のコードのコメントに// 本来はサーバからのレスポンスとしてjsonを戻し、www.textを使用するがと書いてあるとおり、www.text

上記で使用されているのはdoOutput()ですが、doOutput()じゃないとだめなのでしょうか?

またdoOutput()とdoGet()の違いは何なのでしょうか?

doOutput()でなくていです。名前は何でもいい。参照元のサンプルコードを読むと関数名を指定しているところがあります。そこにdoOutputが指定されていますが、別のものにしたければそうすればいい。

doGetは、gasをウェブアプリケーションとして公開して、getでアクセスしたときに既定で呼ばれる関数。doOutputはexecution apiで自由に呼べるものの名前を筆者が名付けたもの。doGetで目的は達成できると思います。

returnで返される値の型

GASのことなら、文字列です。doOutputreturn JSON.stringify(json);というのがありますが、これは日本語で書くと、返す JSONを文字化する関数(json)なので、文字です。

unityのwwwのことなら、textのほかtextureがあるようです。

Json形式によるやり取りとJsonファイルによるやり取りの違いはなんなのでしょうか?

質問の意味が不明です。json形式というのが何を指し、jsonファイルというのは何を指すのでしょうか?unityのオブジェクトそのものは取得できません。gasでcontent typeをoctet streamで返したいとかそういうことですか?

投稿2018/06/17 12:20

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TsukasaIshihara

2018/06/18 03:10

回答ありがとうございます。 //本来はサーバからのレスポンスとしてjsonを戻し、www.textを使用するが という文面自体ではどこにレスポンスが来て、どのようにwww.textを使用するのかがわからないです
TsukasaIshihara

2018/06/18 04:35

調べていて、new演算子でWWWでインスタント生成し、それをwwwとしていますが、www.textのなかにレスポンスの値は入るということであっているでしょうか?
papinianus

2018/06/18 04:38

string txt = www.text; ではないかと思います。unityのコルーチンに明るくないのですが、↓のような使いかたを考えると「new演算子でWWWでインスタント生成し、それをwwwとしていますが、www.textのなかにレスポンスの値は入るということであっている」と私も思います。 // 成功 if (www.error == null) {
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問