EasyTouch On_Drag監(jiān)聽設(shè)置

監(jiān)聽On_Drag需要注意一下三點:

  1. Enable auto-select,[勾選].
    3d物體時能被觸摸識別

  2. pickable layers 3D ,[設(shè)置需要的層級].
    能夠被觸摸識別的3d物體層級

  3. 相機Camera,[一定要設(shè)置],界面或代碼設(shè)置皆可.

     EasyTouch.AddCamera(_camera);
     EasyTouch.RemoveCamera(_camera);
    
EasyTouch Drag設(shè)置.png

On_Drag監(jiān)聽:

 EasyTouch.On_Drag += FurnitureTrigger.Instance.OnDrag;
 EasyTouch.On_Drag -= FurnitureTrigger.Instance.OnDrag;

 public void OnDrag(Gesture gesture)
 { 
    if (gesture.touchCount > 1 || gesture.pickedObject == null)
    {
        return;
    }
 }

注意事項解析:

private void CreateGesture(int touchIndex,EvtType message,Finger finger, SwipeDirection swipe, float swipeLength, Vector2 swipeVector)
{
    ...
    // Auto update picked object
    if (autoUpdatePickedObject && autoSelect){
        if (message != EvtType.On_Drag && message != EvtType.On_DragEnd && message != EvtType.On_DragStart){
            if (GetPickedGameObject(finger)){
                gesture.pickedObject = pickedObject.pickedObj;
                gesture.pickedCamera = pickedObject.pickedCamera;
                gesture.isGuiCamera = pickedObject.isGUI;
            }
            else{
                gesture.pickedObject = null;
                gesture.pickedCamera = null;
                gesture.isGuiCamera = false;
            }
        }
    }
    ...
}

為什么要設(shè)置相機Camera和pickable layers?

  1. 在GetPickedGameObject中判斷touchCameras.Count數(shù)量以及是否有有效的touchCamerastouchCameras[i].camera!=null && touchCameras[i].camera.enabled

  2. 在GetGameObjectAt中Physics.Raycast( ray, out hit,float.MaxValue,mask )射線檢測mask層 (pickable layers,LayerMask mask = pickableLayers3D;),獲取并設(shè)置pickedObjpickedObject.pickedObj = hit.collider.gameObject

  3. 在OneFinger中,若pickedObject 存在,則說明是Drag(If an object is selected we drag);否則是Swipe。
    if (fingers[fingerIndex].pickedObject){ fingers[fingerIndex].gesture = GestureType.Drag;}

private bool GetPickedGameObject(Finger finger, bool isTowFinger=false){

    ...
    
    if (touchCameras.Count>0){
        for (int i=0;i<touchCameras.Count;i++){
            if (touchCameras[i].camera!=null && touchCameras[i].camera.enabled){

                Vector2 pos=Vector2.zero;
                if (!isTowFinger){
                    pos = finger.position;
                }
                else{
                    pos = twoFinger.position;
                }

                
                if (GetGameObjectAt( pos, touchCameras[i].camera,touchCameras[i].guiCamera)){
                        return true;
                    }
            }
        }
    }
    else{
        Debug.LogWarning("No camera is assigned to EasyTouch"); 
    }
    return false;     
}


private bool GetGameObjectAt(Vector2 position, Camera cam, bool isGuiCam){

    Ray ray = cam.ScreenPointToRay( position );
    RaycastHit hit;

    if (enable2D){
        
        LayerMask mask2d = pickableLayers2D;
        RaycastHit2D[] hit2D = new RaycastHit2D[1];
        if (Physics2D.GetRayIntersectionNonAlloc( ray,hit2D,float.PositiveInfinity,mask2d)>0){
            pickedObject.pickedCamera = cam;
            pickedObject.isGUI = isGuiCam;
            pickedObject.pickedObj = hit2D[0].collider.gameObject;
            return true;
        }
    }
    
    LayerMask mask = pickableLayers3D;
    
    if( Physics.Raycast( ray, out hit,float.MaxValue,mask ) ){
        pickedObject.pickedCamera = cam;
        pickedObject.isGUI =isGuiCam;
        pickedObject.pickedObj = hit.collider.gameObject;
        return true;
    }

    return false;
}

private void OneFinger(int fingerIndex){
    ...
    // If an object is selected we drag
    if (fingers[fingerIndex].pickedObject){
      fingers[fingerIndex].gesture = GestureType.Drag;
    }
    ...
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實...
    香橙柚子閱讀 24,702評論 8 183
  • Core Animation其實是一個令人誤解的命名。你可能認為它只是用來做動畫的,但實際上它是從一個叫做Laye...
    小貓仔閱讀 3,950評論 1 4
  • 這是一篇高級教程,其中蘊含了很多的設(shè)計理念和設(shè)計技巧,是一篇不可多得的好文章。在這個教程中,作者將結(jié)合了各種方法技...
    緣下雜音閱讀 816評論 0 3
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,056評論 4 61
  • 從小到大,從學(xué)校到社會,老聽到有群沙臂,不斷的傳教給你:要誠實啊 與人為善 忍讓 包容 謙虛 有禮貌........
    無非來去去閱讀 344評論 0 0

友情鏈接更多精彩內(nèi)容