見出し画像

ワールド内のアイテムが直接参照できるようになりました!他【Cluster Creator Kit v2.20.0 リリースノート】

こんにちは、プロダクトマネージャーの Smith です。

メタバースプラットフォーム cluster では、クリエイターのみなさんの創造力をより加速できるように制作環境の改善や新機能の追加を行っています。
この記事では 8/5 の Cluster Creator Kit v2.20.0 で新たに提供される機能の仕様を紹介します。


Creator Kit 2.20.0 の利用方法

今回のリリースに含まれる機能を利用するためには Cluster Creator Kit v2.20.0 へのアップデートと cluster アプリのアップデートが必要です。
Cluster Creator Kit のアップデート手順はドキュメントに記載されています。

また、ベータ機能の場合はCCKでベータ機能の設定が必要になります。設定の手順は下記をご参照ください。

Creator Kit 2.20.0 のリリース内容

機能追加

  • ワールド内のアイテムが直接参照できるようになりました

  • $.createItem() で生成するアイテムに prefab を指定できるようになりました

仕様変更

  • スクリプトメモリ制限の廃止

  • Cluster Creator Kit コンポーネントのインスペクタを拡張可能に

機能追加

ワールド内のアイテムが直接参照できるようになりました【CCK・ベータ機能】

これまでは $.getItemsNear などで匿名でアイテムを探索していましたが、今回のリリースで追加された以下の機能を利用することで特定のアイテムを直接取得できるようになります。

利用方法
WorldItemReferenceList コンポーネントに参照したいアイテムを ID と合わせて設定します。
この画像の例では、”door” と “trap” という ID でそれぞれ異なるアイテムを設定しています。

WorldItemReferenceList コンポーネントをアタッチした GameObject に ScriptableItem をアタッチします。
スクリプト API を利用し、コンポーネントに設定したアイテムの ItemHandle を取得します。
スクリプトからは自身にアタッチされた WorldItemReferenceList コンポーネントで設定したアイテムしか参照できないことに注意してください。

const ITEM_DOOR_ID = "door";
const ITEM_TRAP_ID = "trap";

$.onInteract(_ => {
  const doorItemHandle = $.worldItemReference(ITEM_DOOR_ID);
  const trapItemHandle = $.worldItemReference(ITEM_TRAP_ID);
});

PlayerScript での worldItemReference は ItemId を返します。
アイテムの制御をする場合は sendTo と組み合わせて利用してください。

const doorItemId = _.worldItemReference(id);
_.sendTo(doorItemId, "doSomething", null);

createItem で生成するアイテムに prefab を指定できるようになりました【CCK・ベータ機能】

これまで $.createItem() で生成できる対象はクラフトアイテムとしてアップロードされたアイテムのみでしたが、今回のリリースで追加された以下の機能を利用することで prefab からアイテムを生成できるようになります。

利用方法
WorldItemTemplateList コンポーネントに生成したい prefab を ID と合わせて設定します。
この画像の例では、”prefab_sample” という ID で prefab を設定しています。

WorldItemTemplateList コンポーネントをアタッチした GameObject に ScriptableItem をアタッチします。
生成したい prefab の ID で WorldItemTemplateId  クラスをインスタンス化します。
インスタンス化した WorldItemTemplateId  クラスを createItem に渡すことで prefab からアイテムが生成できます。

const TEMPLATE_SAMPLE_ID = "prefab_sample";

$.onInteract(_ => {
  const id = new WorldItemTemplateId(TEMPLATE_SAMPLE_ID);
  $.createItem(id, $.getPosition(), $.getRotation());
})

WorldItemTemplateList に設定できる prefab には以下の制限がありますので注意してください。

  • アイテム自身が prefab だった場合でも自身を WorldItemReferenceList に設定できない

  • prefab はシーン上に配置されているインスタンスではなく、アセットとしての prefab である必要がある

シーン上に配置されているインスタンス prefab インスタンスと、アセットとしての prefab の違いを画像で示すと下記のようなものになります。
ヒエラルキービュー上に配置されている prefab がインスタンスで、ファイルとしてプロジェクトビュー上に配置されている prefab がアセットです。

仕様変更

スクリプトメモリ制限の廃止【CCK】

スクリプトで利用するメモリ制限を廃止しました。
メモリ使用量が一定を越えた場合、これまでエラーが発生してスクリプトの処理が止まっていましたが、今回のリリースからはエラーではなく警告が出るようになり、スクリプトが止まることはなくなりました。

警告には大まかなメモリ使用量も表示されるようになりました。
スクリプトのみで割り当てているメモリのサイズではなくおおまかなサイズとなりますが、チューニングの参考にしてください。
アプリ上のコンソールにはログ本文しか表示されませんが、外部エディタでログを開くことで対象のアイテム情報などを確認できます。

※画面は開発中のものです

なお、クラフトアイテム (createItem で生成したクラフトアイテム含む) のメモリ制限はこれまで通り一定値を超えるとエラーになります、ご注意ください。

Cluster Creator Kit コンポーネントのインスペクタを拡張可能に

エディタ拡張や CCK をカスタマイズした便利機能が、これまでよりも作りやすくなりました。
これまで、CCK が定義する CustomEditor は isFallback = false で設定され、CustomEditor用のクラスも sealed でしたが、今回のリリースでこれらの制限が廃止されています。
これにより、CCK の CustomEditor をオーバーライドして独自の CustomEditor を定義して利用することが簡単になりました。

ご意見・ご感想お待ちしています

cluster は、みなさんが楽しくバーチャル空間で創造できるように様々な改善を行っています。
Discord ではみなさんの要望を投稿したり、クリエイターさん同士でお互いの創作活動を支え合える場所を設けていますので、ぜひご活用ください!

Discordサーバー: Creator Community のご案内
https://docs.cluster.mu/creatorkit/support/creator-community/