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 で動作を確認しています。