コード例 #1
0
        //封装设置关节方向方法,
        private void SetGestureJointPos(PlayerGestureInfo.GestureType gestureType, PlayerGestureData playerGesture, KinectInterop.JointType[] jointTypes)
        {
            for (int i = 0; i < jointTypes.Length - 1; i++)
            {
                Vector3  pos1 = KINECTManager.Instance.GetIndexJointPos(0, jointTypes[i], Camera.main, new Rect(0, 0, 1920, 1080));
                Vector3  pos2 = KINECTManager.Instance.GetIndexJointPos(0, jointTypes[i + 1], Camera.main, new Rect(0, 0, 1920, 1080));
                _Vector3 dis  = new _Vector3((pos2 - pos1).normalized);

                playerGesture.playerGestureInfo.SetPlayerGestureJointData(gestureType, jointTypes[i], dis);
            }
        }
コード例 #2
0
        private int GetJointPos(GestureJudgeData gestureJudge, PlayerGestureData playerGestureData, KinectInterop.JointType[] jointTypes)
        {
            for (int i = 0; i < jointTypes.Length; i++)
            {
                if (!KinectManager.Instance.IsInitialized())
                {
                    return(0);
                }
            }
            gesturesValue.Clear();
            for (int i = 0; i < 2; i++)
            {
                Vector3 pos1 = KINECTManager.Instance.GetUserIDJointPos(userID, jointTypes[i], Camera.main, new Rect(0, 0, 1920, 1080));     //实时关节位置
                Vector3 pos2 = KINECTManager.Instance.GetUserIDJointPos(userID, jointTypes[i + 1], Camera.main, new Rect(0, 0, 1920, 1080)); //实时关节位置

                _Vector3 dir = new _Vector3((pos2 - pos1).normalized);

                PlayerGestureJointData EndPlayerGestures = playerGestureData.playerGestureInfo.GetPlayerGestureJointData(
                    PlayerGestureInfo.GestureType.End, jointTypes[i]);                                                     //获取本地储存结束的关节数据
                PlayerGestureJointData StartPlayerGestures = playerGestureData.playerGestureInfo.GetPlayerGestureJointData(
                    PlayerGestureInfo.GestureType.Start, jointTypes[i]);                                                   //获取本地储存开始的关节数据

                float EndAngle   = Vector3.Angle(EndPlayerGestures.direction.Get(), dir.Get());
                float StartAngle = Vector3.Angle(StartPlayerGestures.direction.Get(), dir.Get());

                if (EndAngle <= playerGestureData.playerGestureInfo.offset)
                {
                    gesturesValue.Add(2);
                }
                else if (StartAngle <= playerGestureData.playerGestureInfo.offset)
                {
                    gesturesValue.Add(1);
                }
                else
                {
                    gesturesValue.Add(0);
                }
            }

            if (!gesturesValue.Contains(0) && !gesturesValue.Contains(1))
            {
                return(2);
            }
            else if (!gesturesValue.Contains(0) && !gesturesValue.Contains(2))
            {
                return(1);
            }
            else
            {
                return(0);
            }
        }
コード例 #3
0
        /// <summary>
        /// 记录关节信息
        /// </summary>
        /// <param name="jointType"></param>
        /// <param name="Dir"></param>
        public void SetPlayerGestureJointData(GestureType gestureType, KinectInterop.JointType jointType, _Vector3 Dir)
        {
            PlayerGestureJointData playerGestureJoints = new PlayerGestureJointData();

            playerGestureJoints.direction = Dir;
            playerGestureJoints.jointType = jointType;

            switch (gestureType)
            {
            case GestureType.End:
                if (EndJointDirection.ContainsKey(jointType))
                {
                    EndJointDirection[jointType] = playerGestureJoints;
                }
                else
                {
                    EndJointDirection.Add(jointType, playerGestureJoints);
                }
                break;

            case GestureType.Start:
                if (StartJointDirection.ContainsKey(jointType))
                {
                    StartJointDirection[jointType] = playerGestureJoints;
                }
                else
                {
                    StartJointDirection.Add(jointType, playerGestureJoints);
                }
                break;

            default:
                break;
            }
        }