Unity-EasyTouch插件之ReservedArea的運用(主要是避免JoyStick與Touch的矛盾)


昨天有人問我,easytouch插件中有個小bug,其實也不算是bug,插件的設計者早就考慮到這樣的情況。

 

他說同時用easyjoystick和easytouch會發生,移動搖桿的時候,touch(觸摸)也會觸發,也就是說兩者同時產生事件。

 

那么,該如何處理呢。設計者早就知道會發生如此情況,所以他運用ReservedArea(保留區)。

 

什么意思,也就是joystick是個搖桿,那么他肯定存在觸發事情的區域。

 

那么這個觸發事件的區域,他都會加到保留區里面。

 

 

 

我不小心進到了easyjoystick的源碼里面,發現:驗證了我之前講的。

 

 

所以,當我們想移動搖桿的時候,不觸發touch,那么只需一句判斷就行:

 

using UnityEngine;
using System.Collections;
#region 模塊信息
/*----------------------------------------------------------------
// 模塊名:TouchRect
// 創建者:chen
// 修改者列表:
// 創建日期:#CREATIONDATE#
// 模塊描述:
//----------------------------------------------------------------*/
#endregion
public class TouchRect : MonoBehaviour
{
    void OnEnable()
    {
        EasyTouch.On_TouchStart += MyTouchStart;
    }

    void OnDisable()
    {
        UnsubscribeEvent();
    }

    void OnDestroy()
    {
        UnsubscribeEvent();
    }

    void UnsubscribeEvent()
    {
        EasyTouch.On_TouchStart -= MyTouchStart;
    }
    private void MyTouchStart(Gesture gesture)
    {
        if (gesture.isHoverReservedArea)//判斷手指是否在保留區里面,之前那個joystick只要激活就會加到保留區。
                                           //所以,我們只要在這個保留區里面就return掉,什么事情都不用干。
        {
            return;
        }
        //接着你的觸摸功能實現
        //......
    }
   
}

 

ok,大功告成,其實還有一種方法,就是判斷一個手指是否在一個rect里面,這里比較麻煩,因為joystick的區域是適應屏幕的,所以他

的rect是會隨分辨率的改變而改變,那么當分辨率改變的時候,我們的rect也要改變。所以不可取,但是只要你取到EasyJoystick源碼

里面的變量areaRect,也可以實現。這里我不多講。

 

用到的是gesture.isInRect和EasyTouch.IsRectUnderTouch都可取。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM