質問: ボディトラッキングの同期について MUNのRoomFilterサンプルを使っています。 ルーム作成者がAzureKinectを用いてトラッキングを行っている様子を、入室者も閲覧出来るようにしたいです。 とりあえず、ゲームスタート時にルーム作成者が生成した3DモデルはAzureで動かせるようになりましたが、この動きが入室者のモデルと同期されていません。 (左:ルーム作成者が生成し、AzureKinectの同期が成功しているモデル 右:入室者が生成したモデル) MonobitTransformViewの内容をAzureKinectで取得した情報に書き換えればよいのではないかとは思い調べてみたのですが、門外漢の私には難しく、皆さまにご教示いただきたいと思い質問しました。 上述の下線部の条件さえ満たせればよいので、例えば 【ルーム作成者のゲーム画面を入室者のゲーム画面に表示する】 等 もしモデルの同期以外の解決手段があればそちらもご教示いただきたいです。 AzureKinectはこのアセットを使って動作させています。 ttps://assetstore.unity.com/packages/tools/integration/azure-kinect-examples-for-unity-149700
回答: 「かぼちゃ.png」の画像で示されたオブジェクトの構成が分からないことには明確な回答はできないのですが、仮に で公開されているprefabデータと同一の構造になっているのであれば、階層オブジェクトのTransformを同期させればよいだけなので、例えば階層オブジェクトの親(root)に | public void OnMonobitSerializeView(MonobitStream stream, MonobitMessageInfo info) { Transform[] childs = gameObject.GetComponentsInChildren(); if (stream.isWriting) { // 全オブジェクトの位置情報の送信 stream.Enqueue(transform.localPosition); stream.Enqueue(transform.localRotation); foreach (Transform child in childs) { stream.Enqueue(child.transform.localPosition); stream.Enqueue(child.transform.localRotation); } } else { // 全オブジェクトの位置情報の受信 transform.localPosition = (Vector3)stream.Dequeue(); transform.localRotation = (Quaternion)stream.Dequeue(); foreach (Transform child in childs) { child.transform.localPosition = (Vector3)stream.Dequeue(); child.transform.localRotation = (Quaternion)stream.Dequeue(); } } } | のようなコードを組み込んだ、MonobitEngine.MonoBehaviour を継承したクラスを用意し、これを MonobitView の ObservedComponentList に登録すれば可能だと思います。