示例#1
0
        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);
            }
        }