void Update() { UserData user = ControllerUser; if (user == null || user.Skeleton == null) { return; } if (!initialized) { Init(); } foreach (KeyValuePair <nuitrack.JointType, RectTransform> jointsInfo in joints) { nuitrack.JointType jointType = jointsInfo.Key; RectTransform rectTransform = jointsInfo.Value; UserData.SkeletonData.Joint j = user.Skeleton.GetJoint(jointType); if (j.Confidence > JointConfidence) { rectTransform.gameObject.SetActive(true); rectTransform.anchoredPosition = j.AnchoredPoint(parentRect.rect, rectTransform); } else { rectTransform.gameObject.SetActive(false); } if (jointType.GetParent() != nuitrack.JointType.None) { RectTransform endJoint = joints[jointType.GetParent()]; if (rectTransform.gameObject.activeSelf && endJoint.gameObject.activeSelf) { connections[jointType].gameObject.SetActive(true); connections[jointType].anchoredPosition = rectTransform.anchoredPosition; connections[jointType].transform.right = endJoint.position - rectTransform.position; float distance = Vector3.Distance(endJoint.anchoredPosition, rectTransform.anchoredPosition); connections[jointType].transform.localScale = new Vector3(distance, 1f, 1f); } else { connections[jointType].gameObject.SetActive(false); } } } }
void DrawAssignedBones(Dictionary <nuitrack.JointType, Transform> includeBones) { foreach (KeyValuePair <nuitrack.JointType, Transform> jointTransform in includeBones) { nuitrack.JointType joint = jointTransform.Key; nuitrack.JointType parent = joint.GetParent(); Transform transform = jointTransform.Value; float dist = includeBones.ContainsKey(parent) ? Vector3.Distance(transform.position, includeBones[parent].position) : 0; List <Transform> childs = new List <Transform>(); Handles.color = SelectedJoint == joint?Color.Lerp(mainColor, select, 0.5f) : mainColor; if (childsList.ContainsKey(joint)) { foreach (nuitrack.JointType childJoint in childsList[joint]) { if (includeBones.ContainsKey(childJoint)) { Transform childTransform = includeBones[childJoint]; dist += Vector3.Distance(transform.position, childTransform.position); childs.Add(childTransform); } } } int countJoints = childs.Count + (includeBones.ContainsKey(parent) ? 2 : 1); dist = Math.Max(minSizeAssignBoneMark, dist / countJoints); int controlID = GUIUtility.GetControlID(root.name.GetHashCode(), FocusType.Passive); DrawBoneController(controlID, transform, childs, joint, dist * jointSphereMult); } }