示例#1
0
        private IEnumerator TryAssignPlayer()
        {
            while (modelDataManager == null)
            {
                UnityModelDataManager[] mdms = FindObjectsOfType <UnityModelDataManager>();

                foreach (UnityModelDataManager item in mdms)
                {
                    if (item.userID == 0)
                    {
                        modelDataManager = item;
                        //// TODO: this is just a workaround.
                        //// vive implementation has no "UnityPharusFootTracking"
                        //if (modelDataManager.GetComponent<UnityPharusFootTracking>() != null) {
                        //    playerNumber = modelDataManager.userID = (int)modelDataManager.GetComponent<UnityPharusFootTracking>().TrackID;
                        //}
                        //else if (modelDataManager.GetComponent<UnityViveTracking>() !=  null) {
                        //    playerNumber = modelDataManager.GetComponent<UnityViveTracking>().GetID();
                        //}

                        playerNumber = modelDataManager.GetComponent <IMikaTrackedEntity>().GetID();

                        item.userID = ID;

                        modelDataManager.AddProvider(headData);
                        modelDataManager.SubscribeReceiver(this);
                        break;
                    }
                }

                yield return(new WaitForSeconds(0.333f));
            }
        }
示例#2
0
        private void Start()
        {
            // init filter
            kalmanFilters = new SimpleKalman[4];
            for (int i = 0; i < kalmanFilters.Length; i++)
            {
                kalmanFilters[i]   = new SimpleKalman();
                kalmanFilters[i].Q = kalmanQ;
                kalmanFilters[i].R = kalmanR;
            }

            orientationFilter = new SimpleKalman[2];
            for (int i = 0; i < orientationFilter.Length; i++)
            {
                orientationFilter[i]   = new SimpleKalman();
                orientationFilter[i].Q = 0.0001;
                orientationFilter[i].R = 0.005;
            }
            hipHeightFilter   = new SimpleKalman();
            hipHeightFilter.Q = 0.0001;
            hipHeightFilter.R = 0.003;

            InitFeet();

            // register data receiver becaus head rotation is needed here
            UnityModelDataManager mdm = GetComponent <UnityModelDataManager>();

            mdm.SubscribeReceiver(this);
        }
        private void OnDestroy()
        {
            UnityModelDataManager mdm = GetComponent <UnityModelDataManager>();

            mdm.RemoveProvider(leftFootData);
            mdm.RemoveProvider(rightFootData);
            mdm.RemoveProvider(hipData);
            mdm.RemoveProvider(leftHandData);
            mdm.RemoveProvider(rightHandData);

            mdm.SubscribeReceiver(this);
            UserManager.Instance.RemoveTrackedEntity(this);
        }
示例#4
0
        public void AssignModelDataManager(UnityModelDataManager mdm)
        {
            // forget old manager
            if (modelDataManager != null)
            {
                modelDataManager.RemoveProvider(headData);
                modelDataManager.UnsubscribeReseiver(this);
            }

            // assign new manager
            modelDataManager = mdm;
            if (mdm == null)
            {
                return;
            }
            modelDataManager.AddProvider(headData);
            modelDataManager.SubscribeReceiver(this);
            playerNumber = modelDataManager.GetComponent <IMikaTrackedEntity>().GetID();
        }
        public void Initialize(Transform leftFoot, Transform rightFoot)
        {
            // init filter
            kalmanFilters = new SimpleKalman[4];
            for (int i = 0; i < kalmanFilters.Length; i++)
            {
                kalmanFilters[i]   = new SimpleKalman();
                kalmanFilters[i].Q = kalmanQ;
                kalmanFilters[i].R = kalmanR;
            }

            orientationFilter = new SimpleKalman[2];
            for (int i = 0; i < orientationFilter.Length; i++)
            {
                orientationFilter[i]   = new SimpleKalman();
                orientationFilter[i].Q = 0.0001;
                orientationFilter[i].R = 0.005;
            }
            hipHeightFilter   = new SimpleKalman();
            hipHeightFilter.Q = 0.0001;
            hipHeightFilter.R = 0.003;

            viveLeftFoot  = leftFoot;  //GameObject.FindGameObjectWithTag("ViveTracker01").transform;
            viveRightFoot = rightFoot; //GameObject.FindGameObjectWithTag("ViveTracker02").transform;

            //if (useHandTracking) {
            //    viveLeftHand = GameObject.FindGameObjectWithTag("ViveController01").transform;
            //    viveRightHand = GameObject.FindGameObjectWithTag("ViveController02").transform;
            //}

            InitFeet();

            // register data receiver becaus head rotation is needed here
            UnityModelDataManager mdm = GetComponent <UnityModelDataManager>();

            mdm.SubscribeReceiver(this);
            //mdm.userID = ID;
            UserManager.Instance.AddTrackedEntity(this);
        }