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);
    }
示例#2
0
    /// <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("涂鸦完成!");
        }
    }
示例#3
0
    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);
        }
    }
示例#4
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();
        }
    }
示例#5
0
 private void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
     else
     {
         Destroy(this);
     }
     _pt = this.gameObject.GetComponent <VivePoseTracker>();
 }
示例#6
0
    /// <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);
            }
        }
    }
示例#7
0
    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);
            }
        }
    }
示例#8
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);
        }