VR播放器控制器未显示给角色控制器

问题描述:

我正在开发多人游戏,其中正常角色控制器用户VR用户可以参与。所以有两种模式的游戏通过用户可以加入,Normal和VR Mode。VR播放器控制器未显示给角色控制器

I am able to manage these modes and user can participate with any mode但问题是正常播放器(charcter控制器)无法查看VR控制器(HTC vive控制器),因为这些对象在字符控制器的一侧变得关闭。那么如何在正常播放器端显示VR播放器所在的VR控制器

(我试过的)我制作了一个对象,试图模仿VR控制器的位置和旋转,但它不起作用,因为模拟源(VR控制器)关闭(在普通播放器端但在VR模式下工作),他们的位置不变。我如何向其他用户显示vr控制器

+0

嗨,我也有这个问题。这有点棘手。我所做的是在Awake上销毁SteamVR_TrackedObject,然后将控制器GameObject设置为活动状态。你在使用什么网络系统?我没有把它作为答案发布,因为我需要更多的信息。但我使用HTC vive制作多人游戏 – luizcarlosfx

+0

@luizcarlosfx我正在使用Unity自己的unet网络系统 –

+0

使用NetworkTransform来同步位置。销毁客户端上的SteamVR_TrackedObject,并确保您的控制器的游戏对象处于活动状态。我在开始时将它设置为活动。 – luizcarlosfx

我已经设法解决了这个问题,经过三天四天的努力后使用了这些步骤。这些步骤在下面给出这样以后用户不会陷入这个问题,有没有其他可用的全面指导:

  1. 制作一个游戏对象为头(简单的立方体)与Network Identitynetwork transform

  2. 制作一个游戏对象为(右)控制器(简单的立方体)与网络身份和网络改造

  3. 让一个Gameo (左)其他控制器(简单立方体)与网络身份和网络变换

  4. 预制所有上述gameobjects。

  5. 添加三个组合屋为Network Manager(注册Spawnable预制件列表)

  6. 从现场

  7. 添加下面的脚本都是删除3个预制(详见注释)我的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; 
    } 
    
    } 
    

恭喜你已经完成了!