0 支持
(180 ポイント)

Oculus Questを同期させたいのですができません、ご教授お願いします。

http://monobitengine.com/doc/mun/contents/Tutorial/AddSynchronizedComponent.htm

を参照し、親プレファブ(OVRCameraRig)のMonobitViewにあるObserved Component Registration Listに

・OVRCameraRig(MonobitTransformView)…親プレファブ

・CenterEyeAnchor(MonobitTransformView)…目

・LeftHandAnchor(MonobitTransformView)…左手

・RightHandAnchor(MonobitTransformView)…右手

の四か所を指定しhttp://monobitengine.com/doc/mun/contents/Tutorial/ChangeMonobitTransformView.htm

を参照しAwake メソッドを上記ページ内の内容と同一に変更しましたがOVRCameraRig(MonobitTransformView)しか同期されていません。

どうすれば他の箇所も同期するようになるのでしょうか、よろしくお願いします。

回答 1

0 支持
(3.8k ポイント)
編集

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

         // 以下省略
(180 ポイント)
ありがとうございます。
解決しました!
...