IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity触控(缩放和360度观察模型、单击、双击、滑动) -> 正文阅读

[游戏开发]Unity触控(缩放和360度观察模型、单击、双击、滑动)

基础知识

Touch接口

altitudeAngle0 弧度值指示触笔平行于表面,pi/2 指示垂直。
azimuthAngle0 弧度值指示触笔指向沿着设备 X 轴方向。
deltaPosition自上次像素坐标更改以来的位置增量。
deltaTime自记录的 Touch 值上次更改以来经过的时间。
fingerId触摸的唯一索引。
maximumPossiblePressure平台的最大可能压力值。如果 Input.touchPressureSupported 返回 false,此属性的值将始终为 1.0f。
phase描述触摸阶段。
position触摸在屏幕空间中的位置(像素坐标)。
pressure当前应用于触摸的压力大小。1.0f 被视为平均触摸压力。如果 Input.touchPressureSupported 返回 false,此属性的值将始终为 1.0f。
radius触摸半径的估计值。加上 radiusVariance 可获得最大触摸大小,减去它可获得最小触摸大小。
radiusVariance此值确定触摸半径的精度。半径加上此值可获得最大触摸大小,减去它可获得最小触摸大小。
rawPosition触摸触点在屏幕空间中的第一个位置(像素坐标)。
tapCount点击次数。
type用于指示触摸是 Direct、Indirect(或远程)还是 Stylus 类型的值。

TouchPhase

该变量是一个枚举类型,其中包含可能的手指触摸状态。这些状态表示手指在最近的帧更新时可以采取的操作。因为设备在整个“生命周期”中对触摸进行跟踪,所以触摸的开始和结束以及之间的移动可以在发生触摸的帧上报告。

Began手指触摸了屏幕。
Moved手指在屏幕上进行了移动。
Stationary手指正在触摸屏幕但尚未移动。
Ended从屏幕上抬起了手指。这是最后一个触摸阶段。
Canceled系统取消了对触摸的跟踪。

详细解释见官方文档

UnityEngine.Touch - Unity 脚本 API

代码

缩放和360度观察物体

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class suofang : MonoBehaviour
{
    private Touch oldTouch1;  //上次触摸点1(手指1)
    private Touch oldTouch2;  //上次触摸点2(手指2)
    void Update()
    {
        //没有触摸,就是触摸点为0
        if (Input.touchCount <= 0)
        {
            return;
        }
        //单点触摸, 水平上下旋转
        if ( Input.touchCount ==1)
        {
            Touch touch = Input.GetTouch(0);
            Vector2 deltaPos = touch.deltaPosition;
            transform.Rotate(Vector3.down * deltaPos.x, Space.World);//绕Y轴进行旋转
            transform.Rotate(Vector3.right * deltaPos.y, Space.World);//绕X轴进行旋转,下面我们还可以写绕Z轴进行旋转
        }
        //多点触摸, 放大缩小
        Touch newTouch1 = Input.GetTouch(0);
        Touch newTouch2 = Input.GetTouch(1);
        //第2点刚开始接触屏幕, 只记录,不做处理
        if (newTouch2.phase == TouchPhase.Began)
        {
            oldTouch2 = newTouch2;
            oldTouch1 = newTouch1;
            return;
        }
        //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型
        float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
        float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);
        //两个距离之差,为正表示放大手势, 为负表示缩小手势
        float offset = newDistance - oldDistance;
        //放大因子, 一个像素按 0.01倍来算(100可调整)
        float scaleFactor = offset / 75f;
        Vector3 localScale = transform.localScale;
        Vector3 scale = new Vector3(localScale.x + scaleFactor,
                                    localScale.y + scaleFactor,
                                    localScale.z + scaleFactor);
        //在什么情况下进行缩放
        if (scale.x >= 0.5f && scale.y <= 2f)
        {
            transform.localScale = scale;
        }
        //记住最新的触摸点,下次使用
        oldTouch1 = newTouch1;
        oldTouch2 = newTouch2;
    }
}

单击、双击、滑动页面

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class chuping : MonoBehaviour
{
    public Text LeftRightTips;          //左右划屏
    public Text UpDownTips;             //上下划屏
    public Text DoubleClickTips;        //双击


    private Vector2 DeltaArea;       //二维向量,滑屏区域

    private bool BoolSecondClick;           //是否为第二次点击
    private float FloFirstTime=0f;          //第一次点击时间
    private float FloSecondTime=0f;         //第二次点击时间

    // Use this for initialization
    void Start () {
        //初始化,测试数值
        DeltaArea = Vector2.zero;
	}
	
	// Update is called once per frame
	void Update () {
        /* 手指离开屏幕 */
        //Input.touchCount是静态整形变量,当一只手指接触到屏幕时返回1,二只手指返回2,以此类推。
        if (Input.touchCount == 1 && (Input.GetTouch(0).phase == TouchPhase.Ended))
        {    
            DeltaArea = Vector2.zero;
            //DoubleClickTips.text = "";          //如果手指离开屏幕,双击效果消失
        }

        /* 识别手指滑屏 */
        if (Input.touchCount == 1 && (Input.GetTouch(0).phase == TouchPhase.Moved))
        {
            DeltaArea.x += Input.GetTouch(0).deltaPosition.x;           //不断获取手指触屏时x,y轴的变化量并赋值给滑屏区域
            DeltaArea.y += Input.GetTouch(0).deltaPosition.y;
            if (DeltaArea.x > 150)
            {
                LeftRightTips.text = "右滑屏";
            }else if(DeltaArea.x < -150)
            {
                LeftRightTips.text = "左滑屏";
            }

            if (DeltaArea.y > 150)
            {
                UpDownTips.text = "上滑屏";

            }else if (DeltaArea.y <- 150)
            {
                UpDownTips.text = "下滑屏";
            }
        }
        

        /* 手指双击识别*/
        if (Input.touchCount == 1 && (Input.GetTouch(0).phase == TouchPhase.Began))
        {
            FloSecondTime = Time.time;
            if (FloSecondTime - FloFirstTime > 0.02F && FloSecondTime - FloFirstTime < 0.3F)            
            {//当第二次点击与第一次点击的时间间隔在0.02秒至0.3秒之间时
                DoubleClickTips.text = "双击了屏幕!";
            }
            else
            {
                DoubleClickTips.text = "单击了屏幕!";
            }
            FloFirstTime = Time.time;       //记录时间
                                                                                                                                                                                                                                                                                                                                      
        }

    }

}

实现效果

也可以与AR技术相结合,如下效果?

AR技术可见我的另一篇文章中的EasyAR图像识别

(7条消息) easyar学习_ccaoshangfei的博客-CSDN博客

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:47:10  更:2022-03-03 16:47:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:39:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码