关于多点触摸(只是触摸,没有功能)

今天做了一个项目,关于多点触摸,因为屏幕大,所以要用的人也比较多,所以需求是:当手指碰到的时候,产生一个波纹(波纹就是给的一个序列帧)

 

先谈一谈遇到的坑,刚开始用的unity自带事件OnPointerDown,就是在方法中实例化一个特效的image(下面用ImageEffect表示),然后给imageEffect赋予父对象canvas,测试:一个手指没问题!挺高兴,可是到了第二个手指的时候,是显示出来了一个特效,但是是在两个手指的中间,第三个手指一样。

      后来查了半天才知道(真的是半天啊哭唧唧o(╥﹏╥)o),详情请看下面(复制过来的)


         1) 如果使用鼠标操作,那么Input.GetAxis对鼠标移动的取值方式表现的很正常,因为不管是否点击,鼠标始终存在,鼠标位置始终能够正常获取,Input.GetAxis("Mouse X")原本是为鼠标设计的,取值方式是连续的;使用Input.GetTouch(0).deltaPosition无效,因为没有触摸操作;

         2)如果使用触摸操作,再细分两种情形:

                   a. 如果使用if(Input.GetMouseButton(0))来作为判断是否按下的条件:

    那么使用Input.GetAxis来获取手指的移动就需要注意了,触摸的手指是可以离开屏幕的,一旦手指离开屏幕,GetAxis("Mouse X")就不知所措了,只好记住离开前的手指位置,下一次手指再接触的时候和这个位置对比(个人猜测GetAxis("Mouse X")是对比鼠标/触摸点位置的方法来取得的)。例如手指从屏幕的左边拿开,然后再触摸屏幕的右边,那么取得的x位置会是一个很大的正值。这就是个很大的问题,这个问题是GetMouseButton和GetAxis在使用手指触摸的情况下配合上的不默契产生的。但是使用Input.GetTouch(0).deltaPosition就不会有这种现象,个人猜测可能是因为deltaPosition是测量每一帧内的移动距离的方法吧。

                   b. 如果使用if(Input.touchCount>0&&Input.GetTouch(0).phase == TouchPhased.Moved)来做为判断是否按下的条件:

使用Input.GetAxis("Mouse X"),没有任何问题;

使用deltaPosition同样没有任何问题,因为这就是为触摸操作而设计的。


虽然上头说的是GetMouseButton,但是因为都是鼠标事件,就当OnPointerDown也是了。。。。。。。。

 

然后就是用了Input,一次成功啊,附上代码(怎么写代码啊。。别人的都好漂亮):

if(Input.touchCount > 0)
        {
            for (int i = 0; i < Input.touchCount; i++)
            {
                if (Input.GetTouch(i).phase == TouchPhase.Began)
                {
                    ToughEffect = Instantiate(Img_ToughEffect, new Vector3(Input.GetTouch(i).position.x, Input.GetTouch(i).position.y, 0), Quaternion.identity);
                    ToughEffect.transform.SetParent(canvas.transform);
                }
            }
        }

 

没了!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值