Unity 連携 - 物体が衝突したら kintone にデータ登録 -

著者名:サイボウズ 竹内 能彦

目次

はじめに

今回はゲームエンジンUnityとの連携を紹介!

Mashup Awards 2017 (External link) Unity (External link) さんも協賛されるということで、少しでもkintoneを使ってほしい!という想いから急遽連携サンプルを作成しました!

概要

球(Sphere)が平面(Plane)と衝突したら、kintoneにデータを登録するサンプルを紹介します。

結果

まずは結果からお見せしましょう!

UnityでSphereがPlaneと衝突すると、衝突した時間と物体名がkintoneに登録されます。

複数の物体と衝突させて、こんなグラフにすることもkintoneなら簡単です!

kintone の設定

kintone アプリの作成

次のフィールドをフォームに設置します。

フィールド名 フィールドタイプ フィールドコード
衝突日時 作成日時 作成日時
衝突した物体 文字列(1行) name

API トークンの生成

レコード追加権限のあるAPIトークンを生成します。
APIトークンの設定方法が分からない方は APIトークンを生成する (External link) を参考にしてください。
APIトークン設定を保存した後、「アプリを公開」または「アプリを更新」ボタンもお忘れなく!

アプリIDとAPIトークンはUnityの設定で利用するのでメモしましょう。
アプリIDはURLから確認できます。
先ほど作成したアプリを開きます。そのURLがhttps://{subdomain}.cybozu.com/k/705/の場合、705がアプリIDになります。

グラフの設定

グラフの設定はこちらの画像を参考にしてください。

Unity の設定

Unity のインストール

まずはUnityをインストールしないことには始まりません。
Unity のホームページ (External link) からインストーラーをダウンロードして、インストールしましょう。

Project の作成

Unityを起動したら、Projectを作成しましょう。

こんな画面が立ち上がったらOKです。

レイアウトの設定

画面レイアウトは「Windows」メニューの「Layouts」から選択できます。
お好みのレイアウトを選択しましょう!

Object の設置

「GameObject」メニューから「Plane」と「Sphere」を追加します。(重なっていますが、中央にSphereもあります)

さぁ次はSphereを上に引っ張り上げて、重力を付与しましょう。
上に引っ張り上げるには、Sphereを選択すると緑、赤、青の矢印が表示されるので、緑の矢印をドラッグします。
重力を付与するには、Sphereを選択した状態で右下の「Add Component」をクリックし、「Rigidbody」を選択します。

重力が付与されたか確認しましょう。
中央上にある再生ボタンをクリック!こんな感じになればOKです!

こんなに簡単に重力が付与できてよいのでしょうか。良ぃ~んです。

ちなみに、この再生ボタンを押している間の操作は保存されないので、動作が確認できたら再生ボタンを再度クリックしてください。
以降の作業は再生ボタンが無効の状態で進めます。

Script の設定

さぁ、いよいよkintoneとの連携です。とは言っても簡単なのでご安心を。
ますはScriptファイルを用意しましょう。中央にある「Assets」を右クリックして、「Create > C# Script」を選択します。
ファイル名はkintoneにしましょう。拡張子は自動付与されます。

先ほど作ったScriptファイルの中身を書き換えます。
スクリプト(C#アイコン)を右クリックして、「Show in Explorer」を選択し、ファイルの場所を開きます。
kintone.csファイルをエディターで開き、内容を以下のコードに書き換えます。
14行目は{subdomain}をご自身のサブドメイン名に変更します。
15,16行目は先ほどメモした、アプリIDとAPIトークンに変更します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
* Unity-kintone
* Copyright (c) 2017 Cybozu
*
* Licensed under the MIT License
*/
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using System.Text;

public class kintone : MonoBehaviour
{
  const string domain = "{subdomain}.cybozu.com"; // ドメイン名に変更
  const int appid = xxx; // アプリIDに変更
  const string token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // APIトークンに変更


  void OnCollisionEnter(Collision collision)
  {
    Debug.Log("collision enter");
    var name = collision.gameObject.name;
    var url = "https://" + domain + "/k/v1/record.json";
    var body = "{\"app\": " + appid + ", \"record\": {\"name\": {\"value\": \"" + name + "\"}}}";
    StartCoroutine(Post(url, body));
  }

  IEnumerator Post(string url, string body)
  {
    Debug.Log("post start");
    var request = new UnityWebRequest(url, "POST");
    byte[] bodyRaw = Encoding.UTF8.GetBytes(body);
    request.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw);
    request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
    request.SetRequestHeader("Content-Type", "application/json");
    request.SetRequestHeader("X-Cybozu-API-Token", token);

    yield return request.SendWebRequest();

    Debug.Log("Status Code: " + request.responseCode);
    if (request.result != UnityWebRequest.Result.Success) {
      Debug.Log(request.error);
    } else {
      var res = request.downloadHandler.text;
      var json = JsonUtility.FromJson<KintoneRes>(res);
      Debug.Log(string.Format("id: {0}, revision: {1}", json.id, json.revision));
    }
  }
}

public class KintoneRes
{
  public int id;
  public int revision;
}

Scriptの内容が編集できたら保存し、そのScriptをSphereにドラッグ&ドロップします。

Sphereを選択した際に、kintone(script)が表示されればバッチリです。

再生ボタンをクリックして、kintoneにデータが登録されるか確認しましょう!

おわりに

今回はkintoneにデータを登録しましたが、kintoneのデータの取得も可能です。
データの保存先としてkintoneおすすめです!

information

このTipsは、Windows 10 Pro 1703、Unity 2017.1.1f1 Personalで動作を確認しています。