说在前面,我现在的项目使用TouchScript 是因为突然改需求要用触摸屏。原本TouchScript的功能根本不能满足项目用。
网上找到大部分教学都没有说怎么用Script写其他功能,所以只能一步一脚印研究了。

首先,没有看懂TouchScript的可以看看这个大大的说明。
TouchScript中文—Gestures - Arcobaleno - CSDN博客

然后我来说说Demo里的坑

Camera

CameraController 里边有一个问题,就是“一指”和“两指”用同一个Gesture,而且附在同一个GameObject上,这导致了后面第二个坑:

如果你把这两个ScreenTransformGesture改成none再重新附加,会发现其中一个Gesture失效,原来附加时是自动把该GameObject 里第一个符合条件的加进去,所以你在附加了第一个后,要先把下面的ScreenTransformGesture Move up 才可以加进去(令人智熄),而且有时候调试出bug也不知道是不是这个导致,常常因为这个浪费了时间。

在twoFingerTransformHandler这个名字的响应方法里实际执行的是“一指”操作,而manipulationTransformedHandler响应方法才是“两指”操作。这个在我改脚本时卡了很久。。。

下面这个是我在Demo Script上修改后的结果

因为之前以为这个很简单,直接放到项目里再改,结果一直失败。这次我先试试在Demo上面改,这个是修改并成功运行的结果。
在Rotation上我加入了限制,使其上下限制在一个角度里。
(后来搬到项目时我发现这样子转动会导致镜头水平倾斜,这是后话。)
然后缩放上我改成了用镜头的FieldOfView数值。

Multiuser

这个其实并不是什么坑,这是写下来防止以后不记得。
Multiuser这个Demo不是用RawImage来分屏,而是用Camera的Depth跟ViewPoint的XYWH控制,然后只要加入FullScreen Layer就行。用RawImage也要同样做法,最好把RawImage调成屏幕大小,然后改Camera ViewPoint的XYWH来控制大小,最后记得,记得,把RawImage的Raycast Target关闭。

================================================================
本来以为我后面会很顺利,结果。。。

搬到项目后,由于MoveGesture和RotateGesture是用在两个镜头中,而ZoomGesture是两个镜头都用到,所以得分开他们,然后我现在无论怎么搞,MoveGesture、RotateGesture和ZoomGesture中只能同时有一个能用,怎么搞也不行。
这才是最让人头疼的地方,Gesture他们独立都有效果,也有各自加入对方的Friendly Gesture List,但无论怎么搞,每次都只有一个Gesture运作。
我发现是自己代码逻辑的问题 我以为是,已解决。 并没有解决

另外RotateGesture明明是“一指”操作的,有时“一指”没有效果,这时候用“两指”操作才有效果,但放开手以后只能“一指”操作,“两指”操作无效。
后来不知咋的就没事了。

MoveGesture出来效果是上下垂直动,只有右键一下才能水平移动
我感觉是ManipulationGesture.DeltaScale的问题,因为代码里只有它是动态的。

cam.transform.localPosition += Vector3.forward*(ManipulationGesture.DeltaScale - 1f)*ZoomSpeed;

================================================================
19 /11
现在我复制一份CameraController.cs 重新把我要的功能改写进去,终于没有两个Gesture不能同时用的问题了。我将MoveGesture 和 RotateGesture 放到同一个Void 内,用 if else 分开。
MoveGesture 部分暂不开放,因为没有时间排查是不是有什么响应了右键

Zoom和Rotation 用了项目原有的逻辑,大概解决了问题。

