質問: Oculus Questを同期させたい Oculus Questを同期させたいのですができません、ご教授お願いします。 を参照し、親プレファブ(OVRCameraRig)のMonobitViewにあるObserved Component Registration Listに ・OVRCameraRig(MonobitTransformView)...親プレファブ ・CenterEyeAnchor(MonobitTransformView)...目 ・LeftHandAnchor(MonobitTransformView)...左手 ・RightHandAnchor(MonobitTransformView)...右手 の四か所を指定し を参照しAwake メソッドを上記ページ内の内容と同一に変更しましたがOVRCameraRig(MonobitTransformView)しか同期されていません。 どうすれば他の箇所も同期するようになるのでしょうか、よろしくお願いします。
回答: Assets/Monobit Unity Networking/Plugins/MonobitNetwork/MonobitTransformView.cs のソースを見れば一目瞭然ですが、ここで位置同期をとる際に、オブジェクトの transform.localPosition, transform.localRotation, transform.localScale の値を送受信しあっています。 ですが、現在 Oculus で頒布している Oculus Integration(OVRPlugin)では、この位置同期情報をとるべき値について Assets/Oculus/VR/Scripts/OVRCameraRig.cs 、厳密には OVRCameraRig.UpdateAnchors() メソッドにて、たとえMonobitTransformView で同期される処理を施したとしても、値が上書きされてしまいます。 よって、この上書きしている箇所について、例えば以下のようなコードの追加により、無効にしなければなりません。 | // MonobitEngine.MonoBehaviour を継承するように変更 [ExecuteInEditMode]public class OVRCameraRig : MonobitEngine.MonoBehaviour{ // 省略 protected virtual void UpdateAnchors(bool updateEyeAnchors, bool updateHandAnchors) { // 省略 if (!Application.isPlaying) return; // monobitView.isMine でなければ処理を無効にする if(!monobitView.isMine) return; if (_skipUpdate) { // 以下省略 |