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 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 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 IEnumerator PollModelDataManager() { UnityModelDataManager mdm = FindObjectOfType <UnityModelDataManager>(); while (mdm == null) { mdm = FindObjectOfType <UnityModelDataManager>(); yield return(new WaitForSeconds(0.7f)); } mdm.AddProvider(headData); }
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(); }