開発者向けの機能
デベロッパーメニュー
clusterにはワールドを作成しているクリエイター向けの機能が用意されています。
それらの機能はデベロッパーメニューから有効化したり利用したりできます。
デベロッパーメニューの有効化の方法やデベロッパーメニューへのアクセス方法はヘルプページをご覧ください。
スラッシュコマンド
スラッシュコマンドとは、コメント欄に /
から始まる文字列を入力し送信することで様々な機能を実行できる機能です。
スラッシュコマンドはデベロッパーメニューから有効化することができます。
送信したスラッシュコマンドやその結果は他のユーザーからは見えません。
一部のスラッシュコマンドにはパラメータを指定するものがあります。
コマンドやパラメータは半角スペースで区切って入力する必要があります。
現在、スラッシュコマンドには以下のコマンドが用意されています。
/getmyposition
- 自身の現在座標を表示します。
ワールドクリエイターのみが実行できます。
- 自身の現在座標を表示します。
/getmypos
/getmyposition
の省略形です。
/help
- スラッシュコマンドの一覧を表示します。
/item destroy itemID
- itemID で表されるアイテムを削除します。ワールド設置アイテムは削除ができません。
ワールドクリエイターのみが実行できます。
- itemID で表されるアイテムを削除します。ワールド設置アイテムは削除ができません。
/item owner itemID
- itemID で表されるアイテムの現在のオーナーであるユーザーのIDをコンソールに表示します。
ワールドクリエイターのみが実行できます。
- itemID で表されるアイテムの現在のオーナーであるユーザーのIDをコンソールに表示します。
/item state itemID
- itemID で表されるアイテムのステートに設定されている一覧をコンソールに表示します。
アイテムクリエイターのみが実行できます。
- itemID で表されるアイテムのステートに設定されている一覧をコンソールに表示します。
/item state itemID key
- itemID で表されるアイテムのステートに設定されている、
key
で取得できる値をコンソールに表示します。
アイテムクリエイターのみが実行できます。
- itemID で表されるアイテムのステートに設定されている、
/item state itemID key type value
itemID で表されるアイテムのステートに、プロパティ名がkeyで型がtypeの値valueを書き込みます。
アイテムクリエイターのみが実行できます。
typeには各Sendable型に対応する以下の文字列、およびnullのいずれかを指定できます。- number: 数値に対応します
- string: 文字列に対応します
- bool: booleanに対応します
- vec2: Vector2に対応します
- vec3: Vector3に対応します
- quaternion: Quaternionに対応します
- playerHandle: PlayerHandleに対応します
- itemHandle: ItemHandleに対応します
- array: 配列に対応します
- object: objectに対応します
valueの記法については valueの生成規則を参照してください。
/items
- 空間内のScriptableItem コンポーネントを持つアイテムのID一覧をコンソールに表示します。
表示されるIDはItemHandle.idで取得できるものと同等です。
ワールドクリエイターのみが実行できます。
- 空間内のScriptableItem コンポーネントを持つアイテムのID一覧をコンソールに表示します。
/respawn
- 自身をリスポーンさせます。
ワールドクリエイターのみが実行できます。
- 自身をリスポーンさせます。
/users
- 空間内のユーザーのID一覧をコンソールに表示します。
表示されるIDはPlayerHandle.idで取得できるものと同等です。 ワールドクリエイターのみが実行できます。
- 空間内のユーザーのID一覧をコンソールに表示します。
/warp x y z
- 自身を(x y z)で指定する座標にワープさせます。
ワールドクリエイターのみが実行できます。
- 自身を(x y z)で指定する座標にワープさせます。
valueの生成規則
/item state itemID key type value
で使用するvalueの生成規則は以下の通りです。
<value>
-><null>
|<number>
|<bool>
|<string>
|<vec2>
|<vec3>
|<quaternion>
|<itemHandle>
|<playerHandle>
|<array>
|<object>
<null>
-> null<number>
-> 数値 | NaN | Infinity | -Infinity<bool>
-> true | false<string>
-> “<string_element>
”<string_element>
-> 文字列
<vec2>
-> (<number>
<number>
)<vec3>
-> (<number>
<number>
<number>
)<quaternion>
-> (<number>
<number>
<number>
<number>
)<itemHandle>
-> item-<itemId>
<itemId>
-> ItemHandle.idで取得できるものと同等の文字列
<playerHandle>
-> player-<playerId>
<playerId>
-> PlayerHandle.idで取得できるものと同等の文字列
<array>
-> [<array_element>
]<array_element>
-> ε |<value>
|<value>
<array_element>
<object>
-> {<object_element>
}<object_element>
-> ε |<object_key>
:<value>
|<object_key>
:<value>
<object_element>
<object_key>
-> 空白を含まない文字列
記述例
/item state 123456789 playerData object {targetPlayer:player-a0a-b1b-c2c-d3d-e4e playerName:"player01" position:(1.5 0 -2.5) equipments:[item-12345 item-67890]}
- IDが
123456789
であるアイテムのステートに対してplayerData
というkeyで、以下の4つのプロパティを持つオブジェクトを書き込みます。- key:
targetPlayer
, value: IDがa0a-b1b-c2c-d3d-e4e
であるプレイヤーのPlayerHandle - key:
playerName
, value:player01
という文字列 - key:
position
, value:(1.5, 0, -2.5)
のVector3 - key:
equipments
, value: 要素が「IDが12345
であるアイテムのItemHandle, IDが67890
であるアイテムのItemHandle」の2つである配列
- key:
- IDが
ログをすべて表示
有効にすると、クラフトまたはスペース内で発生したすべてのスクリプトのログを表示するようになります。
この機能はPC/Macで使用可能です。
アイテムの名前は32文字まで表示されます。
短時間に大量のログが出力されたり、ログが長かったりする場合、一部のログが表示されない場合があります。
エディタ拡張の開発で利用できる機能
Unity Editor でのエディタ拡張機能として、 Creator Kit ではワールドのアップロード前後にコールバックを登録できます。
Editor 向けに記述された Unity C# コードから ClusterVR.CreatorKit.Editor.EditorEvents.asmdef
を参照することで、WorldUploadEvents
クラスにアクセスしてワールドのアップロードイベントを処理します。
WorldUploadEvents
クラスでは以下の関数が利用できます。
関数 | 機能 |
---|---|
RegisterOnWorldUploadStart | ワールドのアップロード前に呼ばれるコールバック関数を登録します。コールバック関数では、アップロードを続行してよい場合に true を返し、アップロードを中止すべき場合は false を返してください。 |
RegisterOnWorldUploadEnd | ワールドのアップロードが成功、または失敗した場合に呼ばれるコールバック関数を登録します。 |
以下のサンプルコードでは、ワールドのアップロード前後にログ出力を行うコールバックを登録します。
using ClusterVR.CreatorKit.Editor.EditorEvents;
using UnityEditor;
using UnityEngine;
public static class MyWorldUploadEventHandler
{
[InitializeOnLoadMethod]
public static void Initialize()
{
WorldUploadEvents.RegisterOnWorldUploadStart(OnWorldUploadStarted);
WorldUploadEvents.RegisterOnWorldUploadEnd(OnWorldUploadEnded);
}
static bool OnWorldUploadStarted(WorldUploadStartEventData data)
{
Debug.Log($"World upload started, root object count = {data.Scene.rootCount}");
return true;
}
static void OnWorldUploadEnded(WorldUploadEndEventData data)
{
Debug.Log($"World upload ended, success={data.Success}");
}
}