Example #1
0
            public void OnZoom()
            {
                if (Input.touchCount >= 2)
                {
                    Touch touch1 = Input.GetTouch(0);
                    Touch touch2 = Input.GetTouch(1);
                    if (touch2.phase == TouchPhase.Began)
                    {
                        lastTouch1 = touch1;
                        lastTouch2 = touch2;
                        return;
                    }
                    float lastDis = Vector2.Distance(lastTouch1.position, lastTouch2.position);
                    float dis     = Vector2.Distance(touch1.position, touch2.position);
                    float offset  = (dis - lastDis) * 0.001f;
                    //float dir = 1;
                    //if (offset<0)
                    //    dir=-1;
                    //offset=MathHelper.Damping(offset,10)*dir;
                    EventCameraZoom.SendListener(offset);
                    lastTouch1 = touch1;
                    lastTouch2 = touch2;
                }
                else
                {
                    float offset = Input.GetAxis("Mouse ScrollWheel");

                    //  offset =MathHelper.Damping(offset,10);
                    EventCameraZoom.SendListener(offset);
                }
            }
Example #2
0
        /// <summary>
        /// 开启相机的无限缩放
        /// </summary>
        void StartCameraZoom()
        {
            mainCamera = MUtility.MainCamera;

            //EventCameraZoom.AddListener(HandZoomFun);
            EventCameraZoom.AddListener(MouseZoomFun);
        }
        /// <summary>
        /// 缩放
        /// </summary>
        private void OnZoom()
        {
            if (IsZoom())
            {
                if (!IsZooming)
                {
                    InputHands[0].HandStatus = MInputHandStatus.Zoom;
                    InputHands[1].HandStatus = MInputHandStatus.Zoom;

                    zoomOperate.OnHandGrip();

                    IsZooming = true;
                }

                float zoomValue = zoomOperate.ZoomCameraToMoveFloat() / 10000;
                if (IsZooming)
                {
                    EventCameraZoom.SendListener(zoomValue);
                }
            }
            else
            {
                if (IsZooming)
                {
                    zoomOperate.OnHandIdle();
                    EventCameraZoom.SendListener(0);

                    InputHands[0].HandStatus = MInputHandStatus.Idle;
                    InputHands[1].HandStatus = MInputHandStatus.Idle;

                    IsZooming = false;
                }
            }
        }
Example #4
0
        /// <summary>
        /// 关闭相机的无限缩放
        /// </summary>
        public void StopCameraZoom()
        {
            //EventCameraZoom.RemoveListener(HandZoomFun);
            EventCameraZoom.RemoveListener(MouseZoomFun);

            isEnable = false;

            isZoomInitialization = false;
        }
        void OnKinectUpdate()
        {
            if (!isEnable)
            {
                return;
            }

            SetHandStatus(0); //右手
            SetHandStatus(1); //左手

            rightHandOperate.OnOperateObjectHandle();
            leftHandOperate.OnOperateObjectHandle();

            //不同模式中的不同操作
            switch (MSwitchManager.CurrentMode)
            {
            //不用区分是左手旋转还是右手旋转,双手使用时会切换到缩放模式
            case OperateModeType.Rotate:
                if (GetInputHand(0).HandStatus == MInputHandStatus.Grip)
                {
                    rightHandOperate.OnGestureAction(leftHandOperate, true);
                }
                if (GetInputHand(1).HandStatus == MInputHandStatus.Grip)
                {
                    leftHandOperate.OnGestureAction(rightHandOperate, true);
                }
                break;

            case OperateModeType.Zoom:
                Vector2 left  = leftHandOperate.Operate.InputHand.ScreenPoint;
                Vector2 right = rightHandOperate.Operate.InputHand.ScreenPoint;
                if (operateModeType != MSwitchManager.CurrentMode)
                {
                    lastLeftPos  = left;
                    lastRightPos = right;
                }
                float lastDis = Vector2.Distance(lastRightPos, lastLeftPos);
                float dis     = Vector2.Distance(left, right);
                float offset  = (dis - lastDis) / 1200;
                EventCameraZoom.SendListener(offset);
                lastLeftPos  = left;
                lastRightPos = right;
                //rightHandOperate.OnGestureAction(leftHandOperate,false);
                //leftHandOperate.OnGestureAction(rightHandOperate,false);
                break;

            case OperateModeType.Tool:
                break;

            default:
                break;
            }
            operateModeType = MSwitchManager.CurrentMode;
        }
Example #6
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);
                        }
                    }
                }
            }
