クロスプラットフォーム設定
クロスプラットフォーム対応のワールドやアバターを作成するのは、実はとても簡単です!要するに、Unityのターゲットプラットフォームを切り替えてビルドするだけです。
この手順を正しく行うための詳細なガイドを以下にまとめました。
Android向けの設定
まずはプロジェクトのターゲットをAndroidに切り替え、初回セットアップを行うことで、コンテンツをAndroid向けにビルドできるようにする必要があります。
- SDKコントロールパネルを開き、「Builder」タブに切り替えます。
- 「Build」セクションにあるプラットフォームのドロップダウンメニューから、「Windows」のチェックを外し、「Android」にチェックを入れます。
- 表示されるポップアップで「Switch」をクリックして変更を確定します。
- SDKコントロールパネルに表示される検証メッセージを確認し、コンテンツがAndroidと互換性があることを確認してください。
微調整と最適化
プロジェクトの準備ができたら、次は最適化を始める必要があります。この工程をスキップすることはできません。最近のAndroid端末はかなり高性能ですが、VR対応の一般的なPCと比べると性能は劣ります。以下のページを必ずご確認ください。Questコンテンツの最適化ページで、何をする必要があるかを確認してください。ワールドの場合は、ライトのベイク、ジオメトリの複雑さの軽減、透過処理の回避、テクスチャ解像度の低下が求められます。アバターの場合は、不要なコンポーネントやボーンの削除、ジオメトリの複雑さの軽減、透過処理の回避、テクスチャサイズの縮小が必要です。
これには時間がかかり、困難な作業になることが予想されます。モバイルハードウェア向けの最適化は難しいものです!幸いなことに、世の中には豊富なリソースがあり、YouTubeで「optimizing Unity for mobile(Unity モバイル最適化)」と検索するだけでも、非常に有益なコンテンツがたくさん見つかります。
Oculus Quest向けコンテンツの最適化に関する弊社のドキュメントも併せてご確認ください。
また、プラットフォームごとにコンテンツを調整するために、EasyQuestSwitch(VRChat Creator Companionのパッケージとして利用可能)のようなツールを使用することを強く推奨します。
プラットフォームごとに複数のバージョンのアバターを用意している場合(例:PC専用バージョンとQuestバージョン)、SDKのプラットフォームごとのオーバーライド(Per-Platform Override)機能を使用してそれらを使い分けることができます。
コンテンツのアップロード
ワールドやアバターの準備ができたら、いよいよアップロードです!アップロードの手順はVRChat PC版と同じですが、SDKがパフォーマンス上の問題に対してより厳しく警告を出すようになります。
すべてのプラットフォーム向けに一度でアップロードしたい場合は、SDKコントロールパネルの「Build」セクションにある「Platforms」ドロップダウンから複数のターゲットを選択できます。
VRChat PC版のコンテンツと同じBlueprint IDに対して、ワールドやアバターをアップロードする必要があります。Blueprint IDは、Pipeline Managerコンポーネントによって定義されます。これは通常、VRCWorldプレハブなどに付随するVRC Scene Descriptorと一緒に設定されています。「Detach」ボタンを押してBlueprint IDを編集し、最初にアップロードしたバージョンのIDを貼り付けてください(IDはVRChat SDKコントロールパネルの「Content Manager」タブからも確認できます)。
アップロードされるバージョンは、プロジェクトのビルドターゲットに依存します。プロジェクトがAndroid向けに設定されていればQuest版が、Windows向けであればPC版がアップロードされます。基本的にはこれだけです。アップロードが完了すると、あなたのコンテンツを表示するすべてのクライアントは、以下のような流れで当社のサーバーと通信を行います。
「やあ、僕はMeta Questだけど、このコンテンツが欲しいな」 「わかった、これがVRChat Android版だよ」
「やあ、僕はVRChat PCユーザーだけど、このコンテンツが欲しいな」 「わかった、これがVRChat PC版だよ」
「やあ、僕はVRChat iOSユーザーだけど、このコンテンツが欲しいな」 「わかった、これがVRChat iOS版だよ」
VRChatは、iOS向けのコンテンツフォールバックシステムの実験を行っています。ワールドがAndroid版で利用可能でありながらiOS版がない場合、VRChatはAndroid版をiOS上で読み込もうと試みます。
これは、「Questコンテンツの制限」で概説されているStandard Liteシェーダーを主に使用するコンテンツで、うまく機能する傾向があります。最良の結果を得るためには、SDKを使用してコンテンツのiOS版をアップロードすることを推奨します。
使用しているプラットフォームでアバターが利用できない場合、代わりに「インポスターアバター」が表示されます。
使用しているプラットフォームでワールドが利用できない場合、そのワールドへのポータルに入ったり、UI経由で参加したりすることはできません。
しかし、Android版とPC版の両方があるワールドに参加し、そのインスタンスにいる人たちがAndroid版とPC版の両方のアバターを持っている場合、あなたのプラットフォームに適した状態でワールドが表示され、誰とでも問題なく交流することができます!
アバターをクロスプラットフォームで正しく動作させるためには、頭、手、足などの主要なボーンにおいて、PC版とQuest版でアーマチュアのパスが完全に一致している必要があります。さらに、「ルートボーン」(階層の最初のボーン)のスケールと回転も、両バージョンで完全に一致させてください。
Android版とPC版のアバター間で、リギング(アーマチュア)はほぼ同一である必要があります。Android版でスカートや髪などの不要なボーンを削除することは問題ありませんが、アーマチュアの基本構造は変更しないでください。変更すると、プラットフォームをまたいで表示した際に不自然な挙動の原因となります。
最も重要な点として、「ルートボーン」(ヒップなど)は、Armatureゲームオブジェクト直下の階層における最初のボーンであるべきです。具体的には、「ルートボーン」の設定(スケール、回転)さえ一致していれば、問題は発生しません。
ヒント
- VRChatのPC版アバターには、VRChatのAndroid版では使用できないような多種多様な機能を持たせることができます。各プラットフォームに応じて、ユーザーにはそれぞれのクライアントに適したバージョンが表示されます。
- この点については少し工夫することもできます。PCユーザー向けにはハイポリゴンのワールドやアバターを用意し、Questユーザー向けには(スタイリッシュさを保ちつつ)ローファイなバージョンを用意するといった形です。
- PC版とQuest版のワールドの両方に、ボックスコライダーやローポリゴンのメッシュコライダーを設定し、メッシュコライダーの代わりに使用しましょう。コライダーを特定の座標にある空のGameObjectの子要素にしておけば、一方のプロジェクトを更新した際に、そのオブジェクトをもう一方のプロジェクトへ簡単にコピー&ペーストできます。そうすれば、プラットフォームによってユーザーが「浮いて」見えることもなく、頂点数の多い負荷の高いメッシュコライダーによる問題も回避できます。
- 忘れないでください。透明な表現は可能な限り避けるべきです!非常に負荷がかかります。
- 補足ですが、はい、「アルファカットアウト」も透明な表現に含まれます。
最終更新: