Beispiel #1
0
        private void Awake()
        {
            behaviour = new MBehaviour(ExecutionPriority.Highest, -900, enabled);

            behaviour.OnAwake(() =>
            {
                InputHands = new Dictionary <int, MInputHand>();

                //初始化手的种类
                var handUI    = MHandUIManager.CreateHandUI(transform, handSprite, handSize);
                var inputHand = new MInputHand(0, handUI, OperatePlatform.Mouse);

                InputHands.Add(0, inputHand);

                isPlaying = true;

                //注册操作者相关事件
                var operate = MOperateManager.AddOperateHand(inputHand);
                //注册方法
                operate.OnGrab    = OnGrabObject;
                operate.OnSetGrab = SetGrabObject;
                operate.OnEnable();
            });

            behaviour.OnUpdate(OnMouseUpdate);

            MBehaviourController.AddBehaviour(behaviour);
        }
Beispiel #2
0
        public MOperate(MInputHand inputHand, Func <bool> func, IHandController handController)
        {
            this.InputHand  = inputHand;
            RayExternaLimit = func;
            UIOperate       = new UIOperate(inputHand);

            this.HandController = handController;
        }
        /// <summary>
        /// 移除手势端
        /// </summary>
        /// <param name="inputHand"></param>
        public static void RemoveOperateHand(MInputHand inputHand)
        {
            OperateKey key = new OperateKey(inputHand.HandIndex, inputHand.Platform);

            if (Operates.ContainsKey(key))
            {
                Operates.Remove(key);
            }
        }
        void KinectMInputInitialize(KinectActiveHandStadus kinectActiveHandStadus)
        {
            InputHands = new Dictionary <int, MInputHand>();
            switch (kinectActiveHandStadus)
            {
            case KinectActiveHandStadus.None:
                throw new Exception("单双手状态未选择");

            case KinectActiveHandStadus.One:
                //初始化手的种类
                var handUI    = MHandUIManager.CreateHandUI(transform, rightHandSprite, handSize);
                var inputHand = new MInputHand(0, handUI, OperatePlatform.Kinect);
                InputHands.Add(0, inputHand);

                isPlaying = true;

                //注册操作者相关事件
                var operate = MOperateManager.AddOperateHand(inputHand, this);
                //注册方法
                operate.OnGrab    = OnRightGrabObject;
                operate.OnSetGrab = SetGrabObject;
                operate.OnEnable();

                break;

            case KinectActiveHandStadus.Two:
                //初始化手的种类
                var rightHandUI    = MHandUIManager.CreateHandUI(transform, rightHandSprite, handSize);
                var rightInputHand = new MInputHand(0, rightHandUI, OperatePlatform.Kinect);
                InputHands.Add(0, rightInputHand);

                var leftHandUI    = MHandUIManager.CreateHandUI(transform, leftHandSprite, handSize);
                var leftInputHand = new MInputHand(1, leftHandUI, OperatePlatform.Kinect);
                InputHands.Add(1, leftInputHand);

                isPlaying = true;

                //注册操作者相关事件
                var rightOperate = MOperateManager.AddOperateHand(rightInputHand, this);
                //注册方法
                rightOperate.OnGrab    = OnRightGrabObject;
                rightOperate.OnSetGrab = SetGrabObject;
                rightOperate.OnEnable();

                //注册操作者相关事件
                var leftOperate = MOperateManager.AddOperateHand(leftInputHand, this);
                //注册方法
                leftOperate.OnGrab    = OnLeftGrabObject;
                leftOperate.OnSetGrab = SetGrabObject;
                leftOperate.OnEnable();
                break;

            default:
                break;
            }
        }
