public void SetPose(Transform root, Dictionary <string, BoneTransformData> boneDictionary) { if (root == null) { return; } foreach (string dictKey in boneDictionary.Keys) { string searchKey = dictKey; if (dictKey == "b_r_wrist") { Debug.Log("Setting wrist to hand"); searchKey = "b_r_hand"; } Transform child = root.FindChildRecursive(searchKey); if (child != null) { BoneTransformData transformData = null; boneDictionary.TryGetValue(dictKey, out transformData); if (child.name.Contains("ring") || child.name.Contains("pinky") || child.name.Contains("index") || child.name.Contains("middle") || child.name.Contains("thumb")) { child.transform.localPosition = transformData.Position; child.transform.localRotation = transformData.Rotation; } //child.transform.localScale = transformData.Scale; } } }
public Dictionary <string, BoneTransformData> ReadPose(OVRHandPoserHand hand, Transform overrideTransformRoot = null, Dictionary <string, BoneTransformData> currDictionary = null) { Dictionary <string, BoneTransformData> outDictionary = (currDictionary != null ? currDictionary : new Dictionary <string, BoneTransformData>()); Transform transformRoot = (overrideTransformRoot ? overrideTransformRoot : hand.previewInWorld.transform); for (int i = 0; i < transformRoot.childCount; i++) { //go into child and add to my point BoneTransformData newBoneTransform = new BoneTransformData(); Transform existingBoneTransform = transformRoot.GetChild(i); newBoneTransform.Rotation = existingBoneTransform.localRotation; newBoneTransform.Position = existingBoneTransform.localPosition; newBoneTransform.Scale = existingBoneTransform.localScale; if (!outDictionary.ContainsKey(existingBoneTransform.name)) { outDictionary.Add(existingBoneTransform.name, newBoneTransform); } ReadPose(hand, transformRoot.GetChild(i), outDictionary); } ; return(outDictionary); }
public Dictionary <string, BoneTransformData> FlipDictionary(Dictionary <string, BoneTransformData> boneDictionary) { Dictionary <string, BoneTransformData> newDictionary = new Dictionary <string, BoneTransformData>(); foreach (string dictKey in boneDictionary.Keys) { BoneTransformData data = null; boneDictionary.TryGetValue(dictKey, out data); string newDictKey = dictKey.Replace("l_", "r_"); Vector3 mirroredEulers = data.Rotation.eulerAngles; //mirroredEulers.x = -mirroredEulers.x; mirroredEulers.y = -mirroredEulers.y; mirroredEulers.z = -mirroredEulers.z; //data.Rotation = Quaternion.Euler(mirroredEulers); data.Position = new Vector3(-data.Position.x, data.Position.y, -data.Position.z); newDictionary.Add(newDictKey, data); } return(newDictionary); }