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)); } }
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); }
public void AssignUserToEntity(int user, int entity) { UnityModelDataManager mdm = null; if (entity != 0) { foreach (IMikaTrackedEntity item in trackedEntities) { if (item.GetID() == entity) { mdm = item.GetModelDataManager(); } } if (mdm == null) { return; } } if (user == 1) { nwPlayer1.AssignModelDataManager(mdm); } else if (user == 2) { nwPlayer2.AssignModelDataManager(mdm); } }
private void InitFeet() { leftFootData = new LeftFootData(() => GetLeftFootPosition(), () => GetLeftFootRotation() /*GetLeftFootRotation()*/); rightFootData = new RightFootData(() => GetRightFootPosition(), () => GetRightFootRotation() /*GetRightFootRotation()*/); hipData = new HipData(() => GetCenterPosition(), () => GetCenterRotation()); leftHandData = new LeftHandData(() => GetLeftHandPosition(), () => GetLeftHandRotation()); rightHandData = new RightHandData(() => GetRightHandPosition(), () => GetRightHandRotation()); UnityModelDataManager mdm = GetComponent <UnityModelDataManager>(); mdm.AddProvider(leftFootData); mdm.AddProvider(rightFootData); mdm.AddProvider(hipData); mdm.AddProvider(leftHandData); mdm.AddProvider(rightHandData); leftFoot = Instantiate(playerFootPrefab); rightFoot = Instantiate(playerFootPrefab); if (useLineRenderers) { leftFoot.InitLineRenderer(Color.red); rightFoot.InitLineRenderer(Color.blue); } }
private void OnDestroy() { UnityModelDataManager mdm = GetComponent <UnityModelDataManager>(); mdm.RemoveProvider(leftFootData); mdm.RemoveProvider(rightFootData); mdm.RemoveProvider(hipData); mdm.RemoveProvider(leftHandData); mdm.RemoveProvider(rightHandData); mdm.UnsubscribeReseiver(this); if (UserManager.Instance != null) { UserManager.Instance.RemoveTrackedEntity(this); } Destroy(avatar); if (LeftFoot != null) { Destroy(LeftFoot.gameObject); } if (rightFoot != null) { Destroy(rightFoot.gameObject); } }
private void InitFeet() { //yield return new WaitUntil(mdm != null); leftFootData = new LeftFootData(() => GetLeftFootPosition(), () => GetLeftFootRotation() /*GetLeftFootRotation()*/); rightFootData = new RightFootData(() => GetRightFootPosition(), () => GetRightFootRotation() /*GetRightFootRotation()*/); hipData = new HipData(() => GetCenterPosition(), () => GetCenterRotation()); leftHandData = new LeftHandData(() => GetLeftHandPosition(), () => GetLeftHandRotation()); rightHandData = new RightHandData(() => GetRightHandPosition(), () => GetRightHandRotation()); UnityModelDataManager mdm = GetComponent <UnityModelDataManager>(); print("mdm " + mdm + " lf " + leftFootData); mdm.AddProvider(leftFootData); mdm.AddProvider(rightFootData); mdm.AddProvider(hipData); mdm.AddProvider(leftHandData); mdm.AddProvider(rightHandData); // comments are approximations which can be used if calibration with trackers does not provide satisfying results leftFootDirectionCorrection = /*vLeftFoot.up;*/ new Vector3(0, -0.3f, 0.1f); leftFootDirectionCorrection.z = 0; rightFootDirectionCorrection = /*vRightFoot.up;*/ new Vector3(0, -0.3f, 0.1f); rightFootDirectionCorrection.z = 0; print("Left foot orientation correction: " + leftFootDirectionCorrection); print("Right foot orientation correction: " + rightFootDirectionCorrection); lastLeftFootPosition = viveLeftFoot.position; lastRightFootPosition = viveRightFoot.position; TrackViveFeet(); }
private void OnDestroy() { UnityModelDataManager mdm = GetComponent <UnityModelDataManager>(); if (mdm != null) { mdm.RemoveProvider(headData); } }
private IEnumerator PollModelDataManager() { UnityModelDataManager mdm = FindObjectOfType <UnityModelDataManager>(); while (mdm == null) { mdm = FindObjectOfType <UnityModelDataManager>(); yield return(new WaitForSeconds(0.7f)); } mdm.AddProvider(headData); }
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); }
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); }