Контроллер VR Player не отображается контроллеру символов

Я разрабатываю многопользовательскую игру, где обычный пользователь контроллера символов и пользователь VR может участвовать. Так что есть два режима игры через потребителя смогите присоединиться, нормальный и режим ВР.

Я в состоянии управлять этими режимами пользователь может участвовать в любом режиме но проблема обычный плеер (контроллер charcter) не может просматривать контроллер VR (контроллеры HTC vive) как эти объекты становятся off на стороне контроллера символов. Итак, как я могу показать контроллер VR на стороне обычного игрока, что делает VR-плеер.

(что я пробовал) я делаю объект и пытался имитировать его положение и вращение по отношению к контроллеру VR, но он не работает как имитирующий источник(контроллеры VR) выключены (на стороне обычного игрока, но работают в режиме VR), и их положение не меняется. Как я могу показать vr контроллер другому пользователю

1 ответов


мне удалось решить эту проблему, используя эти шаги после трех четырех дней. Эти шаги приведены ниже, чтобы будущий пользователь не застрял в этой проблеме, поскольку нет другого всеобъемлющего руководства:

  1. сделать один Gameobject для головы (простой куб) с Сетевая Идентификация и сеть преобразования

  2. сделать один Gameobject для (правого) контроллера (простой куб) с сетевой идентичностью и сетевым преобразованием

  3. сделать один Gameobject для (слева) другого контроллера (простой куб) с сетевой идентичностью и сетевым преобразованием

  4. сделайте сборку всех вышеперечисленных gameobjects.

  5. добавить все три сборных в Диспетчер Сети (зарегистрированный список префабов Spawnable)

  6. удалить три prefab из сцена

  7. добавлен скрипт ниже (см. комментарии для деталей) в мой 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;
    }
    
    }
    

поздравляю вы сделали!