zoukankan      html  css  js  c++  java
  • Unity-EasyTouch插件之One Finger

    这节课,我们主要讲下单个手指的测试。比如单击啊,双击啊,拖动,单手滑动等。

    单击:

    public class TouchTest : MonoBehaviour {
    	// Subscribe to events
    	void OnEnable(){
    		//启动On_SimpleTap监听,也就是手指单击屏幕,就会触发On_MySimpleTap的方法执行
    		EasyTouch.On_SimpleTap += On_MySimpleTap;
    	}
    	// Unsubscribe
    	void OnDisable(){
    		EasyTouch.On_SimpleTap -= On_MySimpleTap;//去除监听
    	}
    	// Unsubscribe
    	void OnDestroy(){
    		EasyTouch.On_SimpleTap -= On_MySimpleTap;//去除监听
    	}
    	// Touch start event
    	public void On_MySimpleTap(Gesture gesture){
    		gameObject.renderer.material.color = new Color(1,1,1,1);//单击的时候将Cube的颜色改为白色
    	}
    }
    

      这里我新建一个场景,有一个cube,我们把写好的脚本拖到Cube上。(注意下,这里cube的Mesh Renderer只有一个Material

    点击运行程序,单击cube,发现Cube变成白色。

    长单击:

    public class TouchTest : MonoBehaviour {
    	// Subscribe to events
    	void OnEnable(){
    		//启动On_LongTap监听,也就是手指长时间单击屏幕,就会触发On_MySimpleLongTap的方法执行
    		EasyTouch.On_LongTap += On_MySimpleLongTap;
    	}
    	// Unsubscribe
    	void OnDisable(){
    		EasyTouch.On_LongTap -= On_MySimpleLongTap;//去除监听
    	}
    	// Unsubscribe
    	void OnDestroy(){
    		EasyTouch.On_LongTap -= On_MySimpleLongTap;//去除监听
    	}
    	// Touch start event
    	public void On_MySimpleLongTap(Gesture gesture){
    		gameObject.renderer.material.color = new Color(1,1,1,1);//单击的时候将Cube的颜色改为白色
    	}
    }
    

      这里我们长单击的时间在哪里可以改,就是我上篇讲到的,改了Long Tap time就行了,这里默认的是1秒。

    这里细心的小伙伴可能观察到了,在长单击中有On_LongTapStart和On_LongTapEnd这两个委托,这个就是在长点击开始和结束只调用一帧的。

    public class TouchTest : MonoBehaviour {
    	// Subscribe to events
    	void OnEnable(){
    		//启动On_LongTap监听,也就是手指长时间单击屏幕,就会触发On_MySimpleLongTap的方法执行
    		EasyTouch.On_LongTapStart += On_MySimpleLongTapStart;
    		EasyTouch.On_LongTap += On_MySimpleLongTap;
    		EasyTouch.On_LongTapEnd += On_MySimpleLongTapEnd;
    	}
    	// Unsubscribe
    	void OnDisable(){
    		EasyTouch.On_LongTap -= On_MySimpleLongTap;//去除监听
    	}
    	// Unsubscribe
    	void OnDestroy(){
    		EasyTouch.On_LongTap -= On_MySimpleLongTap;//去除监听
    	}
    	// Touch start event
    	public void On_MySimpleLongTap(Gesture gesture){
    		print ("Long tap");
    		gameObject.renderer.material.color = new Color(1,1,1,1);//单击的时候将Cube的颜色改为白色
    	}
    	public void On_MySimpleLongTapStart(Gesture gesture)
    	{
    		print("Long start");
    	}
    	public void On_MySimpleLongTapEnd(Gesture gesture)
    	{
    		print("Long End");
    	}
    }
    

      运行,然后长点击cube不放,观察Console的打印结果:

    发现在点击没松开之前,On_LongTap里面的方法会一直执行,但是start和end执行一次。

    拖动:

    这里我实现了一个小功能,就是用easytouch来拖动场景里面的物体,

    public class TouchTest : MonoBehaviour {
    	// Subscribe to events
    	void OnEnable(){
    		//启动On_LongTap监听,也就是手指长时间单击屏幕,就会触发On_MySimpleLongTap的方法执行
    		EasyTouch.On_Drag += On_MyDrag;
    		EasyTouch.On_DragStart += On_MyDragStart;
    		EasyTouch.On_DragEnd += On_MyDragEnd;
    	}
    	// Unsubscribe
    	void OnDisable(){
    		//这里我就省力气不写了,无关大雅
    	}
    	// Unsubscribe
    	void OnDestroy(){
    
    	}
    	// Touch start event
    	public void On_MyDrag(Gesture gesture){
    		Vector3 position = gesture.GetTouchToWordlPoint(10);//这里的坐标是Vector3,所以呢这里的0表示的是z轴坐标,
    															//注意啦,这里的z是基于摄像机的z的,假如说你的摄像机的z坐标是
    			  											  //-10的话,你这里写0,当你拖动的时候,他会变成-10的。实际上就是与
    															//表示摄像机z的距离
    		transform.position = position;	
    	}
    	public void On_MyDragStart(Gesture gesture)
    	{
    														
    	}
    	public void On_MyDragEnd(Gesture gesture)
    	{
    
    	}
    }
    

      实际上,我们应该在start里面计算偏移的坐标,然后在拖动的里面减去偏移的坐标。这样不会点击物体的边缘,然后马上变到中心去了。

    滑动和拖动类似,我就不讲了。拖动的运用场景很多,比如拖动地图啊,想coc那样的。还有想要移动某个物体啊等等。

  • 相关阅读:
    个人项目:Java实现WC
    第六篇Scrum冲刺博客
    java实现小学生四则运算
    实现wc部分功能 java
    WordCount作业修改
    我的过去、现在和未来
    WordCount
    Window 通过cmd查看端口占用、相应进程、杀死进程等的命令
    《《《在同一台服务器上配置多个Tomcat
    关于Android 5.x的低功耗蓝牙BLE开发简介
  • 原文地址:https://www.cnblogs.com/CaomaoUnity3d/p/4619670.html
Copyright © 2011-2022 走看看