float xDeg;
float yDeg;
private void OneFingerHandler(object sender, System.EventArgs e)
{/*var rotation = Quaternion.Euler(OneFingerGesture.DeltaPosition.y/Screen.height*RotationSpeed,-OneFingerGesture.DeltaPosition.x/Screen.width*RotationSpeed,OneFingerGesture.DeltaRotation);pivot.localRotation *= rotation;*/if(rotationFlag != 0){if (m_isFirstRotation){m_isFirstRotation = false;xDeg = Vector3.Angle(Vector3.right, pivot.right);yDeg = Vector3.Angle(Vector3.up, pivot.up);}xDeg += (OneFingerGesture.DeltaPosition.x / Screen.width) * RotationSpeed;yDeg -= (OneFingerGesture.DeltaPosition.y / Screen.height) * RotationSpeed / 2;//Clamp the vertical axis for the orbityDeg = Mathf.Clamp(yDeg, yMinLimit, yMaxLimit);pivot.rotation = Quaternion.Euler(yDeg, xDeg, 0);}else{//Zoom Gesture}
}
private void Update()
{if (Input.mouseScrollDelta.y != 0 && !Input.GetMouseButton(0) && !Input.GetMouseButton(1)){m_slider.value += Input.mouseScrollDelta.y;OnSliderValueChanged(m_slider.value);}
}private void TwoFingerHandler(object sender, System.EventArgs e)
{m_slider.value += (TwoFingerGesture.DeltaScale - 1f) * ZoomSpeed;OnSliderValueChanged(m_slider.value);
}public void OnSliderValueChanged(float value)
{m_fieldOfView =(value / 3) * (m_maxFieldOfView - m_minFieldOfView) + m_minFieldOfView;cam.fieldOfView = m_fieldOfView;IBMessenger.Broadcast(IBStrings.IB_STRING_FIELD_OF_VIEW_CHANGED);

Build出来后发现另一个问题,无法点击其他UGUI(例如Button、Slider之类)
原来是因为我没有加入Standard Layer,加了就可以用了。

这样,就可以告一段落了
ヾ( ̄▽ ̄)Bye~Bye~

Unity 触摸插件 TouchScript遇到的坑相关推荐

  1. Unity 之大屏幕多点触控插件 TouchScript 9.0 入门指南

    在端游上大家应该多数都使用过的EasyTouch插件,在EasyTouch 5.0.17 最新版本扩展方法中我有过简单的介绍,今天说一下另一款触摸插件,它非常适合做展示类大屏幕的多点触控TouchSc ...

  2. Unity 之大屏幕多点触控插件 TouchScript 9.0 入门指南(上)

    在端游上大家应该多数都使用过的EasyTouch插件,在EasyTouch 5.0.17 最新版本扩展方法中我有过简单的介绍,今天说一下另一款触摸插件,它非常适合做展示类大屏幕的多点触控TouchSc ...

  3. Unity插件TouchScript初识

    一.下载并试玩 首先去Asset Store下载该插件,过程不多赘述,下载完并导入. 可以先来体验一下,你就明白这个插件好不好玩了,点击那个Examples.unity,然后就可以试玩了.. 二.尝试 ...

  4. Unity常见插件汇总

    Unity常见插件汇总 介绍 收集了相关的Unity插件,供大家学习使用,如果用于商业活动,请购买相关版权 插件列表 1. A* Pathfinding Project 一个功能强大并且易于使用的 U ...

  5. 2021-09-29 Unity WebGL平台开发遇到的坑

    内容简介:最近在用Unity做一个 WebGL 平台的项目,开发过程中遇到了各种各样的坑,这里简单记录一下,以免以后再踩.首先是Http请求的问题,我最开始想的是,直接用C#里的写法,编辑器里测试毫无 ...

  6. Unity 常用插件

    Unity 常用插件 1.NGUI,算是最常用的UI插件了,下载地址:https://download.csdn.net/download/xiaoyaoACi/21028754 2.FingerGe ...

  7. Unity 3D插件大全

    200个插件免费分享约5G. [清单如下] 2D_Toolkit_1.51动画开发插件包 FingerGestures触摸插件 ORK_Okashi_RPG_Kit Unity3D的角色扮演游戏开发工 ...

  8. 雕刻笔应用开发,3D Systems Openhaptics Unity Plugin插件使用心得

    雕刻笔应用开发,3D Systems Openhaptics Unity Plugin插件使用心得 驱动安装: 1.根据设备型号下载对应驱动. https://3dssupport.microsoft ...

  9. VScode 乱装插件环境破坏踩坑自我反思总结

    VScode 乱装插件环境破坏踩坑自我反思总结 1.2021-01-18早上由于百度 <Vscode 常用插件推荐>,瞎装了插件,把自己的Vscode环境给破坏了 2.在文件-首选项-设置 ...

最新文章

  1. SimpleDateFormat 日期,时间格式转化
  2. ubuntu如何修改字符集编码
  3. 小猿圈之学习java web需要有什么基础?
  4. 拼写检查工具是android,Android的文本和输入---拼写检查器(一)-Go语言中文社区...
  5. php 自动验证 正则表达,使用正则表达式验证登录页面的输入内容
  6. c语言判断一个已知的二叉树是否是二叉排序树_10584 二叉树怎样序列化才能重建...
  7. Nifty JUnit:在方法和类级别上使用规则
  8. linux在指定目录多个文件中搜索关键字
  9. java二维数组的遍历
  10. 推荐系统之协同过滤算法分布式实现(附代码实现)
  11. 建模算法(八)——插值
  12. Linux运维常用命令及知识
  13. Java:集合,Array、Collection(List/Set/Queue)、Map的遍历,比如:ArrayList,LinkedList,HashSet,HashMap...
  14. 什么是TTL电平和cmos电平?ttl电平和cmos电平的区别是什么?
  15. 第七周 项目4 - 队列数组
  16. 小米8开机android正在启动不了,小米无法开机解决办法【图文教程】
  17. jquery UI 隐藏关闭按钮
  18. 习题 6.10 有一篇文章,共有三行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
  19. java如何将汉字转换为拼音_将汉字转换为汉语拼音java实现
  20. 如何对手机进行软件测试?

热门文章

  1. JS学习笔记day05(完结)!
  2. 计算机对等网络的概念,基于软件定义网络的对等网传输调度优化
  3. RDD论文翻译 --弹性分布式数据集:一种基于内存的集群计算的容错性抽象方法
  4. 弱小目标运动检测算法
  5. Matlab的各种数据读取、文件读写等操作汇总
  6. hiai和鸿蒙的关系,HiAI
  7. Win10 隐藏 “此电脑“ 不常用默认文件夹 onedrive
  8. Linux下Nignx的安装
  9. 介绍一款优秀的网络问卷调查工具 -- FormWise
  10. Java(二)分支循环、数组、字符串、方法