Example #7
0
        /// <summary>
        /// 开启相机对中心点缩放
        /// </summary>
        /// <param name="zoomcenter">缩放中心</param>
        /// <param name="mindistance">最近距离</param>
        /// <param name="maxdistance">最大距离</param>
        public void StartCameraZoomWithCenter(Transform zoomcenter, float mindistance, float maxdistance)
        {
            mainCamera = MUtility.MainCamera;;
            zoomTarget = zoomcenter;

            zoomMinDis = mindistance;
            zoomMaxDis = maxdistance;

            //EventCameraZoom.AddTwoHandDisEvent(HandZoomFun);
            EventCameraZoom.AddListener(MouseZoomFun);

            isEnable = true;

            isZoomInitialization = true;
        }
Example #8
0
 /// <summary>
 /// 暂停或者重启动
 /// </summary>
 /// <param name="isenable"></param>
 public void PauseOrRestart(bool isenable)
 {
     if (!isZoomInitialization)
     {
         return;
     }
     if (isenable)
     {
         //EventCameraZoom.AddTwoHandDisEvent(HandZoomFun);
         EventCameraZoom.AddListener(MouseZoomFun);
     }
     else
     {
         //EventCameraZoom.RemoveTwoHandDisEvent(HandZoomFun);
         EventCameraZoom.RemoveListener(MouseZoomFun);
     }
 }
Example #9
0
            /// <summary>
            /// 抬起时
            /// </summary>
            /// <param name="IsRotate"></param>
            public void OnUp(bool IsRotate)
            {
                IsDown = false;

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

                IsObserved = false;
            }
Example #10
0
    void ontest()
    {
        gameObject.AddGrabObject(onGrab);
        gameObject.RemoveGrabObject(onGrab);
        gameObject.RemoveGrabObjectAll();

        gameObject.AddReleaseObject(OnRelease);
        gameObject.RemoveReleaseObject(OnRelease);
        gameObject.RemoveReleaseObjectAll();

        gameObject.AddRayTargetEnter(OnTargetEnter);
        gameObject.RemoveRayTargetEnter(OnTargetEnter);
        gameObject.RemoveRayTargetEnter();


        gameObject.AddRayTargetExit(OnTargetExit);
        gameObject.RemoveRayTargetExit();
        gameObject.RemoveRayTargetExit(OnTargetExit);


        EventHandRay.AddListener(onRay);
        EventHandRay.RemoveListener(onRay);

        EventHandRays.AddListener(OnRays);
        EventHandRays.RemoveListener(OnRays);

        EventHandStart.AddListener(onstart);
        EventHandStart.RemoveListener(onstart);

        EventHandStop.AddListener(onstop);
        EventHandStop.RemoveListener(onstop);

        EventHandUIRay.AddListener(onRay);
        EventHandUIRay.RemoveListener(onRay);

        EventCameraZoom.AddListener(onzoom);
        EventCameraZoom.RemoveListener(onzoom);

        EventCameraRotate.AddListener(onrotate);
        EventCameraRotate.RemoveListener(onrotate);

        EventHandGrabObject.AddListener(ongrabobject);
        EventHandGrabObject.RemoveListener(ongrabobject);

        EventHandReleaseObject.AddListener(onreleaseobject);
        EventHandReleaseObject.RemoveListener(onreleaseobject);

        EventHandGrabObjectKey.AddListener(gameObject, onGrab);
        EventHandGrabObjectKey.RemoveListener(gameObject, onGrab);

        EventHandReleaseObjectKey.AddListener(gameObject, OnRelease);
        EventHandReleaseObjectKey.RemoveListener(gameObject, OnRelease);

        EventHandRayTarget.AddListener(onraytarget);
        EventHandRayTarget.RemoveListener(onraytarget);

        EventHandRayTargetEnter.AddListener(gameObject, OnTargetEnter);
        EventHandRayTargetEnter.RemoveListener(gameObject, OnTargetEnter);

        EventHandRayTargetExit.AddListener(gameObject, OnTargetExit);
        EventHandRayTargetExit.RemoveListener(gameObject, OnTargetExit);

        EventHandUIRayEnter.AddListener(gameObject, onuienter);
        EventHandUIRayEnter.RemoveListener(gameObject, onuienter);

        EventHandUIRayExit.AddListener(gameObject, onuiexit);
        EventHandUIRayExit.RemoveListener(gameObject, onuiexit);

        EventHandUIRay.AddListener(onRay);
        EventHandUIRay.RemoveListener(onRay);
    }
Example #11
0
 internal override void OnLeave(IFsm <OperateSystem> fSM, bool v)
 {
     base.OnLeave(fSM, v);
     EventCameraZoom.SendListener(0);
 }
