700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Unity 点击 双击 连击 长按 事件检测(支持PC和移动端)

Unity 点击 双击 连击 长按 事件检测(支持PC和移动端)

时间:2023-01-14 23:55:04

相关推荐

Unity 点击 双击 连击 长按 事件检测(支持PC和移动端)

InputDefine 类:(公共变量、常量、枚举、事件)定义

using System.Collections;using System.Collections.Generic;using UnityEngine;public class InputDefine {/// <summary>两次点击的时间间隔</summary>public const float DOUBLE_CLICK_RATE = 0.3f;/// <summary>连续按住0.5s后判定为长按</summary>public const float LONG_PRESS_SCALE = 0.5f;/// <summary>判断是否点击在UI上面</summary>public static bool IsTouchUI(){if (UnityEngine.EventSystems.EventSystem.current == null) return false;if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer){if (Input.touchCount < 1) return false;if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) return true;}else{if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()) return true;}return false;}}/// <summary>输入事件类型</summary>public enum EnumInputEventType{/// <summary>没有事件</summary>None,/// <summary>单击</summary>Click,/// <summary>双击</summary>DoubleClick,/// <summary>滑动</summary>//Slide,/// <summary>长按</summary>LongPress,}/// <summary>/// 输入事件/// </summary>/// <param name="isTouchUI">是否触摸到UI</param>/// <param name="keyCode">(PC端)0表示左键,1表示右键,2表示中键</param>/// <param name="enumInputEventType">输入事件类型</param>public delegate void DelInputEvent(bool isTouchUI, int keyCode, EnumInputEventType enumInputEventType);/// <summary>/// 鼠标点击/// </summary>/// <param name="isTouchUI">是否触摸到UI</param>/// <param name="keyCode">(PC端)0表示左键,1表示右键,2表示中键</param>/// <param name="clickCount">连续点次数</param>public delegate void DelClickEvent(bool isTouchUI, int keyCode, Vector2 clickPs, int clickCount);

MouseEvent 类:鼠标事件(PC端)

using System.Collections;using System.Collections.Generic;using UnityEngine;using System;/// <summary>鼠标事件</summary>public class MouseEvent : MonoBehaviour{public DelInputEvent onInputEventChange;public DelClickEvent onClickEvent;private MouseParam[] mouseParams = new MouseParam[] { new MouseParam(), new MouseParam(), new MouseParam() };private void Update(){addMouseInputEventTypeJudge();}/// <summary>添加</summary>private void addMouseInputEventTypeJudge(){for(int i=0;i< mouseParams.Length;i++){mouseInputEventTypeJudge(i);}}/// <summary>鼠标左键输入事件判定</summary>private void mouseInputEventTypeJudge(int mouseKeyCode){//鼠标按下if (Input.GetMouseButtonDown(mouseKeyCode)){mouseParams[mouseKeyCode].startTime = Time.realtimeSinceStartup;}//鼠标按住if (Input.GetMouseButton(mouseKeyCode)){mouseParams[mouseKeyCode].holdTime = Time.realtimeSinceStartup - mouseParams[mouseKeyCode].startTime;if (mouseParams[mouseKeyCode].holdTime >= InputDefine.LONG_PRESS_SCALE){if (onInputEventChange != null) onInputEventChange(InputDefine.IsTouchUI(),mouseKeyCode,EnumInputEventType.LongPress);}}//鼠标抬起if (Input.GetMouseButtonUp(mouseKeyCode)){if (mouseParams[mouseKeyCode].holdTime >= InputDefine.LONG_PRESS_SCALE) return;if (onInputEventChange != null) onInputEventChange(InputDefine.IsTouchUI(), mouseKeyCode,EnumInputEventType.Click);mouseParams[mouseKeyCode].t2 = Time.realtimeSinceStartup;if (mouseParams[mouseKeyCode].t2 - mouseParams[mouseKeyCode].t1 < InputDefine.DOUBLE_CLICK_RATE){//Debug.Log(mouseKeyCode + ":双击!");mouseParams[mouseKeyCode].clickCount++;if (onInputEventChange != null) onInputEventChange(InputDefine.IsTouchUI(), mouseKeyCode,EnumInputEventType.DoubleClick);}else{mouseParams[mouseKeyCode].clickCount = 1;}mouseParams[mouseKeyCode].t1 = mouseParams[mouseKeyCode].t2;if (onClickEvent != null) onClickEvent(InputDefine.IsTouchUI(), mouseKeyCode,Input.mousePosition, mouseParams[mouseKeyCode].clickCount);}}public struct MouseParam{public float startTime;public float holdTime;public float t1;public float t2;public int clickCount;}}

TouchEvent 类:触摸事件(移动端)

using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>触摸事件</summary>public class TouchEvent : MonoBehaviour{public DelClickEvent onClickEvent;private void Update(){if (Input.touchCount > 0){for (int i = 0; i < Input.touchCount; i++){Touch touch = Input.GetTouch(i);if (touch.phase == TouchPhase.Began){if (onClickEvent != null) onClickEvent(InputDefine.IsTouchUI(), i, touch.position, touch.tapCount);//Debug.Log(i + "---" + "touch.tapCount:" + touch.tapCount+ "---touch.position:"+ touch.position);}}}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。