前提
Viveは一台のみ。PC1はViveに接続してSteamVR SDKを使用、PC2は何も接続せずにSimulator SDKを使用する。
目的
CameraRigのTransformを同期させたい。
SDKのスイッチは自動的に行いたい。
問題
【PUN】アバター生成・同期で、Avatarを同期させようとしたらうまくいかなかった。
SteamVRの[CameraRig]の子要素にAvatarを生成しても、Transformは0のまま。そりゃそうだ、動いているのは[CameraRig]だから。
しかし[CameraRig]にPhotonViewをつけてPhotonNetwork.Instantiateに渡すわけにはいかない。シーンに複数カメラが存在してしまうし、SDKの自動スイッチを使えなくなるのもつらい。
解決
似たような問題に直面している人を発見!
でもコレじゃない感が。。。
Spawn / Sync existing game object (Player)?
デモがあった!
PlayoVR, a VRTK-PUN-Voice Demo
こちらのコードを拝借してうまくいったので、ざっくり解説。
一言で言うと Avatarはヒエラルキーの直下に生成して、CameraRigのTransformをAvatarにリンクさせる方法。
AvatarCameraRigSync.cs
でアバターのHead, LeftHand, RightHandを設定する。内部ではアクティブなCameraRigにリンク用のコンポーネント(PhotonViewLink
)をアタッチして、photonView.isMine
で自分のアバターのみに紐づけている(VRTK_TransformFollow
)。