现在的手机都是触屏控制的,那么在游戏中我们想通过手指在屏幕上滑动捕获相应的动作呢?Unity官网API中提供了Input类和Touch类,在该类里提供了许多接口。相信只要我们稍微看下,就可以自己应用了!下面以模型的旋转与缩放为例,学习下是如何实现多点触控的!

1,打开Unity建一个空的项目工程。

2,以系统提供的模型为例,此处只做逻辑测试。

3,新建控制类脚本ScaleAndRotate.cs

  

using UnityEngine;
using System.Collections;
using System.IO; public class ScaleAndRotate : MonoBehaviour
{
/// <summary>
/// 上次触摸点1(手指1)
/// </summary>
private Touch oldTouch1;
/// <summary>
/// 上次触摸点2(手指2)
/// </summary>
private Touch oldTouch2; /// <summary>
/// 用于显示滑动距离
/// </summary>
private float oldDis = 0;
private float newDis = 0;
private float scaler = 0; void Update()
{
//没有触摸
if (Input.touchCount <= 0)
{
return;
} //单点触摸, 水平上下旋转
if (1 == Input.touchCount)
{
Touch touch = Input.GetTouch(0);
Vector2 deltaPos = touch.deltaPosition;
transform.Rotate(Vector3.down * deltaPos.x, Space.World);
transform.Rotate(Vector3.right * deltaPos.y, Space.World);
} //多点触摸, 放大缩小
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);
oldDis = oldDistance;
newDis = newDistance; //两个距离之差,为正表示放大手势, 为负表示缩小手势
float offset = newDistance - oldDistance; //放大因子, 一个像素按 0.01倍来算(100可调整)
float scaleFactor = offset / 100f;
Vector3 localScale = transform.localScale;
Vector3 scale = new Vector3(localScale.x + scaleFactor,
localScale.y + scaleFactor,
localScale.z + scaleFactor);
scaler = scaleFactor; //允许模型最小缩放到 0.3 倍最大放大2倍
if (scale.x > 0.3f && scale.y > 0.3f && scale.z > 0.3f)
{
//实用差值运算,模型平滑缩放
transform.localScale = Vector3.Lerp(transform.localScale,new Vector3(Mathf.Clamp(localScale.x + scaleFactor, 0.3f, 2f),
Mathf.Clamp(localScale.y + scaleFactor, 0.3f, 2f),
Mathf.Clamp(localScale.z + scaleFactor, 0.3f, 2f)),1f);
}
//记住最新的触摸点,下次使用
oldTouch1 = newTouch1;
oldTouch2 = newTouch2;
} void OnGUI()
{
GUILayout.Label("oldDis:" + oldDis);
GUILayout.Label("newDis:" + newDis);
GUILayout.Label("scaler:" + scaler);
GUILayout.Label("localScale:" + this.transform.localScale); if (Input.GetKeyDown(KeyCode.Escape))
{
Application.Quit();
}
} }

准备工作吧结束了,代码不用看了吧,注释很清楚了!

本次测试需要真机测试,所以转换平台Build一下就OK了!

工程地址:git@github.com:wuzhangwuzhang/UnityTouchTest.git

Unity 触屏缩放模型的更多相关文章

  1. 【Unity】EasyTouch5触屏检测

    Unity AssetStore地址    https://assetstore.unity.com/packages/tools/input-management/easy-touch-5-touc ...

  2. Unity学习疑问记录之触屏

    当将Unity游戏运行到ios或android设备上时,桌面系统中的鼠标左键操作可以自动变为手机屏幕上的触屏操作,但鼠标操作无法实现一些特有的触屏操作,比如多点触屏. 触控对于Android移动设备来 ...

  3. unity3d 触屏多点触控(旋转与缩放)

    unity3d 触屏多点触控(旋转与缩放) /*Touch OrbitProgrammed by: Randal J. Phillips (Caliber Mengsk)Original Creati ...

  4. touch移动触屏滑动事件

    移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...

  5. wex5 实战 手指触屏插件 hammer的集成与优劣

    前言 前几天,给客户做了一个图片点击放大,很简单,客户说能不能双手指缩放图片呢? 想到了hammer,不管好用不好用,总得试. 网上居然没有像样的中文文档和成熟案例,有的文写的鬼都看不懂.还是自已动手 ...

  6. JS移动客户端--触屏滑动事件

    移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...

  7. jquery触屏幻灯片

    一.前言 去年接触了移动Web开发,做了些手机端的网站及应用,还有些小的微信游戏和活动页面.每个项目里或多或少的都会有一些触屏事件等.其中有两个用到了jquery触屏幻灯片.刚开始的时候也在百度上搜索 ...

  8. HTML5触屏版多线程渲染模板技术分享

    前言: 了解js编译原理的屌丝们都知道,js是单线程的,想当年各路神仙为了实现js的多线程,为了解决innerHTML输出大段HTML卡页面的顽疾,纷纷设计了诸如假冒的“多线程“实现,我自己也在写开源 ...

  9. JS移动客户端--触屏滑动事件 banner图效果

    JS移动客户端--触屏滑动事件 移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的t ...

随机推荐

  1. Linux下的进程控制块——task_struct

    在Linux中具体实现PCB的是 task_struct数据结构,以下实现摘自github 我想说它真的很长很长...... ↓ struct task_struct { volatile long ...

  2. 解决蛋疼的阿里云单CPU使用率的问题。

    工作中涉及到阿里云的应用.在性能测试阶段,压测过程中只要一个CPU未使用满,第二个CPU以至于第三个和第四个CPU完全用不到. 后来和阿里云的同事沟通他们现在用的是单队列的网卡,只能靠RPS/RFS这 ...

  3. Facebook Architecture

    Facebook Architecture Quora article a relatively old presentation on facebook architecture another I ...

  4. 实现类似QQ的折叠效果

    //  主要核心是点击自定义header来展开和收起每一组里面的cell,模型里面应该有isShow此属性来记录开展还是收起. //  ViewController.m//  实现类似QQ的折叠效果/ ...

  5. boost

    参考博客 http://www.cnblogs.com/lidabo/p/3805487.html http://www.cppblog.com/Robertxiao/archive/2013/01/ ...

  6. 教训 Mac下装windows系统 失败后 磁盘空间丢失

    本来Mac上装的是win10 最近老提示快过期了 想到月底就要停止免费更新了 决定装一下win8 然后升级到win10 因为之前有过装win10的经验 所以很轻松 进入Mac 先到bootcamp 取 ...

  7. jquery1.9学习笔记 之选择器(基本元素三)

    标签选择器("element") 描述: 选择所有与给出标签名相匹配的元素. 同功能的JS原生方法:getElementByTagName() 例子:  查找每个div元素. &l ...

  8. php中urlencode使用

    URLEncode的方式一般有两种,一种是传统的基于GB2312的Encode(Baidu.Yisou等使用),另一种是基于UTF-8的Encode(Google.Yahoo等使用). 本工具分别实现 ...

  9. Lintcode--005(最长公共子序列)

    Given two strings, find the longest common subsequence (LCS).     最长公共子序列 Your code should return th ...

  10. SqlServer2008 新功能:简单数据加密

    一.首先要把密码字段改成 varbinary 类型. CREATE TABLE [dbo].[UserInfo]( [id] [int] IDENTITY(1,1) NOT NULL, [name] ...