第五十三章 Unity 移动平台输入(上)

news2024/9/21 0:41:58

在移动设备上,Input 类提供对触摸屏、加速度计和地理/位置输入的访问。这里我们简单介绍Input类对于触摸屏的支持。Input.Touches是一个触摸数组,每个数组元素代表着手指在屏幕上的触碰状态Input.Touch。Input.Touch 数据结构表示:

fingerId 触摸索引

deltatime 从最后状态到当前状态所经过的时间

deltaPosition 从最后状态到当前状态所改变的屏幕位置

phase 当前状态的详细描述,Began代表手指刚刚触摸屏幕,Moved手指在屏幕上移动,Ended手指离开屏幕

接下来,我们使用案例来说明如何使用他们。我们创建一个新的工程“TouchDemo”,然后创建一个平面Plane和立方体Cube,如下所示

接下来,我们创建一个“TouchScript.cs”脚本文件,代码如下

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

public class TouchScript : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // 单点触摸控制相机水平左右旋转
        if (1 == Input.touchCount)
        {
            Touch touch = Input.GetTouch(0);
            Vector2 deltaPos = touch.deltaPosition;
            // 相机绕Y轴进行旋转
            transform.Rotate(Vector3.down * deltaPos.x * 0.1f, Space.World);
        }
    }
}

请注意,上面代码中,我们使用过的是 deltaPosition ,也就是位移差。

接下来,我们将脚本附加到相机上面,

由于电脑上没法测试触摸,因此,我们需要将这工程打包到安卓手机下运行。如果打包到安卓手机,我们将在后面的章节中介绍。这里只给出安卓手机的截屏。

手机运行后的效果,接下来,我们手指点击屏幕并滑动

相机旋转了。

接下来,我们继续添加代码,演示两点触摸屏幕如何实现。这次,我们实现的功能是,两点触摸屏幕,拉进或拉远与立方体视角距离。代码如下

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

public class TouchScript : MonoBehaviour
{
    // 两个旧触摸点
    private Touch oldTouch1;
    private Touch oldTouch2;

    // Start is called before the first frame update
    void Start()
    {
        // 开启多点触碰
        Input.multiTouchEnabled = true;
    }