Example #12
0
        /// <summary>
        /// 鼠标控制端的妹帧执行
        /// </summary>
        void OnMouseUpdate()
        {
            if (!IsEnable)
            {
                return;
            }

            //将他的屏幕坐标传递出去
            InputHands[0].OnUpdate(Input.mousePosition);

            if (Input.GetMouseButtonDown(0) && InputHands[0].IsIdleStatus)
            {
                InputHands[0].SetGrip();
            }

            if (Input.GetMouseButtonUp(0) && !(InputHands[0].IsRotateZoomStatus || InputHands[0].IsErrorStatus))
            {
                InputHands[0].SetIdle();
            }

            #region 旋转

            //如果按下右键
            if (Input.GetMouseButtonDown(1))
            {
                IsRotateDown = true;
                IsRotate     = false;
            }

            if (Input.GetMouseButtonUp(1))
            {
                IsRotateDown = false;

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

                IsRotate = false;
                InputHands[0].HandStatus = MInputHandStatus.Idle;
            }

            //按住右键旋转
            if (IsRotateDown)
            {
                //向量的模大于2.0时
                if (!IsRotate && InputHands[0].IsIdleStatus && InputHands[0].ScreenVector.magnitude > 2.0f)
                {
                    //将动作记录到集合中
                    InputHands[0].HandStatus = MInputHandStatus.Rotate;

                    IsRotate = true;
                }

                //已经存在旋转,并且在集合中记录
                if (IsRotate)
                {
                    EventCameraRotate.SendListener(InputHands[0].ScreenVector);
                }
            }
            #endregion

            #region 缩放

            //缩放
            if (Input.GetAxis("Mouse ScrollWheel") != 0)
            {
                float result = Input.GetAxis("Mouse ScrollWheel");

                if (!IsZoom && InputHands[0].IsIdleStatus)
                {
                    InputHands[0].HandStatus = MInputHandStatus.Zoom;
                    IsZoom = true;
                }

                //进行缩放
                if (IsZoom)
                {
                    EventCameraZoom.SendListener(result);
                }
            }
            else
            {
                //进行缩放
                if (IsZoom)
                {
                    EventCameraZoom.SendListener(0);
                    IsZoom = false;
                    InputHands[0].HandStatus = MInputHandStatus.Idle;
                }
            }
            #endregion

            if (operateObject != null)
            {
                switch (InputHands[0].HandStatus)
                {
                case MInputHandStatus.Grabing:

                    //需要处理偏移量
                    var     screenDevice = MUtility.MainWorldToScreenPoint(operateObject.GrabObject.transform.position);
                    Vector3 screenMouse  = InputHands[0].ScreenPoint;
                    Vector3 vPos         = MUtility.MainScreenToWorldPoint(new Vector3(screenMouse.x, screenMouse.y, screenDevice.z));

                    Vector3 position = vPos - offset;

                    EventUpdateObject.SendListener(operateObject.GrabObject, position, operateObject.GrabObject.transform.rotation, InputHands[0].HandIndex);

                    break;

                case MInputHandStatus.Idle:

                    this.operateObject = null;
                    break;

                default:
                    break;
                }
            }
        }
