UnityでClusterワールドを作るときにつまずいた点
概要
「Cluster」(クラスター)というメタバースプラットフォームでは、ワールドをUnityで作ることが出来ます。ただ、Cluster特有の設定や機能があるので気づいたときに随時更新しています。
Unityに関する知識はあるものとして解説しているのでご了承ください。
Git管理
UnityプロジェクトをGitでバージョン管理をする時の注意点とTipsです。
Gitの知識がある前提で解説しているので、不安な方は↓ここで少し解説しているので読んでみてください。

テンプレート
新しいUnityWorldを作るたびに毎回Cluster Creator Kitを導入するのが面倒だったので、Cluster Creator Kitを導入した上でSpawnPoint、DespawnHeight、床を作成し、Unityのバージョン2021.3.4f1で動作確認したものを↓ここに公開しました。
後述の.gitignoreも入っているので、cloneすれば使えるようになっています。共有しているファイルは1MB以下なのでcloneは早いですが、初回起動時はライブラリのダウンロードが自動的に走るのでプロジェクトを開くのに数十分かかります。
.gitignore
Unityプロジェクトにはソースファイルやオブジェクト以外にも、ライブラリ等のファイルも全てフォルダ内に入っているためサイズが大きくなっています。これらのファイルは使用するライブラリを整理しているファイルさえあればクローン先でUnityを起動した時に自動的にダウンロードされるため、ライブラリ本体はわざわざGitで共有する必要はありません。
その辺りを整理して.gitignoreに整理されたものをゲーム開発者っぽい方のブログで見つけたので、そこで拾ってきたものをそのまま使っています。今のところ、必要なファイルが共有できていないということはありませんでした。
マージ
Unityのオブジェクト等は基本的には独立したファイルなので、同じオブジェクト・同じマテリアルを複数人が同時に触らなければマージした時に競合することはありません。
ただ.unityという拡張子のシーンファイルだけは別です。このファイルは1つのシーンのオブジェクトの配置や設定等がすべて記録されているため、複数人が同時に配置を変更すると競合が発生します。何度か試してみましたが、例えばAさんが椅子のオブジェクトを、Bさんが椅子とは全く関係のない柱のオブジェクトを触った場合でも競合が発生しました。
しかも変更点はUnity独自の書式で書かれているので、どの変更がどのオブジェクトのものなのか全くわかりません。
それを解消するためにUnityが公式のマージツールを用意しており、Unityをインストールするときに同時にインストールされます。これをGitに紐づけることで、ある程度は競合を解決してくれます。それでも何個か競合が残ったりしますが。。。
設定方法はcloneしたプロジェクトの「.git」という名前のフォルダに入っているconfigに設定を追記するだけです。このファイルは個人設定を記録するところなのでGitで共有することが出来ず、cloneした全員が変更する必要があります。
公式の解説ページは以下です。

実際の運用
↓このページが説明が丁寧でした。例として、2日間で1グループ1つのゲームを製作する「GameJam」というイベント(ハッカソン)が挙げられています。

PCで白っぽくなる/スマホで真っ白になる
オブジェクトが白っぽくなる原因は、ClusterではUnityよりも光の反射が強く出ているのが原因のようです。
自作のマテリアルが適用できるモデルの場合
マテリアルの「スペキュラーハイライト」「リフレクション」のチェックを外すことで光の反射を無効にすることができます。

マテリアルが修正出来ない場合
Shaderを「Sprites/Default」に設定すると反射のないシェーダーに設定できます。

ライトが近づかないと反映されない
Unityでは一度に描画できるリアルタイムライトの数に制限があるのが原因です。
Unity単体で動かすときの対策
ピクセルライト数(一度に描画できる数)を増やすことでパカパカと反映したりされなかったりするのを修正することが出来ます。
編集 → プロジェクト設定 → 品質 → ピクセルライト数

Clusterにアップロードする場合
Clusterではピクセルライト数が2個に限定されています。なので3個以上ライトがある場合はベイクしないと常に反映されません。
Unityの設定でピクセルライト数を2にしておくとClusterにあげたときの挙動がUnity上で確認出来ます。
ベイクが反映されない
↓ここのサイトでつまづきポイントを丁寧に説明されています。
fbx Import SettingsのGenerate Lightmap UVsのチェック漏れが盲点でした。

VRMはこれらの設定では調整できないので、適用されているマテリアルの「Lighting >> Advanced Setting >> GI Intensity」で調整する。

ベイクの生成に時間がかかる
まずは低い解像度でベイクしてみて確認すると効率がいいです。

ディスカッション
コメント一覧
まだ、コメントがありません