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); } }
总结以上是内存溢出为你收集整理的Lua 中使用Finger Touch 处理手势识别全部内容,希望文章能够帮你解决Lua 中使用Finger Touch 处理手势识别所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)