Example #13
0
        /// <summary>
        /// 鼠标控制端的妹帧执行
        /// </summary>
        void OnMouseUpdate()
        {
            //将他的屏幕坐标传递出去
            InputHands[0].OnUpdate(Input.mousePosition);

            if (Input.GetMouseButtonDown(0))
            {
                InputHands[0].SetGrip();
            }

            if (Input.GetMouseButtonUp(0))
            {
                InputHands[0].SetIdle();
            }

            //如果按下右键
            if (Input.GetMouseButtonDown(1))
            {
                IsRotateDown = true;
                IsRotate     = false;
            }

            if (Input.GetMouseButtonUp(1))
            {
                IsRotateDown = false;

                //已经存在旋转,并且在集合中记录
                if (IsRotate && ActionConstraint.IsBind(ActionConstraint.Camera_Rotate_Action))
                {
                    EventCameraRotate.SendListener(Vector3.zero);
                }

                IsRotate = false;

                ActionConstraint.RemoveBind(ActionConstraint.Camera_Rotate_Action);
            }

            //按住右键旋转
            if (IsRotateDown)
            {
                //向量的模大于2.0时
                if (!IsRotate && ActionConstraint.BindCount == 0 && InputHands[0].ScreenVector.magnitude > 2.0f)
                {
                    //将动作记录到集合中
                    ActionConstraint.AddBind(ActionConstraint.Camera_Rotate_Action);

                    IsRotate = true;
                }

                //已经存在旋转,并且在集合中记录
                if (IsRotate && ActionConstraint.IsBind(ActionConstraint.Camera_Rotate_Action))
                {
                    EventCameraRotate.SendListener(InputHands[0].ScreenVector);
                }
            }

            //缩放
            if (Input.GetAxis("Mouse ScrollWheel") != 0)
            {
                float result = Input.GetAxis("Mouse ScrollWheel");

                if (!IsZoom && ActionConstraint.BindCount == 0)
                {
                    ActionConstraint.AddBind(ActionConstraint.Camera_Zoom_Action);

                    IsZoom = true;
                }

                //进行缩放
                if (IsZoom && ActionConstraint.IsBind(ActionConstraint.Camera_Zoom_Action))
                {
                    EventCameraZoom.SendListener(result);
                }
            }
            else
            {
                //进行缩放
                if (IsZoom && ActionConstraint.IsBind(ActionConstraint.Camera_Zoom_Action))
                {
                    EventCameraZoom.SendListener(0);
                }

                IsZoom = false;

                if (ActionConstraint.BindCount > 0)
                {
                    ActionConstraint.RemoveBind(ActionConstraint.Camera_Zoom_Action);
                }
            }

            if (operateObject != null)
            {
                switch (InputHands[0].HandStatus)
                {
                case MInputHandStatus.Grabing:

                    //需要处理偏移量
                    var     screenDevice = MUtility.MainWorldToScreenPoint(operateObject.GrabObject.transform.position);
                    Vector3 screenMouse  = InputHands[0].ScreenPoint;
                    Vector3 vPos         = MUtility.MainScreenToWorldPoint(new Vector3(screenMouse.x, screenMouse.y, screenDevice.z));

                    Vector3 position = vPos - offset;

                    EventUpdateObject.SendListener(operateObject.GrabObject, position, operateObject.GrabObject.transform.rotation, InputHands[0].HandIndex);

                    break;

                case MInputHandStatus.Idle:

                    this.operateObject = null;
                    break;

                default:
                    break;
                }
            }
        }
Example #14
0
        void KinectRotateZoom()
        {
            if (MInputKinect.HandGrip(0))
            {
                handIndex   = 0;
                isRightGrip = true;
            }
            else if (MInputKinect.HandRelease(0))
            {
                isRightGrip = false;
            }

            if (MInputKinect.HandGrip(1))
            {
                handIndex  = 1;
                isLeftGrip = true;
            }
            else if (MInputKinect.HandRelease(1))
            {
                isLeftGrip = false;
                handIndex  = 0;
            }


            if (IsRotate)                                                            // 旋转
            {
                if ((isLeftGrip && !isRightGrip) || (isRightGrip && !isLeftGrip))
                {
                    if (!isTempRotate && ActionConstraint.BindCount == 0 && InputHands[0].ScreenVector.magnitude > 2.0f)
                    {
                        //将动作记录到集合中
                        ActionConstraint.AddBind(ActionConstraint.Camera_Rotate_Action);

                        isTempRotate = true;
                    }

                    //已经存在旋转,并且在集合中记录
                    if (isTempRotate && ActionConstraint.IsBind(ActionConstraint.Camera_Rotate_Action))
                    {
                        EventCameraRotate.SendListener(InputHands[handIndex].ScreenVector);
                    }
                }
                else
                {
                    EventCameraRotate.SendListener(Vector3.zero);
                }
            }


            if (IsZoom)                                                                 // 缩放
            {
                if (isRightGrip && isLeftGrip)
                {
                    if (!isTempZoom)
                    {
                        if (twoHandDistance != null)
                        {
                            twoHandDistance.TwoHandGrip();
                        }
                        isTempZoom = true;
                    }

                    if (twoHandDistance == null)
                    {
                        twoHandDistance = new TwoHandDistance();
                        twoHandDistance.TwoHandGrip();
                    }
                    else
                    {
                        float result = twoHandDistance.ZoomCameraToMoveFloat() / 10000;

                        if (result != 0 /* && isTempZoom *//*&& ActionConstraint.IsBind(ActionConstraint.Camera_Zoom_Action)*/)
                        {
                            EventCameraZoom.SendListener(result);
                        }
                    }
                }
                else if (!isRightGrip && !isLeftGrip && twoHandDistance != null)
                {
                    twoHandDistance.TwoHandIdle();
                    EventCameraZoom.SendListener(0);
                    isTempZoom = false;
                }
            }
        }