[Unity小技巧] 避免手机触屏连续多次触发触摸touch事件
2017-01-19 18:10
706 查看
很多同学在用Unity做手机游戏开发的时候,都会遇到这样一个问题:在Update()函数里检测屏幕触摸事件并作出响应,但是在手机上实际运行的时候,手指点击屏幕的时候,会连续响应多次触摸(touch)事件。原因是Update()函数在我们手指触摸屏幕到手指离开屏幕这段时间之间调用了多次。像下面:
然而实际开发时,我们更多的需求是:点击一次屏幕,只响应一次触摸事件。怎么解决这个问题呢?
我的思路是:
1、设置一个触屏检测的bool变量touchingScreen,true为正在触屏。
2、在Update()函数里根据Input.touchCount来判断:当Input.touchCount <= 0,设置touchingScreen为false(即没触屏);当Input.touchCount > 0,只有touchingScreen为false才可以进行触摸响应,第一次触摸响应时将touchingScreen设为true(正在触屏,则接下来调用Update()函数时,因为touchingScreen为true所以不可以进行触摸响应)。
代码如下:
好了,最后的效果变成下面这样,即点击一次屏幕只响应一次的触摸touch事件:
这样就解决了一次触屏响应多次触摸事件的问题啦~~~
然而实际开发时,我们更多的需求是:点击一次屏幕,只响应一次触摸事件。怎么解决这个问题呢?
我的思路是:
1、设置一个触屏检测的bool变量touchingScreen,true为正在触屏。
2、在Update()函数里根据Input.touchCount来判断:当Input.touchCount <= 0,设置touchingScreen为false(即没触屏);当Input.touchCount > 0,只有touchingScreen为false才可以进行触摸响应,第一次触摸响应时将touchingScreen设为true(正在触屏,则接下来调用Update()函数时,因为touchingScreen为true所以不可以进行触摸响应)。
代码如下:
using UnityEngine; using System.Collections; using UnityEngine.UI; public class TestScript : MonoBehaviour { private string debugText = "DebugText: \n"; private GameObject DebugText; private GameObject Button; private int timeCount; private bool touchingScreen; //true为touching void Start () { DebugText = GameObject.Find("DebugText"); Button = GameObject.Find("Button"); DebugText.GetComponent<Text>().text = debugText; timeCount = 1; touchingScreen = false; } void Update () { if (Input.touchCount > 0) { // 检测哪些按钮正被按下 for (int i = 0; i < Input.touchCount; i++) { Vector3 touchWorldPosition = Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position); touchWorldPosition.z = 0; if (!touchingScreen && Button != null) { // 第一次响应触屏事件 touchingScreen = true; if (Vector3.Distance(touchWorldPosition, Button.transform.position) < 1) { debugText += "Touching the screen and response " + timeCount + "\n"; DebugText.GetComponent<Text>().text = debugText; } } } } else { touchingScreen = false; } // 退出 if (Input.GetKeyDown(KeyCode.Escape)) { Application.Quit(); } } }
好了,最后的效果变成下面这样,即点击一次屏幕只响应一次的触摸touch事件:
这样就解决了一次触屏响应多次触摸事件的问题啦~~~
相关文章推荐
- 避免连续点击触发多次耗时操作
- 避免点击触发多个按钮和快速点击多次触发事件
- js scroll 滚动连续多次触发事件只执行一次
- swiper函数同一个事件多次连续触发失效解决方案
- 仅IE6/7/8中添加同一个事件handler多次触发后会执行多次
- FileSystemWatcher事件多次触发的解决方法
- live 绑定事件会触发多次
- 【小松教你手游开发】【unity实用技能】unity 几种触发事件
- jquery 事件 多次绑定,多次触发,怎么清除历史绑定事件
- jquery mobile的触控点击事件会多次触发问题的解决方法
- Unity学习笔记 之 触发Unity UI 的 Button 事件 的代码记录
- IE chrom浏览器下window.scroll事件触发多次
- 避免resize多次触发执行的问题
- unity 脚本(自定义组件)的事件触发关系
- Code Fragment-避免用户多次快速的点击事件
- android 防止Button连续点击而响应多次点击事件
- Android开发小技巧系列之避免Toast连续弹出
- FileSystemWatcher事件多次触发的解决方法
- Unity中同一个物体上加载的脚本的执行顺序以及点击Button时触发事件的顺序
- web开发避免resize事件多次执行(更新)