Avatar
Avatarアドオンは、アバターに共通する基本的な機能と、ユーザーが自身のアバターをカスタマイズできるアバターシステムの作成方法を示すようなシンプルなアバターシステムを提供します。
Avatar
AvatarRepresentation
クラスは、以下のような機能を持ちます。
UserInfo
(アバターの名前やURL)の変更の購読- 与えられたURLに対する適切なアバターシステムの選択
- LODサポート(詳細は後述)
IAvatar
インターフェースによるアバター共通の記述(色・髪など)の定義NetworkRig
ゲームオブジェクトの子(RigInfo
システムがハードウェアリグの参照を追跡しているなら、HardwareRig
の子も)が実装するIAvatarRepresentationListener
のアバターのロード完了イベントのブロードキャスト
LODサポート
AvatarRepresentation
の兄弟にLODGroup
が追加可能で、その場合、AvatarRepresentation
は以下の機能を持ちます。
- アバターシステムで動的に作成された
Renderer
をLODGroup
で追加/削除 - アバターがロード中か、URLが間違っている場合、高レベルのLODを表示(
loadingMode
に基づき、デフォルトではリモートユーザーのみ) IgnoreDistance
メソッドによる、LODGroup
の有効/無効の制御
Avatar Representation listener
アドオンは、IAvatarRepresentationListener
を実装したコンポーネントを提供し、アバターのロードに反応します。
ローカルアバターカリング
ローカルアバターカリングシステムは、ローカルユーザーのアバターを隠します。ハードウェアリグが持つカメラは、レイヤーを隠すためのカリングマスクがあり、ローカルユーザーに関連付けられたアバターのゲームオブジェクトに適用されます。
ローカルアバターのカリングは、HardwareRig
ゲームオブジェクトにLocalAvatarCulling
スクリプトを追加することで行われます。
これを機能させるには、HardwareRig
にLocalAvatarCulling
を追加することに加えて、RigInfo
システムが必要なことに注意してください。
NetworkRunner
ゲームオブジェクトにRigInfo
を付けるNetworkRig
ゲームオブジェクトとHardwareRig
ゲームオブジェクトにRigInfoRegister
を付ける
Hand representation manager
NetworkHandRepresentationManager
とHardwareHandRepresentationManager
は、手のオンラインとオフライン表現を管理するオプションのコンポーネントです。
これらの主な目的は、アバターの肌の色に基づいて手の色を変更できるようにすることです。
また、オフラインとオンラインの手の表示ロジックを決定する様々なオプションを提供していて、接続状態やアバターシステムで手が利用可能かどうか等に基づきます。
ハードウェアの手はデコレーションシステムも持っていて、オンラインのデータに基づいてオフラインの手のパーツ(時計など)を動かすことができます。
これは、ネットワークの手が平面でブロックされるような特別なケースで便利です。これによって、ハードウェアの手の装飾がネットワークの手の補間対象に追従することが保証されます。(ネットワークの手の補間対象が、手がブロックされた時など、手動で変更される時に便利です)
Low poly simple avatar
LowPolySimpleAvatar
は、プレイヤーが選択したアバター(シンプルなアバターモデルか、Ready Player Meモデル)に従って、ローポリのアバター(LODGroup
)を調整します。
そのために、AvatarRepresentation
のOnRepresentationAvailable
コールバックを使用します。
そして、ローポリのアバターの身体・髪・服の色マテリアルが、選択されたアバターに従って調整されます。
また、アバターモデルがシンプルなアバターなら、髪のメッシュはシンプルなアバターモデルに対応した髪LODメッシュで調整されます。
Simple Avatar
このアドオンは、ユーザーが様々なパラメーター(肌の色・服・髪など)を選択して自身のアバターを作成できるアバターシステムの作成方法を示す、シンプルなアバターシステムを含んでいます。
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
から回転のオフセットを提供することも可能)。 - パフォーマンスを向上するオプションとして、
Gazer
コンポーネントのeyeRendererVisibility
フィールドにRendererVisible
を提供可能です。RendererVisible
がアバターの非表示を検知すると、そのアバターの目のシミュレーションが停止します。
Oculus リップシンク
アバターシステムによっては、実践的なリップシンクが必要になるでしょう。そのため、AvatarアドオンはOculus Lipsyncライブラリを含んでいます。Oculus Audio SDK license(https://developer.oculus.com/licenses/audio-3.3/)と、Meta Platform Technologies SDK Licence Agreement(https://developer.oculus.com/licenses/oculussdk/)の下で、Oculus Integrationで利用可能です。
依存関係
- Text Mesh Pro (only used to display the user name plate)
- Photon Voice SDK
ダウンロード
このアドオンの最新バージョンは、Industries アドオンのプロジェクトに含まれています。
対応するトポロジー
- 共有モード
更新履歴
- Version 2.0.3: Add precise type random avatar
- Version 2.0.2: Support loading random avatar
- Version 2.0.1: remove Hand mesh animation (was moved to hardware hand)
- Version 2.0.0: Fusion 2.0 support
- Version 1.0.2: use NetworkString for UserName & AvatarURL
- Version 1.0.1: fix namespace for LookAtCamera
- Version 1.0.0: First release