C#
Unity
Vive
PUN
VRTK

【VRTK x PUN x Vive】Transformを同期させたい

前提

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)。