/// <summary>
        /// 激活
        /// </summary>
        public void OnInteractiveEnable()
        {
            EventHandGrabObject.AddListener(OnGrabObject, Core.ExecutionPriority.High);
            EventHandReleaseObject.AddListener(OnIdleObject, Core.ExecutionPriority.High);

            coroutineUpdate = StartCoroutine(OnUpdate());
        }
Пример #2
0
        /// <summary>
        /// 设置物体被抓取
        /// </summary>
        /// <param name="target"></param>
        /// <param name="zValue"></param>
        public void SetObjectGrab(GameObject target, float zValue)
        {
            //停止手上已经抓取的
            if (OperateObject != null)
            {
                OperateObjectHandler();

                OperateObject = null;
            }

            var feature = target.GetComponent <FeaturesObjectController>();

            if (feature == null)
            {
                throw new Exception("设置被抓取的物体不存在FeatureObjectController脚本");
            }

            operaObject   = feature.Opera;
            OperateObject = HandleGrab(feature.operaType);

            if (OperateObject != null)
            {
                OperateObject.HandStatus = MInputHandStatus.Grabing;
                InputHand.HandStatus     = MInputHandStatus.Grabing;

                //设置物体被抓取
                if (OnSetGrab != null)
                {
                    OnSetGrab(OperateObject, InputHand.HandIndex, zValue);
                }

                EventHandGrabObject.SendListener(OperateObject.GrabObject, InputHand.HandIndex);
                EventHandGrabObjectKey.SendListener(OperateObject.GrabObject, InputHand.HandIndex);
            }
        }
        /// <summary>
        /// 隐藏
        /// </summary>
        public void OnInteractiveDisable()
        {
            EventHandGrabObject.RemoveListener(OnGrabObject);
            EventHandReleaseObject.RemoveListener(OnIdleObject);

            Search.dataManagers.Clear();

            StopCoroutine(coroutineUpdate);
            coroutineUpdate = null;
        }
Пример #4
0
    private void Start()
    {
        //EventCameraZoom.AddListener((float lerp) =>
        //{
        //    Debug.Log("缩放:" + lerp);
        //});

        //EventCameraRotate.AddListener((Vector3 lerp) =>
        //{
        //    Debug.Log("旋转向量值:" + lerp);
        //});

        //EventHandGrip.AddListener((int handIndex) =>
        //{
        //    Debug.Log("握拳:" + handIndex);
        //});

        //EventHandIdle.AddListener((int handIndex) =>
        //{
        //    Debug.Log("释放:" + handIndex);
        //});

        //Test();

        //var result = IsContains(1, OperatePlatform.Mouse);

        //Debug.Log("result:" + result);

        EventHandGrabObject.AddListener((go, handIndex) =>
        {
            //Debug.Log("抓取手:" + handIndex + "  物体:" + go);
        });

        //EventHandRayTarget.AddListener((hit, handIndex) =>
        //{
        //    Debug.Log("手:" + handIndex + "  射线点:" + hit.collider.gameObject);
        //});

        EventHandRayTargetEnter.AddListener(key, (handIndex) =>
        {
            //Debug.Log("手:" + handIndex + "物体移入:" + key);
        });

        EventHandRayTargetExit.AddListener(key, (handIndex) =>
        {
            //Debug.Log("手:" + handIndex + "物体移出:" + key);
        });

        EventHandReleaseObject.AddListener((go, handIndex) =>
        {
            //Debug.Log("释放手:" + handIndex + "  物体:" + go);
        });
    }
Пример #5
0
        void Register()
        {
            //Events.EventHandReleaseObject.AddListener(Events.EventLevel.B, OnReleaseObject);
            //MCKinect.Events.KinectEventHandReleaseObject.AddListener(MCKinect.Events.EventLevel.B, OnReleaseObject);
            //Events.EventHandGrabObject.AddListener(Events.EventLevel.B, OnGrabObject);

            EventHandReleaseObject.AddListener(OnReleaseObject);
            EventHandGrabObject.AddListener(OnGrabObject);

            if (panel != null)
            {
                panel.onEnter.AddListener(OnPanelEnter);
                panel.onExit.AddListener(OnPanelExit);
            }
        }
Пример #6
0
        void Logout()
        {
            EventHandReleaseObject.RemoveListener(OnReleaseObject);
            EventHandGrabObject.RemoveListener(OnGrabObject);


            //Events.EventHandReleaseObject.RemoveListener(OnReleaseObject);
            //MCKinect.Events.KinectEventHandReleaseObject.RemoveListener(OnReleaseObject);

            //Events.EventHandGrabObject.RemoveListener(OnGrabObject);

            if (panel != null)
            {
                panel.onEnter.RemoveListener(OnPanelEnter);
                panel.onExit.RemoveListener(OnPanelExit);
            }
        }
