Lua 中使用Finger Touch 处理手势识别

Finger Touch 是一种处理手势识别的插件,在游戏开发中经常会用到,这里我先简单介绍一下Finger Touch(如有错误 欢迎指正) :


#region Event
// Fired when a finger begins touching the screen (LeanFinger = The current finger)
public static System.Action<CheapFinger> OnFingerDown;
// Fired when a finger stops touching the screen (LeanFinger = The current finger)
public static System.Action<CheapFinger> OnFingerUp;
// Fired when a finger taps the screen (this is when a finger begins and stops touching the screen within the 'TapThreshold' time) (LeanFinger = The current finger)
public static System.Action<CheapFinger> OnFingerTap;
// Fired when a finger swipes the screen (this is when a finger begins and stops touching the screen within the 'TapThreshold' time, and also moves more than the 'SwipeThreshold' distance) (LeanFinger = The current finger)
public static System.Action<CheapFinger> OnFingerSwipe;
// Fired when a finger begins being held on the screen (this is when a finger has been set for longer than the 'HeldThreshold' time) (LeanFinger = The current finger)
public static System.Action<CheapFinger> OnFingerHeldDown;

// Fired when at least one finger taps the screen (int = Highest Finger Count)
public static System.Action<int> OnMultiTap;

// add: pinch/drag start/end event
public static System.Action OnPinchStart;
public static System.Action OnPinchEnd;
public static System.Action<CheapFinger> OnDragStart;
public static System.Action OnDragEnd;
#endregion

Finger touch 中 事件 有以上 按下 、抬起、敲击、扭转、长按、多指敲击、拖拽等

其次介绍一下:TouchScreen (自定义类)

TouchScreen 中  在 做 4件事

第一:监测手势触发点

第二:  将屏幕触发点转化为射线

第三:通过射线检测是否触发到某个obj

第四:将射线传递给Lua

简要代码 如下:

public void Tick(float deltaTime)
{
if (Input.touchCount > 0 && (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(0).phase == TouchPhase.Stationary))
{
_currentTouchTime += deltaTime;
if (_currentTouchTime > MIN_TIME)
{
_currentTouchTime = 0.0f;
CallLuaFunction(ON_TOUCH_MOVE);
}
}
#if UNITY_STANDALONE_WIN
else if(Input.GetMouseButton(0))
{
_currentTouchTime += deltaTime;
if (_currentTouchTime > MIN_TIME)
{
_currentTouchTime = 0.0f;
CallLuaFunction(ON_TOUCH_MOVE);
}
}
#endif
else
{
_currentTouchTime = 0.0f;
}
}

 

private void CallLuaFunction(string functionName)
{
if (string.IsNullOrEmpty(functionName))
{
return;
}
var ray = rayCamera.ScreenPointToRay(Input.mousePosition);


var hitInfo = GetRayCastHit ();
if (hitInfo != null && hitInfo.Length > 0)
{
if (!HitUI(Input.mousePosition))
{
LuaScriptMgr.Instance.CallLuaFunction("TouchAgent." + functionName, hitInfo);
}
}
}

CheapTouch 继承MonoBehavior ,CheapTouch 实现OnEnable、Update方法;

我们要在OnEnable 和 update 里做什么处理呢?这个就是需要和Lua 逻辑 关联起来

OnEnable 中 设置当前实例,也就是当CheapTouch 挂到游戏某个对象上时 实例化 该 脚本。

Update 中做二件事:

1.TouchScreen 实例传给Lua 

2.更新各种操作和事件 如:

UpdateFingers();
UpdateMultiTap();
UpdateGestures();
UpdateEvents();

UpdateEvent();处理事件 包括 点击 拖拽 扭转 等等并调用Lua

例如点击 事件:

private void RaiseFingerDownEvent(CheapFinger finger)
{
finger.SetCurUIGameObject();
fingerType = FINGER_DOWN;
CallLuaEventMethod(finger);

if (OnFingerDown != null)
{
OnFingerDown(finger);
}
}

转载于:https://www.cnblogs.com/DOGame/p/9350860.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Fingers is your one stop choice for all gesture handling in Unity (and other C# platforms as Fingers has no Unity specific code). Fingers has been tested and runs great on MAC, Windows, iOS and Android. Full C# source code and shader code is provided! No other asset matches Fingers Gestures on price and feature set. Fingers - Touch Gesture for Unity has been featured in multiple Unity promotions and tutorial videos, showing the high quality and full feature set and value proposition. With Fingers, you get all the common touch gestures you are used to built in. This includes: tap, double tap, long tap, pan, rotate, scale and swipe gestures. In addition, creating your own custom gestures is simple and easy. I've recently began adding on-screen controls. Right now a joystick and dpad are included with more controls planned for the future. Adding gestures in the inspector has never been easier. Simply add from the component menu and configure your gesture. Set the callback to your script and you are done! Pan/rotate/scale and drag and drop is simple. Built in scripts for these scenarios, with demo scenes are provided. I've also added image recognition gestures. With a few minutes of tweaking, you can recognize shapes like circles, lightning bolts, check marks and the letter X. Previewing gestures in the player is easy, even without a touch screen. Just use the shift and control key plus mouse wheel to simulate pinch and rotate gestures, along with each button to simulate a different finger. Fingers has a similar architecture to UIGestureRecognizer from iOS, but is built using all C# code and will easily run on any platform that has a mouse or touch screen. Gestures are restricted to most UI elements by default, but this is easily configured if you want the gestures to pass through additional UI elements. This asset works great with the default Unity UI and Event System. Gestures can be executed simultaneously or exclusively (the default). In addition
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值