前提・実現したいこと
以前質問した内容が、Unity Photon スマートフォンの画面が取られるというもので、現在UnityでVRモデルをスマートフォン(Android)を使いARで表示するものを作っています。スマートフォン側の画面が取られてしまうという問題は、あとからカメラを生成することで解決しました。
無事、ARでVRモデルを表示することはできました。最終定期に実現したいことは、VRモデルの動きをそのままAR側で確認することです。
発生している問題・エラーメッセージ
現在、Oculus Integrationを使用しています。prefabの中ではCenterEyeAnchorというカメラを無効化して起き、Photonに接続した後にカメラを有効化するという流れを採用しています。
GameObject VRAvatar = PhotonNetwork.Instantiate(vrBody.name, new Vector3(0.0f, 0.0f, 0.0f), transform.rotation); //アバターを生成
Debug.Log("avatar:" + VRAvatar);
VRAvatar.transform.Find("OVRCameraRig/TrackingSpace/CenterEyeAnchor").gameObject.SetActive(true); //CenterEyeAnchorを有効化
VRAvatar.transform.parent = target.transform; //Vuforiaのマーカーの子に
ここで問題なのが、腕の動きは再現されているが、頭の動きは再現されていないということです。OqulusQuest2のコントローラーやHMDにはPhotonViewをアタッチし監視しており、FinalIK(VRIK)を利用しモデルを動かしているのですが、何故か腕の動きは再現されても頭が一切動きません。
おそらくVR側でのみCenterEyeAnchorを有効にした結果、AR(スマートフォン)側では当然有効化されておらず、PhotonViewが機能していないと考えています。
どのようにすれば、CenterEyeAnchorの動きをPhotnViewで伝え、頭の動きを再現しつつ、画面は相手の画面を映さないというものを実現できるでしょうか。
該当のソースコード
using UnityEngine;
using Photon.Realtime;
using Photon.Pun;
using UnityEngine.SceneManagement;
using System.Collections;
//ARとVRの二つのモードを処理する
public class XRCastPlatform : MonoBehaviourPunCallbacks
{
[SerializeField] GameObject arRig;
[SerializeField] GameObject arSession;
//[SerializeField] GameObject cameraMesh;
[SerializeField] GameObject arBody; [SerializeField] GameObject vrBody; [SerializeField] GameObject target; //ビルド前にplatformを選択する enum Mode { VR, AR }; [Tooltip("Choose the mode before building, also you should change the XR Plugin Manager settings")] [SerializeField] Mode mode; public static XRCastPlatform instance; void Awake() { //もし接続できなければロビーに戻る //If not connected go to lobby to connect if (!PhotonNetwork.IsConnected) { SceneManager.LoadScene(0); } instance = this; } // Start is called before the first frame update void Start() { if (mode == Mode.VR) { CreateVRBody(); } else if (mode == Mode.AR) { Debug.Log("AR側を生成します"); CreateARBody(); } } void CreateVRBody() { GameObject VRAvatar = PhotonNetwork.Instantiate(vrBody.name, new Vector3(0.0f, 0.0f, 0.0f), transform.rotation); Debug.Log("avatar:" + VRAvatar); VRAvatar.transform.Find("OVRCameraRig/TrackingSpace/CenterEyeAnchor").gameObject.SetActive(true); VRAvatar.transform.parent = target.transform; } void CreateARBody() { GameObject ARAvatar = PhotonNetwork.Instantiate(arBody.name, transform.position, transform.rotation); ARAvatar.transform.Find("ARCamera").gameObject.SetActive(true); }
補足情報(FW/ツールのバージョンなど)
Unity 2020.3.10f1
OculusQuest2
Android(SO-01K)
ARcore
Vuforia
あなたの回答
tips
プレビュー