今回作るのはこんな流れのとてもシンプルなプログラム。
- ワールド内のアイテムをクリック
- クリックしたユーザーIDをサーバー側で受信し、そのまま返却
- ワールド内のログにユーザーIDを表示
凄まじく単純なアルゴリズムですが、これが基本的な流れになるのであとはこれをカスタマイズしていろいろな処理ができるはずです。
ではまずクリックするオブジェクトを作っていきますが、オブジェクトはCubeでオッケーです。このCubeにAdd ComponentでScript Itemをアタッチし、ソース部分に下記のJavaScriptコードを記入してください。
$.onInteract(player => {
let str = player.userId;
$.callExternal(str, "call external");
});
$.onExternalCallEnd((response, meta, errorReason) =>{
$.log(response);
});
では次にサーバー側のプログラムを書いていきます。レンタルサーバーにFTPで下記PHPファイルを設置しましょう。
<?php
header('Content-Type: application/json');
// 受信
$json = file_get_contents("php://input");
$array = json_decode($json, true);
$in = $array['request'];
// 処理(DB入出力等)
$result = $in;
// 返却
$out = array('verify' => 'ここにトークンの文字列を入れる', 'response' => $result);
print(json_encode($out));
?>
こちらも非常にシンプルですね!入力したものを出力するだけのプログラムですが、この間に処理を入れることでいろいろな動作が可能となります。
特にデータベースを絡ませると多くのデータを永続的に格納し、そのデータにどこからでも高速にアクセスができるためできることが広がります。
単一ワールド内の動作であればこれまで通りにギミックとスクリプトを用いて実現ができるので、外部通信機能を利用する場面は、主に単一ワールドに依存しない情報管理を行う場合に効果を発揮するのではないかと思います。
ここまでできたらあとはワールドをアップロードして動作検証となりますが、アップロードする際には必ず下記設定をするようにしてください。そうしないとベータ版機能を使ったワールドは正常にアップロードができません。
- UnityのclusterメニューからSettingを選び、「ベータ版機能を有効にする」をチェック
- 外部通信接続先URLにサーバー側のPHPファイルのURLを登録しトークンをメモ
- サーバー側のPHPファイル内にメモしたトークン文字列を設定
ここまで行えばベータ版のワールドをアップロードして動作検証ができるものと思います。
以下デモワールドとなります。
ワールド間信号管理システム(ベータ版・外部通信機能) | メタバースプラットフォーム cluster(クラスター)
青い箱をクリックすると発信した信号が外部データベースに登録され、グレーの箱は一定時間でデータベース上の信号を感知して非表示となります。信号の生存時間はここでは1時間に設定しています。外部データベースで信号を管理しているため別ワールドからも青...