clusterでワールドを作成する上での制約

この記事は202406アドベントカレンダー15日目の記事となります。
【VR未経験エンジニアがメタバースでのWEB申込を実現するための挑戦】シリーズの第4弾として、保険のWeb申込システムをPoCしていたチームが、メタバースプラットフォームのCluster上にWeb申込画面を再現する取り組みを記事にまとめていきます。

我々がclusterのワールドを作成する中で直面した制約

この記事では、我々がclusterでワールドを作成していく中で直面した課題やclusterの制約について記載します。clusterでは通常のUnityのScriptが動かないことや独自のルールがありますので、これからclusterを試してみたい方は参考にしてみてください。

UnityのRuntimeスクリプト(C#)は動作しない

clusterでスクリプトを書く場合には、clusterが提供しているcluster scriptを使用します。
そのため、C#で記述されたライブラリーやパッケージなどは基本的に動作しません。

外部通信はclusterのサーバを経由しないといけない

clusterの外部通信APIは、エンドポイントが1つしか登録できず、処理の振り分けにはリクエストパラメーターに振り分けるなど工夫が必要になります。
さらに、呼び出し回数やサイズに制限があるため、不用意に呼び出さないようにする対応が必要になります。
clusterもサーバを経由するため、個人情報の取り扱い等のセキュアな運用をするためには、課題がありそうです。

clusterの外部通信仕様

アイテムの親子関係

clusterのアイテムを追加したオブジェクトは、親子関係にすることができません
この制約はclusterの制約の中でも特に気をつけなければならない制約で、アイテムの親子関係がある場合、
clusterへのアップロード時にエラーとなります。
アップロードしようとするまで気が付かないことも多いため、常に親子関係を意識した設計をしましょう!(我々も何度もアップロード時のエラーを経験しました・・・)
clusterのアイテムの仕様となり、アイテム間のパラメータの共有等も制約があります。
clusterのアイテムの仕様

アイテムを親子関係にすることができない

アイテム間でstateの共有ができない

clusterではglobalにstateを管理する仕組みがなく、アイテム間のstateを受け渡すには、itemHandleでやり取りする必要があります。
ただし、itemHandleはどこからでも取れるわけではなく、getItemsNearなどのメソッドを使って取得しなければなりません。
getItemsNearを使う場合には、対象のオブジェクトにコライダーをつける必要があり、自分自身などはゲットできないなどの制約があるため、非常に煩わしいです。

異なるアイテムのstateは直接参照できない
getItemsNearは呼び出し元から指定した範囲のitemHandleを取得できるので、
それを使って別のItemのstateを参照する

Webページにおける入力部品のようなものがclusterにはない

clusterにはhtmlのform部品に相当するものがなく、ユーザのテキスト入力を受け付けるダイアログしかありません。
そのため、チェックボックスやラジオボタンなどの選択肢系の項目やプルダウンリスト等のオブジェクトはUnity標準のものを使用することができないため、自作する必要があります。

チェックボックス風の画像
性別のようなラジオボタンの入力はボタン風のデザインに
プルダウンは再現が難しいため、複数の選択肢を並べる

トリガーとScriptでできることが違う(スコープの違い)

Cluster Scriptを使わない場合は、トリガーとギミックを使って動きを作ります。
トリガーは、globalスコープに対してパラメータを送信できます。
しかし、scriptではglobalに対してパラメータを送信することができません。

トリガーとギミックの関係
Cluster Scriptはglobalに対してパラメータを送ることができない

ここら辺の説明はこちらの方が詳しく解説されています。

まとめ

今回の記事では、clusterでワールドを作成する上での制約や注意事項についてまとめてみました。これからclusterを触ってみたい方のご参考になれば幸いです!

ということで、次の記事では「clusterでのトリガーとギミックの使い方・クラス構成」についてご紹介します!