• Unity简单触屏判断

    2017-01-24 17:17:47
    单手旋转,双手改变相机的view值(类似拉近放远) if (Input.touchCount ) { return; } if (Input.touchCount == 1) { /* if (Input.GetTouch(0).phase == T
    单手旋转,双手改变相机的view值(类似拉近放远)
     	if (Input.touchCount <= 0)
            {
                return;
            }
    
            if (Input.touchCount == 1)
            {
    
                /*
                if (Input.GetTouch(0).phase == TouchPhase.Moved && move)        //触屏
                {
                    Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
                    transform.Translate(touchDeltaPosition.x * Time.deltaTime * speed /3, touchDeltaPosition.y * Time.deltaTime * speed /3, 0f, Cam.transform);                
                }*/
    
                if (Input.touches[0].phase == TouchPhase.Moved)      //触屏移动物体旋转
                {
                    if (Input.touchCount > 1)
                    {
                        return;
                    }
                    float x = Input.touches[0].deltaPosition.x / 3;
                    float y = Input.touches[0].deltaPosition.y / 3; 
    		//我这里尝试用float y = Input.GetAxis("Mouse Y");也可以使用,但是有时候会出现放大完毕后,突然旋转某个角度,下面附上大概原因的链接,但是改为这种,感觉有时候也会,但是概率小了很多。
                    transform.RotateAround(Vector3.up, Time.deltaTime * x);
                    transform.RotateAround(transform.right, -Time.deltaTime * y);
                    return;
                }
            }
            else if (Input.touchCount >= 2)
            {
                Touch newTouch1 = Input.GetTouch(0);
                Touch newTouch2 = Input.GetTouch(1);
    
                if (newTouch2.phase == TouchPhase.Began)
                {
                    oldTouch1 = newTouch1;
                    oldTouch2 = newTouch2;
                    return;
                }
    
                float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
                float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);
    
                float offset = newDistance - oldDistance;
                float scaleFactor = offset / 10f;
    
                float Camview = Cam.GetComponent<Camera>().fieldOfView - scaleFactor;
                if (Camview >= MixCameraView && Camview <= MaxCameraView)
                {
                    Cam.GetComponent<Camera>().fieldOfView = Camview;
                }
                oldTouch1 = newTouch1;
                oldTouch2 = newTouch2;
                return;
            }
    //大致原因链接:http://blog.csdn.net/poda_/article/details/51334051
    

    展开全文
  • 2017-07-05 更新 添加了一个滑动距离 不然手指刚刚触碰上去就开始判断了滑动 我个人默认距离是80 滑动距离超过80的时候才开始执行方法
     private Vector2 st = Vector2.zero; //手指开始按下的位置  
        private Vector2 end = Vector2.zero; //手指拖动的位置  
        enum slideVector { nullVector,up,down, left, right }; //上下左右四个方向
        private slideVector currentVector = slideVector.nullVector; //默认是null
        private float timer;//时间计数器  
        public float offsetTime = 0.01f;//判断的时间间隔  
    
        void OnGUI()
        {
            if (Event.current.type == EventType.MouseDown)//判断当前手指是按下事件  
            {
                st = Event.current.mousePosition;//记录开始按下的位置  
            }
            if (Event.current.type == EventType.MouseDrag)//判断当前手指是拖动事件  
    
            {
                timer += Time.deltaTime;  //计时器
    
                if (timer > offsetTime)
                {
                    end = Event.current.mousePosition; //记录结束下的位置
                    Vector2 slideDirection = st - end;
                    float x = slideDirection.x;
                    float y = slideDirection.y;
    
                    if (y < x && y > -x)
                    {
                        if (currentVector == SlideVector.left) //判断当前方向
                        {
                            return;
                        }                  
                        Debug.Log("left");
                        currentVector = SlideVector.left; //设置方向
                    }
                    else if (y > x && y < -x)
                    {
                        if (currentVector == SlideVector.right)
                        {
                            return;
                        }
                        Debug.Log("right");                  
                        currentVector = SlideVector.right;
                    }
                    else if (y > x && y > -x)
                    {
                        if (currentVector == SlideVector.up)
                        {
                            return;
                        }
                        Debug.Log("up");               
                        currentVector = SlideVector.up;
                    }
                    else if (y < x && y < -x)
                    {
                        if (currentVector == SlideVector.down)
                        {
                            return;
                        }
                        Debug.Log("down");                 
                        currentVector = SlideVector.down;
                    }
                    timer = 0;
                    st = end;//初始化位置
                   
                }        
            }
            if (Event.current.type == EventType.MouseUp)
            {
                currentVector = slideVector.nullVector;       //初始化方向  
            }
        }

     

    2017-07-05 更新   

    添加了一个滑动距离 不然手指刚刚触碰上去就开始判断了滑动  

    我个人默认距离是80  滑动距离超过80的时候才开始执行方法

     

        enum slideVector { nullVector, up, down, left, right };
        private Vector2 touchFirst = Vector2.zero; //手指开始按下的位置
        private Vector2 touchSecond = Vector2.zero; //手指拖动的位置
        private slideVector currentVector = slideVector.nullVector;//当前滑动方向
        private float timer;//时间计数器  
        public float offsetTime = 0.1f;//判断的时间间隔 
        public float SlidingDistance = 80f;
    
        void OnGUI()   // 滑动方法02
        {
            if (Event.current.type == EventType.MouseDown)
            //判断当前手指是按下事件 
            {
                touchFirst = Event.current.mousePosition;//记录开始按下的位置
            }
            if (Event.current.type == EventType.MouseDrag)
            //判断当前手指是拖动事件
            {
                touchSecond = Event.current.mousePosition;
    
                timer += Time.deltaTime;  //计时器
    
                if (timer > offsetTime)
                {
                    touchSecond = Event.current.mousePosition; //记录结束下的位置
                    Vector2 slideDirection = touchFirst - touchSecond;
                    float x = slideDirection.x;
                    float y = slideDirection.y;
    
                    if (y + SlidingDistance < x && y > -x - SlidingDistance)
                    {
    
                        if (currentVector == slideVector.left)
                        {
                            return;
                        }
    
                        Debug.Log("right");
                     
                        currentVector = slideVector.left;
                    }
                    else if (y > x + SlidingDistance && y < -x - SlidingDistance)
                    {
                        if (currentVector == slideVector.right)
                        {
                            return;
                        }
    
                        Debug.Log("left");
           
                        currentVector = slideVector.right;
                    }
                    else if (y > x + SlidingDistance && y - SlidingDistance > -x)
                    {
                        if (currentVector == slideVector.up)
                        {
                            return;
                        }
    
                        Debug.Log("up");
                      
                        currentVector = slideVector.up;
                    }
                    else if (y + SlidingDistance < x && y < -x - SlidingDistance)
                    {
                        if (currentVector == slideVector.down)
                        {
                            return;
                        }
    
                        Debug.Log("Down");
                       
                        currentVector = slideVector.down;
                    }
    
                    timer = 0;
                    touchFirst = touchSecond;
                }
                if (Event.current.type == EventType.MouseUp)
                {//滑动结束  
                    currentVector = slideVector.nullVector;
                }
            }   // 滑动方法
        }  

     

     

     

     

     

    展开全文
  • Unity3D判断触摸方向

    2019-07-13 19:20:11
    据说 Temple Run(神庙逃亡) 就是用这种方式操作的 废话不多说 直接上代码 using UnityEngine; using System.Collections; public class Touch : MonoBehaviour ... // Use this for initializa...

    据说

    Temple Run(神庙逃亡)

    就是用这种方式操作的

    废话不多说

    直接上代码

     

    using UnityEngine;
    using System.Collections;
    
    public class Touch : MonoBehaviour
    {
        private Vector2 beginPos;
        // Use this for initialization
        void Start()
        {
        }
    
        // Update is called once per frame
        void Update()
        {
            TouchDirection();
        }
    
        void TouchDirection()
        {
            if (Input.touchCount <= 0)
                return;
    
            if (Input.touchCount == 1)
            {
                if (Input.touches[0].phase == TouchPhase.Began)
                {
                    beginPos = Input.touches[0].positon;
                }
                else if (Input.touches[0].phase == TouchPhase.Moved)
                {
                }
    
                if (Input.touches[0].phase == TouchPhase.Ended && Input.touches[0].phase != TouchPhase.Canceled)
                {
                    Vector2 pos = Input.touches[0].position;
                    if (Mathf.Abs(beginPos.x = pos.x) > Mathf.Abs(beginPos.y = pos.y))
                    {
                        if (beginPos.x > pos.x)
                        {
                            //向左
                        }
                        else
                        {
                            //向右
                        }
                    }
                    else
                    {
                        if (beginPos.y > pos.y)
                        {
                            //向下
                        }
                        else
                        {
                            //向上
                        }
                    }
                }
            }
        }
    }

    声明:此博客为个人学习之用,如与其他作品雷同,纯属巧合,并请明示指出

    转载于:https://www.cnblogs.com/fws94/p/6439787.html

    展开全文
  • Unity判断手势触摸的类型 ,判断手势的滑动方向,并获取刚触摸以及触摸结束事的坐标 Unity判断手势触摸的类型 ,判断手势的滑动方向,并获取刚触摸以及触摸结束事的坐标 本章咱们一起来看下unity对有触摸...

    Unity判断手势触摸的类型 ,判断手势的滑动方向,并获取刚触摸以及触摸结束事的坐标
    本章咱们一起来看下对有触摸手势做出的响应

    单点触摸

    Input.touchCount==1
    

    移动触摸

    Input.GetTouch(0).phase==TouchPhase.Moved
    

    多点触摸

    Input.touchCount>1
    

    判断两只手指至少有一只为移动触摸

    Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved
    

    判断是否为单点触摸

     public static bool singleTouch()
    
        {
    
            if(Input.touchCount==1)
    
                return true;
    
            return false;
    
        }
    

    判断单点触摸条件下  是否为移动触摸

     public static bool moveSingleTouch()
    
        {
    
            if (Input.GetTouch(0).phase==TouchPhase.Moved)
    
                return true;
    
            return false;
    
        }
    

    判断是否为多点触摸 

     public static bool multipointTouch()
    
        {
    
            if (Input.touchCount > 1)
    
                return true;
    
            return false;
    
        }
    

    判断两只手指至少有一只为移动触摸

    public static bool moveMultiTouch()
    
        {
    
            if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
    
                return true;
    
            return false;
    
    }
    

         * 新建一个公共方法用于判断手指的移动方向 

         * 假如是往左或者往上 则模型往各个轴的正方向位置移动 函数返回1

         * 加入是往右或者往下 则模型往各个轴的负方向位置移动 函数返回-1

    int judueFinger(){
    
            if (Input.GetTouch(0).phase == TouchPhase.Began && startPosFlag == true)
    
            {
    
                //Debug.Log("======开始触摸=====");
    
                startFingerPos = Input.GetTouch(0).position;
    
                startPosFlag = false;
    
            }
    
            if (Input.GetTouch(0).phase == TouchPhase.Ended)
    
            {
    
                //Debug.Log("======释放触摸=====");
    
                startPosFlag = true;
    
            }
    
            nowFingerPos = Input.GetTouch(0).position;
    
            xMoveDistance = Mathf.Abs(nowFingerPos.x - startFingerPos.x);
    
            yMoveDistance = Mathf.Abs(nowFingerPos.y - startFingerPos.y);
    
            if (xMoveDistance>yMoveDistance)
    
            {
    
                if(nowFingerPos.x-startFingerPos.x>0){
    
                    //Debug.Log("=======沿着X轴负方向移动=====");
    
                    backValue = -1;         //沿着X轴负方向移动
    
                }
    
                else
    
                {
    
                    //Debug.Log("=======沿着X轴正方向移动=====");
    
                    backValue = 1;          //沿着X轴正方向移动
    
                }
    
            }
    
            else
    
            {
    
                if (nowFingerPos.y - startFingerPos.y>0)
    
                {
    
                    //Debug.Log("=======沿着Y轴正方向移动=====");
    
                    backValue = 1;         //沿着Y轴正方向移动
    
                }else{
    
                    //Debug.Log("=======沿着Y轴负方向移动=====");
    
                    backValue = -1;         //沿着Y轴负方向移动
    
                }
    
            }
    
            return backValue;
    
        }
    
    展开全文
  • 屏幕上的触摸检测一般会检测点击,滑动,长按等 TouchPhase Enumeration  Describes phase of a finger touch. Values Began A finger touched the screen. Moved A ...

    屏幕上的触摸检测一般会检测点击,滑动,长按等

    TouchPhase Enumeration  

    Describes phase of a finger touch.

    Values

    Began

    A finger touched the screen.

    Moved

    A finger moved on the screen.

    Stationary

    A finger is touching the screen but hasn't moved.

    Ended

    A finger was lifted from the screen. This is the final phase of a touch.

    Canceled

    The system cancelled tracking for the touch, as when (for example) the user puts the device to her face or more than five touches happened simultaneously. This is the final phase of a touch.


    下面放两个例子:

    滑动屏幕,物体跟着移动;

    using UnityEngine;
    using System.Collections;
    
    public class example : MonoBehaviour {
        public float speed = 0.1F;
        void Update() {
            if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) {
                Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
                transform.Translate(-touchDeltaPosition.x * speed, -touchDeltaPosition.y * speed, 0);
            }
        }
    }


    射线检测然后生成一个新物体:

    using UnityEngine;
    using System.Collections;
    
    public class example : MonoBehaviour {
        public GameObject particle;
        void Update() {
            int i = 0;
            while (i < Input.touchCount) {
                if (Input.GetTouch(i).phase == TouchPhase.Began) {
                    Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position);
                    if (Physics.Raycast(ray))
                        Instantiate(particle, transform.position, transform.rotation) as GameObject;
                    
                }
                ++i;
            }
        }
    }











    展开全文
  • //用于绑定参照物对象   var target : Transform;  //缩放系数  var distance = 10.0;  //左右滑动移动速度  var xSpeed = 250.0;  var ySpeed = 120.0;  //缩放限制系数 ...
  •  现在要做点击屏幕,然后判断是否击中了3d场景中的一个物体.(就像子弹发射出去,打击目标一样) 思路:  一开始我想的是,我点击屏幕,那么拥有点击处的坐标,然后从点击处创建一个gameobject,然后沿着...
  • Unity判断手势触摸的类型 ,判断手势的滑动方向,并获取刚触摸以及触摸结束事的坐标 单点触摸 Input.touchCount==1 移动触摸 Input.GetTouch(0).phase==TouchPhase.Moved 多点触摸 Input.touchCount > 1...
  • Unity 触屏操作当将Unity游戏运行到IOS或Android设备上时,桌面系统的鼠标左键可以自动变为手机屏幕上的触屏操作,但如多点触屏等操作却是无法利用鼠标操作进行的。Unity的Input类中不仅包含桌面系统的各种输入功能...
  • 一: 下面先说经常用的三个事件 手指按下、手指移动、手指松开 1. 手指按下 if(input.touchCount==1) { if(input.touches[0].phase==TouchPhase.Beagn) { // 手指按下时,要触发的代码 ...
  • 这里使用UGUI系统自带的方法和射线检测的方式,判断是否点击到UI上: 第一种方法: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using ...
  • Unity判断手势触摸的类型,判断手势的滑动方向,并获取刚触摸以及触摸结束时的坐标 单点触摸 Input.touchCount == 1 移动触摸 Input.GetTouch(0).phase == TouchPhase.Moved 多点触摸 Input.touchCount &...
  • 当IOS或Android设备上运行Unity游戏时,桌面系统的鼠标左键可以自动变为手机屏幕上的触屏操作,但如多点触屏等操作却是无法利用鼠标操作进行的。Unity的Input类中不仅包含桌面系统的各种输入功能,也包含了针对移动...
  • 在项目中,我们有时要通过触摸屏幕来实现模型的放大缩小以及旋转。这个在AR的制作中是非常常见的,所以下面我们来实现这样的功能。 using UnityEngine; using System.Collections; public class ScaleAndRotate : ...
  • 实现
  • 判断鼠标下有没有UI,没有UI就丢掉鼠标上的物品 表示鼠标下没有UI UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject(-1)==false
  • 各位朋友,大家好,我是秦元培,欢迎大家关注我的博主,我的博客地址是blog.csdn.net/...本文采用的方法依然是在[Unity3D]Unity3D游戏开发之自由视角下的角色控制这篇文章中所采用的方法,所以如果大家对于这部
  • 1.判断Unity进去和离开3D物体 使用函数OnMouseEnter,和OnMouseExit void OnMouseEnter() { Debug.Log(进入3D物体); } void OnMouseExit() { Debug.Log(离开3D物体); } 将脚本放到物体身上来实现 2....
1 2 3 4 5 ... 20
收藏数 544
精华内容 217