public void OnClientConnect(int id) { PlayerStatus playerStatus = new PlayerStatus(); if (playerAvatarPrefab != null) { GameObject playerObj = Instantiate(playerAvatarPrefab); playerObj.name = "Player " + id + " Avatar"; ShooterPlayerAvatar avatar = playerObj.GetComponent <ShooterPlayerAvatar>(); avatar.id = id; int colorIdx = id % ShooterPlayerColorTable.colorTable.Length; playerObj.GetComponentInChildren <Renderer>().material.color = ShooterPlayerColorTable.colorTable[colorIdx]; VivePoseTracker poseTracker = playerObj.GetComponent <VivePoseTracker>(); poseTracker.viveRole.SetEx <TrackerRole>(ViveShare_Server.Instance.GetPlayerTrackerRole(id)); playerStatus.avatar = playerObj; playerStatus.avatar.transform.parent = cameraRig.transform; } PlayerStatus oldPlayerStatus; if (playerStatusDic.TryGetValue(id, out oldPlayerStatus) == true) { playerStatusList.Remove(oldPlayerStatus); playerStatusDic.Remove(id); } playerStatusList.Add(playerStatus); playerStatusDic.Add(id, playerStatus); }
/// <summary> /// VR虚拟涂鸦 /// </summary> /// <param name="viveTracker">ViveTracker Vive追踪器</param> /// <param name="color">Color 色号</param> public void VRTrackerSpary(VivePoseTracker viveTracker, GameObject varTracker, Color color, string brush, float brushSize) { RaycastHit hit; Ray trackerRay = new Ray(viveTracker.transform.position, varTracker.transform.forward); if (Physics.Raycast(trackerRay, out hit)) { Debug.Log("涂鸦的目标" + hit.collider.tag); //LogText.text = "扳机按住!"; GameObject brushObj; brushColor = color; brushObj = (GameObject)Instantiate(Resources.Load("TexturePainter-Instances/" + brush)); brushObj.GetComponent <SpriteRenderer>().color = brushColor; brushObj.transform.parent = brushContainer.transform; brushObj.transform.localPosition = new Vector3(hit.point.x + OffsetX, hit.point.y + OffsetY, SparyWall.transform.position.z - sprayToWallDis); brushObj.transform.localScale = new Vector3(brushSize, brushSize, brushSize); AllSprays.Add(brushObj); Debug.Log("涂鸦完成!"); } }
private void OnTriggerEnter(Collider other) { VivePoseTracker tracker = other.gameObject.transform.parent.gameObject.transform.parent.gameObject.GetComponent <VivePoseTracker>(); if (foot1Role == tracker.viveRole || foot2Role == tracker.viveRole) { errorSound.Play(0); } }
private void OnTriggerExit(Collider other) { VivePoseTracker tracker = other.gameObject.transform.parent.gameObject.transform.parent.gameObject.GetComponent <VivePoseTracker>(); if (foot1Role == tracker.viveRole || foot2Role == tracker.viveRole) { // Stop effect and sound errorSound.Stop(); } }
private void Awake() { if (instance == null) { instance = this; } else { Destroy(this); } _pt = this.gameObject.GetComponent <VivePoseTracker>(); }
/// <summary> /// VR虚拟涂鸦擦拭 /// </summary> /// <param name="viveTracker"></param> public void VREraserTrackerSpray(VivePoseTracker viveTracker, GameObject varTracker) { RaycastHit hit; Ray trackerRay = new Ray(viveTracker.transform.position, varTracker.transform.forward); // 由Vive Tracker 发出的位置射线 if (Physics.Raycast(trackerRay, out hit)) { Debug.Log("需要擦拭的目标" + hit.collider.tag); if (hit.collider.tag == "Spary") { Destroy(hit.transform.gameObject); AllSprays.Remove(hit.transform.gameObject); } } }
private void OnTriggerEnter(Collider other) { VivePoseTracker tracker = other.gameObject.transform.parent.gameObject.transform.parent.gameObject.GetComponent <VivePoseTracker>(); Debug.Log("Object role: " + objectRole + " ,Tracker role: " + tracker.viveRole); if (!active) { Debug.Log("Hit collider not active!"); } else if (objectRole == tracker.viveRole) { if (hitSound == null) { Debug.Log("Hit sound not set!"); } else { hitSound.Play(0); } if (particleEffect == null) { Debug.Log("Destroy effect not set!"); } else { GameObject effectObj = Instantiate(particleEffect, transform.position, transform.rotation); } active = false; mesh.SetActive(false); Debug.Log("correct entered!"); } else { if (errorSound == null) { Debug.Log("Error sound not set!"); } else { errorSound.Play(0); } } }
public void StartGarageSetting() { VivePoseTracker tracker = LiftMachine.GetComponent <VivePoseTracker>(); if (tracker.isPoseValid) { LiftMachine.position = tracker.transform.position; } //else if (recontructFloor != null && recontructFloor.transform.childCount > 0) // LiftMachinePosition = recontructFloor.transform.GetChild(0).position; else { LiftMachine.position = Vector3.zero; } if (ARRender.ADVANCE_RENDER) { //We only set PaintObject to render shadow to save shadow render performance MyHelpLayer.ReplaceSceneLayer(LiftMachine, LayerMask.NameToLayer("Default"), ARRender.UnityRenderOnTopLayer); MyHelpLayer.ReplaceSceneLayer(LiftMachine, LayerMask.NameToLayer("PaintObject"), ARRender.UnityRenderOnTopLayer); } else { MyHelpLayer.SetSceneLayer(LiftMachine, ARRender.UnityRenderOnTopLayer); } FixedWorldPosCover[] fwpcs = LiftMachine.GetComponentsInChildren <FixedWorldPosCover>(); foreach (FixedWorldPosCover fwpc in fwpcs) { fwpc.UpdateWorldMatrix(); // fwpc.GetComponent<Renderer>().sharedMaterial.SetTexture("_LeftEyeTexture", dualCameraLRT.GetRT()); // fwpc.GetComponent<Renderer>().sharedMaterial.SetTexture("_RightEyeTexture", dualCameraRRT.GetRT()); fwpc.GetComponent <Renderer>().sharedMaterial.SetFloat("_Transparent", 1); } Renderer[] renders = LiftMachine.GetComponentsInChildren <Renderer>(true); foreach (Renderer r in renders) { r.enabled = true; } }
//----------------------------------------------------------------------------- // tracker assignment //----------------------------------------------------------------------------- internal void OnTrakcerResitryRequest(NetworkMessage netMsg) { // parse message ViveTrackerRegistryRequestMsg msg = netMsg.ReadMessage <ViveTrackerRegistryRequestMsg>(); // check connectivity int connId = netMsg.conn.connectionId; ConnectionData connData = GetConnectionData(connId); if (connData == null) { return; } // if need to assign a tracker to client string trackerPoseObjName = ""; if (msg.needTrackerPose) { TrackerRole trackerRole = TryToBindTracker(msg.serialNumber, msg.trackerNumber); // if failed, tell client to disconnect if (trackerRole == TrackerRole.Invalid) { ViveShare_Log.LogError(logLevel, "[ViveShare_Server] Failed to assign tracker for client (" + netMsg.conn.connectionId + ")"); netMsg.conn.Disconnect(); return; } // if succeeded, save assigned role and initialize sync pose object else { ViveShare_Log.LogInfo(logLevel, "[ViveShare_Server] Assign tracker (" + trackerRole.ToString() + ") to client (" + netMsg.conn.connectionId + ")"); connData.trackerRole = trackerRole; trackerPoseObjName = trackerRole.ToString(); // create pose tracker and attach sync param object to it GameObject trackerObj = new GameObject(trackerPoseObjName); VivePoseTracker poseTracker = trackerObj.AddComponent <VivePoseTracker>(); poseTracker.viveRole.SetEx <TrackerRole>(trackerRole); ViveShare_SyncIdentity syncId = trackerObj.AddComponent <ViveShare_SyncIdentity>(); syncId.id = trackerPoseObjName; syncId.hasAuthority = true; syncId.Register(); trackerObj.AddComponent <ViveShare_SyncPose>(); if (cameraRig != null) { trackerObj.transform.parent = cameraRig.transform; } connData.trackerObject = trackerObj; } } // return "finished" message ViveTrackerRegistryReturnMsg returnMsg = new ViveTrackerRegistryReturnMsg(); returnMsg.syncObjName = trackerPoseObjName; returnMsg.clientId = connId; NetworkServer.SendToClient(netMsg.conn.connectionId, ViveShareMsgType.TrackerRegistryFinished, returnMsg); // invoke callbacks -- we only think the connection is established at this moment ViveShare_Event.server_clientConnectedEvent.Invoke(netMsg.conn.connectionId); }