> プラットフォームをAndroidに変更して使用しているOculus Questにビルド+実行、
> Questを2台は持っていないので片方はUnityエディタで実行
> (プラットフォームはPCに戻しました)すればテストになるかな?と思ったところ、
> Questで見える2体のインサイドちゃん両方に自分の動きが適用されました。
> この原因は分かりますでしょうか?
単純な話で、OVR CameraRig, OVR Headset Emulator, OVR Manager が「認識された VR デバイスに依存して検出するから」ですね。VRデバイスが非搭載のものでは認識されず、VRデバイスのある側に釣られて動くだけです。
もしデバイスがない状態であれば、上記の Foo.cs に対し、
void Update()
{
// 所有権がないオブジェクトの Oculus VR コンポーネントをひとまず無効化
if(!monobitView.isMine)
{
gameObject.GetComponentInChildren<OVRCameraRig>().enabled = false;
gameObject.GetComponentInChildren<OVRManager>().enabled = false;
gameObject.GetComponentInChildren<OVRHeadsetEmulator>().enabled = false;
}
}
する必要があります。
加えて当然のことながら、この状態では OVR CameraRig 以下のオブジェクト操作自体が無効になるので、以下に示す通り、Foo.cs 内の OnMonobitSerializeView() メソッド内で「Playerオブジェクトに含まれるすべての子階層のTransform送受信処理」を組み込むことになると思いますが。
void OnMonobitSerializeView( MonobitEngine.MonobitStream stream,
MonobitEngine.MonobitMessageInfo info ) {
if(camRigObj == null) return;
if(stream.isWriting) {
// 送信
stream.Enqueue(camRigObj.transform.position);
stream.Enqueue(camRigObj.transform.rotation);
stream.Enqueue(camRigObj.transform.localScale);
// 子オブジェクトの姿勢を送信
foreach (Transform child in camRigObj.transform)
{
stream.Enqueue(child.gameObject.transform.position);
stream.Enqueue(child.gameObject.transform.rotation);
stream.Enqueue(child.gameObject.transform.localScale);
}
}
else {
// 受信
camRigObj.transform.position = (UnityEngine.Vector3)stream.Dequeue();
camRigObj.transform.rotation = (UnityEngine.Quaternion)stream.Dequeue();
camRigObj.transform.localScale = (UnityEngine.Vector3)stream.Dequeue();
// 子オブジェクトの姿勢を受信
foreach (Transform child in camRigObj.transform)
{
child.gameObject.transform.position = (UnityEngine.Vector3)stream.Dequeue();
child.gameObject.transform.rotation = (UnityEngine.Quaternion)stream.Dequeue();
child.gameObject.transform.localScale = (UnityEngine.Vector3)stream.Dequeue();
}
}
}
> プロジェクト中のスクリプト「Foo」は、6/26の回答にある
> camRigObj = transform.Find( "OVR CameraRig" );
> をしていないようですが、これは関係しますでしょうか?
これは関係しません。これと同じことを
https://drive.google.com/drive/folders/1sMeA5v1OHssG9kE2S1asS-VHUr_KLHn2 の PlayerInspector.png でやってます。
加えて蛇足ながら。
関連する質問とはいえ、1度ベストアンサーがついたトピックで更なる質問を行なうのは好ましい状況ではないと思いますので(解決したかどうか判断できない)、これ以降の質問は別に質問トピックを立てて質問していただいた方がよいと思います。上記で解決できていればそれに越したことはないのですが。