ロード時間やワールドメモリ消費量を減らせる!Creator Kit製ワールド内のオブジェクトを必要に応じて読み込む「SubScene」の紹介

Cluster Creator Kit v2.6.0から「SubScene」という機能が使えるようになりました。
本記事では、「SubScene」のが機能概要と使い方について紹介します。大きなワールドをつくる際などに便利な場面があるので、ぜひ試してみてください。

clusterのワールドは Unity のシーンで表現されており、これまでシーンは1つしか使うことができませんでした。
SubScene は、Creator Kit 製ワールドを複数の Unity シーンに分けて構成させられます。

Unity のシーンについてはこちらの Unity ドキュメントを参照して下さい。

SubScene として指定したワールド要素は、必要に応じてロードされるようになります。
これにより、入室にかかる時間を減らしたり、ワールドのメモリ消費量を減らしたりできます。
SubScene はコンポーネントとして提供されており、この機能を用いることで広大なワールドも実現できます。

SubSceneの制約
SubScene 関連のコンポーネントにはいくつかの制約があるため留意して下さい。
・SubScene で設定する Unity シーンには Item, Operation, PlayerGimmick, PlayerLocalUI を含めることはできません
・SubScene で設定する Unity シーン内のワールドコンポーネントは基本的には動作しません
・後述する SubSceneSubstitutes と Item は同時にアタッチできません

SubScene は Unity のシーンで表現されており、ロード制御はコライダーを用いています。
ワールドを分割したい単位で Unity シーンを作成し、SubScene コンポーネントで指定することでロード制御ができます。

  • Unity Editor 上では、メインシーンに対して Additive でシーンを追加すると、全体像を見ながら作業できます。
  • シーンファイルをヒエラルキーにドラッグするか、シーンファイルを右クリック > Open Scene Additive  を選択することで Additive にシーンが追加できます。

SubScene の具体的な指定方法は下記のとおりです。

  • 任意の GameObject に SubScene コンポーネントをアタッチします
    • 何らかのコライダーがアタッチされている必要があります
    • SubScene コンポーネントをアタッチするとコライダーの isTrigger がオンに設定されます
      • 必ずSubSceneコンポーネントより先にコライダーをアタッチしてください
  • SubScene コンポーネントの Scene フィールドに、分割した Unity のシーンを指定して下さい
画像では CapsuleCollider を用いていますが、任意のコライダーで問題ありません

また、ロードされていないシーンの代替として任意の GameObject を配置することもできます。
これは *LOD のような用途として用いることができます。下記の手順で設定できます。

  • SubScene が表示されていない時に、代わりに表示したい GameObject に SubSceneSubstitutes コンポーネントをアタッチ
  • SubSceneSubstitutes の SubScene フィールドに代替表示の対象となる SubScene コンポーネントがアタッチされている GameObject を指定
  • SubScene が表示されていない時に、代わりに表示したい GameObject に SubSceneSubstitutes コンポーネントをアタッチ
  • SubSceneSubstitutes の SubScene フィールドに代替表示の対象となる SubScene コンポーネントがアタッチされている GameObject を指定

以上が SubScene の基本的な利用方法です。

*LOD: Level of Detail、 カメラからの距離に応じて描画方法を変化させる技法、あるいはそのための機能です。 LOD をうまく設定することによってワールドの負荷を軽減できます。

(2024/1/29現在)SubScene を利用している場合は一部のMeshCollider が動作しなくなることが分かりました。
対処方法としては、該当のメッシュのモデルの Import Settings の Generate Colliders をオンにするか、Read/Write をオンにすることで正常に動作するようになります。
Read/Write をオンにして対処する場合はメモリ消費量が増えるため Generate Colliders での対応を推奨しています、その場合は重複してコライダーがつかないようにシーンや prefab の構造をご確認ください。

SubScene は複数を同時に扱うことができます。
下記の画像のような構造の SubScene を利用したワールドがある場合、シーンのつなぎ目で前後のワールドをロードさせるような挙動にできます。
MainScene => SubScene 1 => SubScene 2 の順にプレイヤーが移動した場合、下記のようなロード処理が行われます。

  • MainScene にスポーン、他のシーンはまだロードされていない
  • MainScene と SubScene 1 の間の通路に侵入、SubScene 1 がロードされる
  • SubScene 1 と SubScene 2 の間の通路に侵入、SubScene 2 がロードされる
  • 通路を超えて SubScene 2 の部屋に入りきると、 SubScene 1 が破棄される

つなぎ目となる通路のような場所は MainScene で保持するか、ロード前後のシーンで持っておくとよいでしょう。

制約はいくつかありますが、SubSceneを適切に扱うことで、広大なワールドであっても、入室にかかる時間を減らしたり、ワールドのメモリ消費量を減らしたりできます。
ぜひ試してみてください。

記事をシェアしてワールド制作を盛り上げよう!

Cluster Creators Guide|バーチャル空間での創作を学ぶならをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む