zoukankan      html  css  js  c++  java
  • 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都可取。

  • 相关阅读:
    Open_basedir 开启后项目变慢
    PHP导入百万级excel数据方案
    使用Python统计项目代码行数(Python3.X)
    AttributeError: '_io.TextIOWrapper' object has no attribute 'xreadlines'
    startTime = time.clock()AttributeError: module 'time' has no attribute 'clock
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print
    误删 Win10 应用商店应该如何恢复?
    win10无法开启Windows Defender Firewall服务,错误1058
    设备管理器里面的AAP Server是什么?
    layui——Cannot create property 'LAY_TABLE_INDEX' on number '2'
  • 原文地址:https://www.cnblogs.com/CaomaoUnity3d/p/4845788.html
Copyright © 2011-2022 走看看