经过三天的努力,我努力使用这些步骤来解决这个问题。下面给出了这些步骤,以便将来的用户不会遇到这个问题,因为没有其他全面的指南可用:
做一个 的 Gameobject for Head 强> (简单的立方体) 网络身份 和 网络转型
做一个 的 Gameobject for(右)控制器 强> (简单立方体)具有网络身份和网络转换
做一个 的 Gameobject for(左)其他Controller 强> (简单立方体)具有网络身份和网络转换
制作所有上述游戏对象的预制件。
将所有三个预制件添加到 网络管理员 (已注册的Spawnable预制件清单)
从场景中删除三个预制件
在我的vr播放器中添加了以下脚本(请参阅注释以获取详细信息)并分配相应的预制件和游戏对象
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; } }
恭喜你做到了!