Beispiel #5
0
            /// <summary>
            /// 具体实现,是旋转还是缩放
            /// </summary>
            /// <param name="inputHand"></param>
            /// <param name="IsRotate"></param>
            public void OnAchieve(MInputHand inputHand, bool IsRotate)
            {
                ////如果按下右键
                //if (Input.GetMouseButtonDown(0))
                //{
                //    IsDown = true;
                //    IsObserved = false;
                //}

                //if (Input.GetMouseButtonUp(0))
                //{
                //    IsDown = false;

                //    //已经存在旋转,并且在集合中记录
                //    if (IsObserved)
                //    {
                //        if (IsRotate)
                //            EventCameraRotate.SendListener(Vector3.zero);
                //        else
                //            EventCameraZoom.SendListener(0);
                //    }

                //    IsObserved = false;
                //    inputHand.HandStatus = MInputHandStatus.Idle;
                //}

                //按住右键旋转
                if (IsDown)
                {
                    //向量的模大于2.0时
                    if (!IsObserved && inputHand.ScreenVector.magnitude > 2.0f)
                    {
                        //将动作记录到集合中
                        inputHand.HandStatus = IsRotate ? MInputHandStatus.Rotate : MInputHandStatus.Zoom;

                        IsObserved = true;
                    }

                    //已经存在旋转,并且在集合中记录
                    if (IsObserved)
                    {
                        if (IsRotate)
                        {
                            Vector3 vector = inputHand.ScreenVector;
                            EventCameraRotate.SendListener(vector);
                        }
                        else
                        {
                            EventCameraZoom.SendListener(inputHand.ScreenVector.x / 1200);
                        }
                    }
                }
            }
        /// <summary>
        /// 添加手势端
        /// </summary>
        /// <param name="inputHand"></param>
        /// <param name="func"></param>
        public static MOperate AddOperateHand(MInputHand inputHand, IHandController handController, Func <bool> func = null)
        {
            MOperate operate = GetOperateHand(inputHand.HandIndex, inputHand.Platform);

            if (operate != null)
            {
                operate.RayExternaLimit = func;
                return(operate);
            }

            operate = new MOperate(inputHand, func, handController);

            Operates.Add(new OperateKey(inputHand.HandIndex, inputHand.Platform), operate);

            return(operate);
        }
        /// <summary>
        /// Kinect控制端数据初始化
        /// </summary>
        /// <param name="handModel">Hand model.</param>
        private void KinectInitialize(KinectHandModel handModel)
        {
            InputHands = new Dictionary <int, MInputHand>();

            inputKinect = gameObject.GetComponent <MInputKinect>() ?? gameObject.AddComponent <MInputKinect>();

            MInputKinect.HandModel = handModel;
            IsPlaying = true;

            //实例化右手
            var rightHandUI    = MHandUIManager.CreateHandUI(transform, rightHandOperate.handIcon);
            var rightInputHand = new MInputHand(rightHandOperate.HandIndex, rightHandUI, OperatePlatform.Kinect);

            rightHandUI.name = "kinect-Hand-0";
            InputHands.Add(rightHandOperate.HandIndex, rightInputHand);

            //实例化左手
            var leftHandUI    = MHandUIManager.CreateHandUI(transform, leftHandOperate.handIcon);
            var leftInputHand = new MInputHand(leftHandOperate.HandIndex, leftHandUI, OperatePlatform.Kinect);

            leftHandUI.name = "Kinect-Hand-1";
            InputHands.Add(leftHandOperate.HandIndex, leftInputHand);

            //右手操作端相关初始化与事件绑定
            rightHandOperate.Operate = MOperateManager.AddOperateHand(rightInputHand, this);
            rightHandOperate.BindGrab();

            //左手操作端相关初始化与事件的绑定
            leftHandOperate.Operate = MOperateManager.AddOperateHand(leftInputHand, this);
            leftHandOperate.BindGrab();

            IsEnable = true;

            //mouseController = gameObject.GetComponent<MouseController>() ?? gameObject.AddComponent<MouseController>();
            //mouseController.IsEnable = false;

            //检查一次是否激活手
            HandStop(2);//默认也禁止
        }
Beispiel #8
0
        private void Awake()
        {
            behaviour = new MBehaviour(ExecutionPriority.Highest, -900, enabled);

            InputHands = new Dictionary <int, MInputHand>();

            //初始化手的种类
            var handUI    = MHandUIManager.CreateHandUI(transform, handSprite, handSize);
            var inputHand = new MInputHand(0, handUI, OperatePlatform.Mouse);

            handUI.name = "Mouse-Hand";

            InputHands.Add(0, inputHand);

            isPlaying = true;

            //注册操作者相关事件
            operate = MOperateManager.AddOperateHand(inputHand, this);
            //注册方法
            operate.OnGrab    = OnGrabObject;
            operate.OnSetGrab = SetGrabObject;

            IsEnable = true;
        }
Beispiel #9
0
 public UIOperate(MInputHand inputHand)
 {
     this.InputHand = inputHand;
 }
Beispiel #10
0
 public MOperate(MInputHand inputHand, Func <bool> func)
 {
     this.InputHand  = inputHand;
     RayExternaLimit = func;
     UIOperate       = new UIOperate(inputHand);
 }