Контроллер VR Player не отображается контроллеру символов
Я разрабатываю многопользовательскую игру, где обычный пользователь контроллера символов и пользователь VR может участвовать. Так что есть два режима игры через потребителя смогите присоединиться, нормальный и режим ВР.
Я в состоянии управлять этими режимами пользователь может участвовать в любом режиме но проблема обычный плеер (контроллер charcter) не может просматривать контроллер VR (контроллеры HTC vive) как эти объекты становятся off на стороне контроллера символов. Итак, как я могу показать контроллер VR на стороне обычного игрока, что делает VR-плеер.
(что я пробовал) я делаю объект и пытался имитировать его положение и вращение по отношению к контроллеру VR, но он не работает как имитирующий источник(контроллеры VR) выключены (на стороне обычного игрока, но работают в режиме VR), и их положение не меняется. Как я могу показать vr контроллер другому пользователю
1 ответов
мне удалось решить эту проблему, используя эти шаги после трех четырех дней. Эти шаги приведены ниже, чтобы будущий пользователь не застрял в этой проблеме, поскольку нет другого всеобъемлющего руководства:
сделать один Gameobject для головы (простой куб) с Сетевая Идентификация и сеть преобразования
сделать один Gameobject для (правого) контроллера (простой куб) с сетевой идентичностью и сетевым преобразованием
сделать один Gameobject для (слева) другого контроллера (простой куб) с сетевой идентичностью и сетевым преобразованием
сделайте сборку всех вышеперечисленных gameobjects.
добавить все три сборных в Диспетчер Сети (зарегистрированный список префабов Spawnable)
удалить три prefab из сцена
-
добавлен скрипт ниже (см. комментарии для деталей) в мой VR-плеер и назначьте соответствующие префабы и gameobjects
public class VRPlayerCtrl : NetworkTransform { //source gameobjects head, left and right controller object of htc vive prefab public GameObject rightContSource; public GameObject leftContSource; public GameObject headObjSource; //prefabs to assign head, left controller, and right controller public GameObject vrHeadObjPrefab; public GameObject vrLeftCtrlPrefab; public GameObject vrRightCtrlPrefab; GameObject vrHeadObj; GameObject vrLeftCtrl; GameObject vrRightCtrl; void Start() { Debug.Log("Start of the vr player"); if (isLocalPlayer) { //instantiate prefabs CmdInstantiteHeadAndController(); //disabled conroller meshes at VR player side so it cannont be view by him vrLeftCtrl.GetComponent<MeshRenderer>().enabled = false; vrRightCtrl.GetComponent<MeshRenderer>().enabled = false; } } //Instantiate on start head and vr controller object so that it can be view by normal players void CmdInstantiteHeadAndController() { Debug.Log("instantiateing the controller and head object"); vrHeadObj = (GameObject)Instantiate(vrHeadObjPrefab); vrLeftCtrl = (GameObject)Instantiate(vrLeftCtrlPrefab); vrRightCtrl = (GameObject)Instantiate(vrRightCtrlPrefab); // spawn the bullet on the clients NetworkServer.Spawn(vrHeadObj); NetworkServer.Spawn(vrLeftCtrl); NetworkServer.Spawn(vrRightCtrl); } void Update() { if (!isLocalPlayer) { return; } //sync pos on network CmdControllerPositionSync(); } //sync position on VR controller objects so that VR player movemnts/action can be viewd by normal user [Command] public void CmdControllerPositionSync() { vrHeadObj.transform.localRotation = headObjSource.transform.localRotation; vrHeadObj.transform.position = headObjSource.transform.position; vrLeftCtrl.transform.localRotation = leftContSource.transform.localRotation; vrRightCtrl.transform.localRotation = rightContSource.transform.localRotation; vrLeftCtrl.transform.localPosition = leftContSource.transform.position; vrRightCtrl.transform.localPosition = rightContSource.transform.position; } }
поздравляю вы сделали!