Пример #7
0
        /// <summary>
        /// 照射物体处理
        /// </summary>
        /// <param name="hit"></param>
        void OnRayTarget(RaycastHit hit)
        {
            EventHandRayTarget.SendListener(hit, InputHand.HandIndex);

            switch (InputHand.HandStatus)
            {
            case MInputHandStatus.Idle:

                if (hit.collider == null)
                {
                    OnNoRayTarget();
                    return;
                }

                if (operaObject != null && operaObject.gameObject == hit.collider.gameObject)
                {
                    return;
                }

                if (operaObject != null)
                {
                    //处理之前的
                    OnNoRayTarget();
                }

                operaObject = hit.collider.GetComponent <OperaObject>();
                EventHandRayTargetEnter.SendListener(operaObject.FeaturesObject.gameObject, InputHand.HandIndex);

                if (operaObject == null)
                {
                    return;
                }
                ShowLabel();

                //显示高亮
                ShowHightLight(false);

                break;

            case MInputHandStatus.Grip:

                if (operaObject != null && operaObject.gameObject != hit.collider.gameObject)
                {
                    return;
                }
                HideLabel();

                InputHand.HandStatus = MInputHandStatus.Grab;    //将该手状态设置为抓取状态

                break;

            case MInputHandStatus.Grab:
                if (operaObject == null)
                {
                    InputHand.HandStatus = MInputHandStatus.Idle;
                    return;
                }

                ShowHightLight(true);
                HideLabel();

                OperateObject = HandleGrab(operaObject.FeaturesObject.operaType);

                if (OperateObject != null)
                {
                    OperateObject.HandStatus = MInputHandStatus.Grabing;

                    EventHandGrabObject.SendListener(OperateObject.GrabObject, InputHand.HandIndex);
                    EventHandGrabObjectKey.SendListener(OperateObject.GrabObject, InputHand.HandIndex);
                }

                InputHand.HandStatus = MInputHandStatus.Grabing;

                break;

            case MInputHandStatus.Invalid:
                if (OnInvalid != null)
                {
                    OnInvalid(OperateObject, InputHand.HandIndex);
                }
                break;

            case MInputHandStatus.Error:

                if (OnError != null)
                {
                    OnError(OperateObject, InputHand.HandIndex);
                }

                break;

            case MInputHandStatus.Grabing:
                //不可操作中,表示正在有物体进行操作,不可进行其他操作
                if (OnGrabing != null)
                {
                    OnGrabing(OperateObject, InputHand.HandIndex);
                }

                break;

            default:
                break;
            }
        }
Пример #8
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);
    }
Пример #9
0
 public void OnDestroy()
 {
     EventHandGrabObject.RemoveListener(OnGrab);
     EventHandReleaseObject.RemoveListener(OnIdle);
 }
Пример #10
0
 void Awake()
 {
     EventHandGrabObject.AddListener(OnGrab, Core.ExecutionPriority.High);
     EventHandReleaseObject.AddListener(OnIdle, Core.ExecutionPriority.High);
     initDeskHeight = deskHeight;
 }
Пример #11
0
 void Start()
 {
     EventHandGrabObject.AddListener(OnGrab, Core.ExecutionPriority.High);
     EventHandReleaseObject.AddListener(OnIdle, Core.ExecutionPriority.High);
 }
Пример #12
0
 void Awake()
 {
     //if (limitObj == null) limitObj = gameObject.transform.parent.gameObject;
     EventHandGrabObject.AddListener(OnGrab, Core.ExecutionPriority.High);
     EventHandReleaseObject.AddListener(OnIdle, Core.ExecutionPriority.High);
 }
Пример #13
0
        /// <summary>
        /// 照射物体处理
        /// </summary>
        /// <param name="hit"></param>
        void OnRayTarget(RaycastHit hit, Ray ray)
        {
            switch (InputHand.HandStatus)
            {
            case MInputHandStatus.Idle:

                EventHandRayTarget.SendListener(hit, InputHand.HandIndex);
                ShowHightLight(false);          //现在是每帧检测
                if (operaObject == null)
                {
                    operaObject = hit.collider.GetComponent <OperaObject>();
                    if (operaObject == null)
                    {
                        return;
                    }
                    IdleOperateEnter();
                }
                else if (operaObject.gameObject == hit.collider.gameObject)
                {
                    //operaObject.BoxCollider.IsShake = false;

                    //RaycastHit detectionHit;
                    //if (Physics.Raycast(ray,out detectionHit,10000,1 << MOperateManager.layerRay | 1 << MOperateManager.layerObject))
                    //{
                    //    if (operaObject.gameObject != detectionHit.collider.gameObject)
                    //    {
                    //        OnNoRayTarget();
                    //        return;
                    //    }
                    //    else
                    //    {
                    //        operaObject.BoxCollider.IsShake = true;
                    //        return;
                    //    }
                    //}
                    //else
                    //{
                    //    OnNoRayTarget();
                    //    return;
                    //}
                }
                else
                {
                    OnNoRayTarget();
                    operaObject = hit.collider.GetComponent <OperaObject>();
                    if (operaObject == null)
                    {
                        return;
                    }
                    IdleOperateEnter();
                }


                break;

            case MInputHandStatus.Grip:
                if (operaObject == null || operaObject != null && operaObject.gameObject != hit.collider.gameObject)
                {
                    return;
                }

                HideLabel();

                InputHand.HandStatus = MInputHandStatus.Grab;    //将该手状态设置为抓取状态

                break;

            case MInputHandStatus.Grab:

                if (operaObject == null)
                {
                    return;
                }


                HideLabel();

                OperateObject = HandleGrab(operaObject.FeaturesObject.operaType);

                if (OperateObject != null)
                {
                    OperateObject.HandStatus = MInputHandStatus.Grabing;

                    EventHandGrabObject.SendListener(OperateObject.GrabObject, InputHand.HandIndex);
                    EventHandGrabObjectKey.SendListener(OperateObject.GrabObject, InputHand.HandIndex);
                }

                InputHand.HandStatus = MInputHandStatus.Grabing;

                break;

            case MInputHandStatus.Invalid:
                if (OnInvalid != null)
                {
                    OnInvalid(OperateObject, InputHand.HandIndex);
                }
                break;

            case MInputHandStatus.Error:

                if (OnError != null)
                {
                    OnError(OperateObject, InputHand.HandIndex);
                }

                break;

            case MInputHandStatus.Grabing:
                ShowHightLight(true);
                //不可操作中,表示正在有物体进行操作,不可进行其他操作
                if (OnGrabing != null)
                {
                    OnGrabing(OperateObject, InputHand.HandIndex);
                }

                break;

            default:
                break;
            }
        }