アバター
アバターアドオンは、アバター特有の機能をサポートするための共通のベースを提供し、ユーザーが自分のアバターをカスタマイズできるようにするシンプルなアバターシステムの作成方法を示しています。このアドオンを使用することで、ユーザーは自分自身を表現するためのアバターを簡単に作成し、カスタマイズすることができます。
アバター
AvatarRepresentation クラスは、以下の機能を提供します。
- アバターの名前またはURLの変更に対する
UserInfo
のサブスクリプション。 - 指定されたURLに適したアバターシステムの選択
- LOD(Level of Detail)サポート(以下の「LODサポート」詳細を参照)
IAvatar
インターフェースを通じて、アバターの共通の説明(色、髪型など)を定義します。IAvatarRepresentationListener
を実装しているNetworkRig
ゲームオブジェクトの子オブジェクト(および、ハードウェアリグの参照を追跡するためにRigInfo
システムがある場合はHardwareRig
の子オブジェクト)に対して、アバターのロード完了イベントをブロードキャストします。
LOD サポート
LODGroup
を AvatarRepresentation
の兄弟として追加することで、AvatarRepresentation
は以下の機能を提供します。
- LODGroupにアバターシステムが動的に作成したレンダラーの追加および削除
- アバターがロード中であるか、URLが誤っている場合は、より高いレベルのLODを表示する(
loadingMode
に基づき、デフォルトではリモートユーザーのみ) IgnoreDistance
メソッドを使用して、LODGroupのアクティブ化や非アクティブ化を制御する
アバター表現リスナー
このアドオンは、IAvatarRepresentationListener
を実装し、アバターのロードに反応するいくつかのコンポーネントを提供します。
ローカルアバターのカリング
ローカルアバターのカリングシステムは、ローカルユーザーのためにアバターを隠すことを目的としています。そのために、ハードウェアリグに保存されたカメラのカリングマスクが変更され、ローカルユーザーに関連付けられたアバターゲームオブジェクトに適用されるレイヤーが隠されます。
ローカルアバターのカリングは、HardwareRig
ゲームオブジェクトに LocalAvatarCulling
スクリプトを追加することで行われます。これが機能するためには RigInfo
システムが必要であり、したがって HardwareRig
に LocalAvatarCulling
を追加するだけでなく、以下も必要です。
NetworkRunner
ゲームオブジェクトにRigInfo
NetworkRig
ゲームオブジェクトにRigInfoRegister
およびHardwareRig
ゲームオブジェクトにRigInfoRegister
ハンド表現マネージャー
NetworkHandRepresentationManager
と HardwareHandRepresentationManager
は、オンラインおよびオフラインでの手の表現を管理するためのオプションコンポーネントです。
これらの目的は、主に受信したアバターの肌色に基づいて手の色を変更できるようにすることです。
これらのコンポーネントは、接続状態、ロードされたアバターシステムにおける手の可用性などに基づいて、オフラインおよびオンラインの手の外観ロジックを決定するためのさまざまなオプションも提供します。
ハードウェアハンドには装飾システムもあり、オフラインハンドの一部(通常は時計など)がオンラインデータに基づいて動くように設定されています。これは、ネットワークハンドがブロックされるような特殊なケースに役立ちます。これにより、ハードウェアハンドの装飾(もしあれば)がネットワークハンドの補間ターゲットに従うことが保証されます(ネットワークハンドの補間ターゲットが手動で変更された場合—手がブロックされた場合などに有用です)。
ローポリシンプルアバター
LowPolySimpleAvatar
は、プレイヤーが選択したアバターに応じて(シンプルなアバターモデルまたは Ready Player Me モデルなど)、ローポリアバター(LODグループ用)を構成する役割を担っています。
そのために、AvatarRepresentation
の OnRepresentationAvailable
コールバックを使用します。次に、選択されたアバターに応じてローポリアバターの体、髪、服の色のマテリアルが設定されます。また、アバターモデルがシンプルなアバターである場合、髪のメッシュはシンプルなアバターモデルに対応する髪のLODメッシュで設定されます。
シンプルアバター
このアドオンには、ユーザーがアバターを構成するさまざまなパラメータ(肌の色、服のメッシュ、髪の素材など)を選択することを可能にするアバターシステムの作成方法を示すシンプルなアバターシステムが含まれています。
SimpleAvatar
には次のようなメソッドが含まれています。
- 新しい「シンプルアバター」URLを使ってアバターを変更する
- ランダムな「シンプルアバター」モデルを生成する
- 特定のアバターパラメータ(髪、服、肌)を設定する
- アバターの目と口をアニメーションさせる
また、RepresentationAvailable
メソッドを使って新しいシンプルアバターがロードされたことを AvatarRepresentation
に通知します。
デモシーンは Assets\Photon\FusionAddons\Avatar\Demo\Scenes\
フォルダーにあります。したがって、シンプルアバターをテストするには、AvatarLODSimpleAvatar
シーンを開いてください。ユーザーがスポーンしたら、SimpleAvatarNetworkRig(Clone)
ゲームオブジェクトを選択し、UserInfo
の AvatarURL
パラメータを変更します。
例として、次のURLを使用することができます。 simpleavatar://?hairMesh=1&skinMat=2&clothMat=0&hairMat=0&clothMesh=1
目の動きのシミュレーション
アバターの視線が固定されないように、目の動きシミュレーションシステムを使用することができます。このシステムは、GazeTarget が設定されている他のオブジェクトを追跡するために、オブジェクト(アバターの目)を動かすことができます。
実現するには:
- シーンには
GazeInfo
コンポーネントが含まれている必要があります(これは、新しいターゲットを狙うためのバックグラウンドスレッドを定期的に実行します)。 - アバターオブジェクトは
Gazer
コンポーネントを保持し、gazingTransforms
に目のゲームオブジェクトを提供する必要があります(gazingTransformOffsets
を通じて回転オフセットを提供することも可能です)。 - パフォーマンスを向上させるために、オプションとして
eyeRendererVisibility
フィールド内のGazer
コンポーネントにRendererVisible
を提供することができます。RendererVisible
がアバターのレンダラーが非表示であることを検出した場合、そのアバターの目のシミュレーションは実行されません。
Oculus リップシンク
一部のアバターシステムでは、高度なリップシンクが必要です。そのために、アバターアドオンには、Oculus Audio SDK ライセンス(https://developer.oculus.com/licenses/audio-3.3/)および Meta Platform Technologies SDK ライセンス契約(https://developer.oculus.com/licenses/oculussdk/)のもとでリリースされた Oculus Lipsync ライブラリのバージョンが含まれています。このライブラリは、Oculus Integration で入手可能です。
依存関係
Text Mesh Pro(ユーザー名プレートを表示するためにのみ使用されています)
ダウンロード
こちらのアドオン最新バージョンはaddon projectにあります。
サポートされているトポロジ
- shared mode
Changelog
- Version 1.0.2: use NetworkString for UserName & AvatarURL
- Version 1.0.1: fix namespace for LookAtCamera
- Version 1.0.0: First release