//tips
//unity/js連動
Unityからのupdate指示を行なっているAPIPOSTを編集して、ボタンをクリックされたらリクエストを実行する形に変更する。
Unityのシーンに新たにボタンを作成し、クリックにより発動させるスクリプトをアタッチする。
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class APIPOSTUP : MonoBehaviour
{
public void jsonGO()
{
StartCoroutine(Upload());
}
IEnumerator Upload()
{
WWWForm form = new WWWForm();
//form.AddField("myField", "myData");
form.AddField("name", "json");
form.AddField("message", "ok");
using (UnityWebRequest www = UnityWebRequest.Post("http://localhost:3000/posts", form))
{
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Debug.Log("Form upload complete!");
}
}
}
}
こちらのjsonGO()メソッドをボタンクリック時に読み込ませるようにButtonオブジェクトのonclick設定をunityで行う。
ボタンクリックを実行すると若干タイミラグがあったが無事に画面に表示された。
クリックの回数での数字変化を含めて画面に表示したいため、変数を2つ追加した。
int count;
int hit=100;
public void jsonGO()
{
StartCoroutine(Upload());
count++;
hit--;
}
IEnumerator Upload()
{
WWWForm form = new WWWForm();
form.AddField("name", count);
form.AddField("message", hit);
きちんとクリックした回数のAddFieldが追加された。
クリック回数に関係なく現在のcount,hitを表示できるように加工する。
Unityからのクリックイベントを常時起動しているjsが受け取った際に、変更があった場合、その変更を反映する方法を考える。
現在unity側からのリクエストが追加項目しかないので、リクエストで、html側から現在の変数状況を取得し、その変数に再度代入処理を行うことができないか見ていく。
画面上の数字を変化させるという点でカウントダウンタイマーと似ているので、そちらも参考にする。
<section>
<p>今から<span id=“timer”></span>以内に注文すると50%オフ</p>
</section>
<script>
‘use strict’;
function countdown(due){
const now=new Date();
const rest = due.getTime() - now.getTime();
…
const count=[days,hours,min,sec];
return count;
}
let goal = new Date();
…
const counter=countdown(goal);
const time = ‘$(counter[1])時間…’;
document.getElementById(‘timer’).textContent=time;
</script>
ID箇所に対して、変数timeを代入しており、timeの部分をjsonを取得して加工できれば良いことになる。
現在jsonの反映はindex.htmlの
<tr v-repeat="posts">
<td>{{name}}</td>
<td>{{message}}</td>
</tr>
部分によってなされており、これはjsの
$.ajax({
type: 'GET',
url: apiUrl,
dataType: 'json',
success: function(json) {
message.$data.posts = json;
console.dir(json);
},
data: null
});
でjsonまるごとをmessage.$data.postsに代入していることで得られているので、jsonの最新追加分と過去の集計分を用いて、最新のものにアップデートさせる方法を考える。Unitywebrequest側でjsonデータの更新メソッドを探したが見つからなかったため。
まずはunity側のクリックにてページの値を加算する流れを考えていく。
Jsonに蓄積される配列の順序と前回idの値を参照し、今回のidの値に加算させる流れを考えていく。
Json.length-1のインデックスの値を取得してそれに加算する形を考える。
Js側からjsonの中身を削除できるかも確認。可能であればfor構文で一つずつidを拾い、加算したものを削除していけるはず。
var json=[…];
for(var I=0;i<json.length;i++)
{
count+=json[i]
}
Countで全て加算されているはずなので、この後にjsonの中身の配列を削除する。
Functionとして機能させたいので、
function calc(){
for(var I=0;i<json.length;i++)
{
count+=json[i]
}
return count;
}
var result = calc();
のような形になるか。calc();が呼ばれてからfunctionの中身が実行される順序になる。