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

这篇具有很好参考价值的文章主要介绍了第五十三章 Unity 移动平台输入(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

fingerId 触摸索引

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

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

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

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

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

接下来,我们创建一个“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 ,也就是位移差。

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

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

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

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

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

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

相机旋转了。

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

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;
        }
    }

}

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

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

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

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

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

本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id文章来源地址https://www.toymoban.com/news/detail-438802.html

到了这里,关于第五十三章 Unity 移动平台输入(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 第十三章 Unity 移动和旋转(上)

    第十三章 Unity 移动和旋转(上)

    移动和旋转是游戏对象最频繁地操作。我们上个章节简单介绍了Cube的移动和旋转。移动是修改transform的position属性,旋转是修改transform的eulerAngles(欧拉角)属性,两者属性值均可以使用Vector3向量来实现。需要大家注意的是,transform.forward和Vector3.forward的区别(参考坐标系是

    2024年02月05日
    浏览(22)
  • 第五十三天学习记录:C语言进阶:动态内存管理Ⅰ

    问: 栈区堆区静态区的大小是固定的吗?如果栈区满了,会向后2者借位置吗? ChatAI答: 栈区、堆区和静态区的大小通常是由操作系统或编译器预定义的,不是固定的。这些区域的大小通常受到多种因素的影响,如系统物理内存大小、进程虚拟地址空间的大小、编译器和操作

    2024年02月06日
    浏览(16)
  • kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ consumer实战

    kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ consumer实战

    1、上一节课我们学习了MQTT producer 生产者步骤,MQTT consumer消费者步骤。该步骤可以从支持MRQTT协议的中间件获取数据,该步骤和kafka consumer 一样可以处理实时数据交互,如下图所示:  2、双击步骤打开MQTT consumer 配置窗口,如下图所示: Step name: 自定义步骤名称。 Transformat

    2024年04月28日
    浏览(10)
  • 第五十六章 Unity 音频播放

    第五十六章 Unity 音频播放

    Unity可以导入大多数标准音频文件格式,精通于在3D 空间中播放声音,还可根据需要提供其他效果。虽然播放声音是一件非常简单的事情,但是为了模拟现实直接中的各种声音效果,Unity会提供各种各样的组件来实现。 首先,我们需要了解“多普勒效应”。他是一名奥地物理

    2024年02月07日
    浏览(15)
  • 第二十三章 Unity 材质

    第二十三章 Unity 材质

    3D模型主要是通过材质(Material)和贴图(Texture)来表现其精美的外表,说白了就是一张“画皮”而已。我们之前的DirectX课程中介绍过材质,它实际就是对光的反射率,这样简单的设置并不能展现3D模型的外观,因此就引入了贴图来展示模型物体的表面纹理。请 注意,贴图是

    2024年02月16日
    浏览(12)
  • 第四十三章 Unity 开关 (Toggle) UI

    第四十三章 Unity 开关 (Toggle) UI

    本章节我们介绍开关 (Toggle)和开关组 (Toggle Group)。首先,我们点击菜单栏“GameObject”-“UI”-“Toggle”,然后调整它的位置,效果如下所示 相信大家在很多网页中也看到过类似的UI元素,它通常用于让用户勾选某些选项。 我们发现开关 (Toggle)下面有两个子游戏对象,一个是

    2024年02月09日
    浏览(46)
  • 第五章 I/O管理 五、输入/输出应用程序接口&设备驱动程序接口

    第五章 I/O管理 五、输入/输出应用程序接口&设备驱动程序接口

    目录 一、应用程序接口 二、阻塞和非阻塞I/O 阻塞I/O: 非阻塞I/O: 三、设备驱动程序 以前的统一接口不适用了,现在改为了几种不同的接口 阻塞I/O: 应用程序发出I/O系统调用,进程需转为阻塞态等待。 eg:字符设备接口―一从键盘读一个字符get 非阻塞I/O: 应用程序发出I/O系统调

    2024年02月07日
    浏览(37)
  • 第五十章 Unity Input Manager 输入系统(上)

    第五十章 Unity Input Manager 输入系统(上)

    Unity的输入系统支持多种输入设备,比如键盘和鼠标,游戏手柄,触摸屏,VR和AR控制器等等。Unity 通过两个独立的系统提供输入支持:第一,输入管理器 (Input Manager) 是 Unity 核心平台的一部分,默认情况下可用,属于旧的unity输入系统。第二,输入系统 (Input System) 是一个包,

    2024年02月10日
    浏览(11)
  • 第五十五天

        CSS3 ●背景 CSS3 中包含几个新的背景属性,提供更大背景元素控制: •background-image:添加背景图片。不同的背景图像和图像用逗号隔开,所有的图片中显示在最顶端的为第一张。 •background-size:指定背景图像的大小。CSS3以前,背景图像大小由图像的实际大小决定。  

    2024年02月12日
    浏览(12)
  • 算法训练第五十八天

    总结:今日事单调栈的开端,还是挺巧妙的。 496. 下一个更大元素 I - 力扣(LeetCode) 代码: 739. 每日温度 - 力扣(LeetCode)

    2024年02月09日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包