    // Update is called once per frame
    void Update()
    {
        // 单点触摸控制相机水平左右旋转
        if (1 == Input.touchCount)
        {
            Touch touch = Input.GetTouch(0);
            Vector2 deltaPos = touch.deltaPosition;
            // 相机绕Y轴进行旋转
            transform.Rotate(Vector3.down * deltaPos.x * 0.1f, Space.World);
        }

        // 多点触摸的情况
        if (1 < Input.touchCount)
        {
            // 两个新触摸点
            Touch newTouch1 = Input.GetTouch(0);
            Touch newTouch2 = Input.GetTouch(1);

            // 首次触摸只记录旧触摸点
            if (newTouch1.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;
            // 沿世界坐标系Z轴移动,正数向前,负数向后
            if(offset != 0) transform.Translate(Vector3.forward * offset * 0.1f * Time.deltaTime, Space.World);

            // 新触摸点变成旧触摸点
            oldTouch1 = newTouch1;
            oldTouch2 = newTouch2;
        }
    }

}

上面代码中,我们判断前后两个触摸点的距离,来判断是放大手势,还是缩小手势。然后通过手势的差距来作为相机移动的距离。我们同样发布到安装手机上进行测试。

手机上面运行之后,我们两个手指触摸屏幕,并做出放大的手势。

关于对触摸的内容,我们就简单介绍这些。

本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

带你了解新兴安全技术

随着科技的不断发展&#xff0c;生物识别技术已经成为了一种重要的安全技术。生物识别技术可以通过对个人身份的验证和认证来防止身份盗窃和其他形式的安全威胁&#xff0c;因此越来越多的组织和企业开始使用这种技术来提高安全性。随着科技的不断发展&#xff0c;生物识别技术…

CTFHub-Git泄露-Log

前言 git是一个版本控制工具&#xff0c;通过泄露的.git文件可还原代码 题目如下 wp 1. dirsearch目录扫描 发现存在git泄露&#xff0c;根据提示下载对应git利用工具GitHack&#xff0c;这个工具的特点是能还原历史版本 2. 使用工具下载源码 tips: 最好在linux中操作&…

springboot社区物业管理系统

分享一个springboot社区物业管理系统&#xff0c;需要的私信 项目简介 本系统涉及到的技术主要如下 推荐环境配置&#xff1a;eclipse/idea jdk1.8 maven mysq 前端技术&#xff1a;Layui&#xff0c;Ajax&#xff0c;Json 后端技术&#xff1a;SpringBoot 2.3.0&#xff0c;…

day4-字符设备驱动基础上_基础框架

大纲&#xff1a; 设备分类 申请和注销设备号 函数指针复习 注册字符设备 字符设备驱动框架解析 读操作实现 写操作实现 ioctl操作实现 printk 多个次设备的支持 一、Linux内核对设备的分类 linux的文件种类&#xff1a; -&#xff1a;普通文件 (文件内容、文件名、…

HashMap 的 7 种遍历方式与性能分析

随着 JDK 1.8 Streams API 的发布&#xff0c;使得 HashMap 拥有了更多的遍历的方式&#xff0c;但应该选择那种遍历方式&#xff1f;反而成了一个问题。 本文先从 HashMap 的遍历方法讲起&#xff0c;然后再从性能、原理以及安全性等方面&#xff0c;来分析 HashMap 各种遍历…

C++实践模拟(vector list,反向迭代器)

vector与list的模拟实现&#xff0c;主要是在实现过程中体会模板在编程中的应用&#xff0c;了解C中迭代器的底层实现机制&#xff0c;因此笔者会将重点内容放在模板应用&#xff0c;迭代器底层实现&#xff0c;反向迭代器&#xff0c;迭代器失效等方面&#xff0c;至于其他的增…

Webpack5构建性能优化:构建耗时从150s到60s再到10s | 京东云技术团队

作者&#xff1a;京东科技 牛志伟 近期对Webpack5构建性能进行了优化&#xff0c;构建耗时从150s到60s再到10s&#xff0c;下面详细讲解下优化过程。 优化前现状 1.历史项目基于Vue3 Webpack5技术栈&#xff0c;其中webpack配置项由开发者自己维护&#xff08;没有使用vue/…

有哪些入耳舒服的蓝牙耳机?公认佩戴舒适度最高蓝牙耳机

数码科技市场日益发展的更加智能化&#xff0c;日常所接触到的各类产品都开始往智能化发展&#xff0c;鲜为人知的蓝牙耳机一直是不过时的&#xff0c;因为小巧易携带深受大众喜欢&#xff0c;下面整理了几款佩戴舒适的蓝牙耳机给大家。 一、南卡小音舱Lite2蓝牙耳机 售价&am…

java语法(一)基本概念、数据类型、字符串类、集合、Stream流、异常处理、文件处理IO流

文章目录 java程序运行流程JDK、JRE、JVM的关系 java数据类型基本数据类型基本数据类型之间的转换 引用数据类型数组类Java Bean重写 equals和hashcode 接口接口与类之间的关系 内置包装类装箱和拆箱包装类的应用Object类toString()equals()方法getClass() 方法接收任意引用类型…

QT如何打包生成独立可执行.exe文件

一、将QT程序使用Release编译 二、新建一个文件夹&#xff0c;将Release编译生成的exe文件复制到新建文件夹中 先找到Release编译生成的exe文件夹位置&#xff0c;与项目创建的文件夹有关&#xff1a; 临时文件夹 --》 release --》 xx .exe文件 比如我的这个就是在D:\QtPro\b…

vulnhub-RAVEN:2(MYSQL-UDF提权,手工提权/工具自动提权)

镜像下载&#xff1a;Raven: 2 ~ VulnHub 实验环境&#xff1a;kali&#xff1a;192.168.78.128 vulnhub镜像&#xff1a;192.168.78.133 1、kali查看本地ip地址&#xff0c;以便使用nmap扫描ip段存活主机 2、nmap扫描IP段&#xff0c;发现靶机的IP地址为192.168.78.133 4、访问…

十款常用的Jupyter Notebook Extensions插件

Table of Contents&#xff1a;一款可以在笔记本左侧生成目录树的插件。它可以让你快速导航到不同的章节&#xff0c;也可以折叠和展开各级标题。Codefolding&#xff1a;一款可以折叠代码块的插件。它可以让你隐藏不需要查看的代码&#xff0c;只显示关键的部分&#xff0c;提…

【Linux】Linux的文件操作

文件操作对于不少编程初学者来说都是一件头疼的事情&#xff0c;不管你学习的是什么编程语言&#xff0c;C/C/Java/Go/Python ,因为我们学习到的文件相关的操作对你来说都是一个黑盒&#xff0c;我们只是知道我们应该怎么使用相应的文件函数进行操作&#xff0c;而对于内部的实…

Linux线程同步(2)——初识互斥锁

互斥锁&#xff08;mutex&#xff09;又叫互斥量&#xff0c;从本质上说是一把锁&#xff0c;在访问共享资源之前对互斥锁进行上锁&#xff0c;在访问完成后释放互斥锁&#xff08;解锁&#xff09;&#xff1b;对互斥锁进行上锁之后&#xff0c;任何其它试图再次对互斥锁进行加…

C语言:青蛙跳台与汉诺塔问题

青蛙跳台 原理&#xff1a;一只青蛙跳n个台阶&#xff0c;青蛙可以一次性跳1个台阶&#xff0c;也可以跳2个台阶&#xff0c;问&#xff0c;有多少种跳法&#xff0c;可以跳过n个台阶。 分析&#xff1a;青蛙跳台本质上是递归问题&#xff0c;那它为什么是递归问题呢&#xff…

cleanmymac在哪下载?中文官网安装教程

CleanMyMac是一个系统清理工具&#xff0c;删除系统缓存文件 , 多余的应用程序语言包 , PowerPc软件运行库等。 是个给你的硬盘瘦身的好工具。 系统&#xff1a;macOS 10.14&#xff08;在10.15以及Big Sur中的安装激活教程相同&#xff09;登录CleanMyMac X下载页面&#xff0…

第十四章_缓存双写一致性之更新策略探讨

缓存双写一致性的理解 如果redis中有数据 需要和数据库中的值相同 如果redis中无数据 数据库中的值要是最新值&#xff0c;且准备回写redis 缓存按照操作来分&#xff0c;细分2种 只读缓存 读写缓存 同步直写策略 写数据库后也同步写redis缓存&#xff0c;缓存和数据库…

01:mysql基本操作---DDL

目录 前言: 1:SQL分类 2:类型 3:sql表的创建----简单版本 前言: 1:SQL语句可以单行或多行书写&#xff0c;以分号结尾。 2:SQL语句可以使用空格/缩进来增强语句的可读性。 3:MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写 4:注释: 单行注释:-- 注释…

RabbitMQ详解(三):消息模式(fanout、direct、topic、work)

消费模式 参考官网&#xff1a;https://www.rabbitmq.com/getstarted.html 简单模式 Simple, 参考RabbitMQ详解&#xff08;二&#xff09;&#xff1a;消息模式 Simple(简单)模式 简单模式是最简单的消息模式&#xff0c;它包含一个生产者、一个消费者和一个队列。生产者向队…

量化散户交易数据:追涨爆亏99%,杀跌少赚28倍?| 追涨杀跌一时爽,散户钱包火葬场?【邢不行】

你第一次炒股的经历是不是这样的&#xff1a; 你有一个朋友&#xff0c;他说在XX股票上大赚了一笔&#xff0c;你听后是既羡慕又不服。 于是你下载了炒股软件&#xff0c;看了眼这只股票&#xff0c;有点心动。但由于没有交易经验&#xff0c;股价又确实涨了不少&#xff0c;…