admin 发布于2017-1-11 19:22 100 次浏览 0 位用户参与讨论   [复制分享主题]



用EasyAR SDK 来开发好玩的应用EasyAR 系列开发教程:
1.AR 开发者资源大汇总
2.EasyAR从入门到精通开发系列教程(1)---搭建开发环境
3.EasyAR从入门到精通开发系列教程(2)--创建模型并互动


   在上一篇教程中,我们用EasyAR 的SDK 完成了创建模型并且使其自动旋转,在这篇教程中,我们在上一教程的项目基础上来实现市面上如小熊尼奥,视+ APP 上面具有的功能--------一个手指实现AR模型的旋转,两个手指实现缩放
  
  继续上一教程内容,我们在恐龙模型上(模型资源地址:链接: https://pan.baidu.com/s/1jIodd5O 密码: pfqj)挂了一段脚本实现其自动旋转,今天我们再建一个新的脚本Gesture.cs 来实现移动端的手势控制。具体代码如下:

  1. using UnityEngine;
  2. using System.Collections;

  3. public class Gesture : MonoBehaviour {
  4.         private Touch oldTouch1;  //上次触摸点1(手指1)
  5.         private Touch oldTouch2;  //上次触摸点2(手指2)

  6.         void Start()
  7.         {

  8.         }




  9.         void Update () {

  10.                 //没有触摸  
  11.                 if ( Input.touchCount <= 0 ){
  12.                         return;  
  13.                 }

  14.                 //单点触摸, 水平上下旋转  
  15.                 if( 1 == Input.touchCount ){
  16.                         Touch touch = Input.GetTouch (0);  
  17.                         Vector2 deltaPos = touch.deltaPosition;           
  18.                         transform.Rotate(Vector3.down  * deltaPos.x , Space.World);   
  19.                         transform.Rotate(Vector3.right * deltaPos.y , Space.World);  
  20.                 }

  21.                 //多点触摸, 放大缩小  
  22.                 Touch newTouch1 = Input.GetTouch (0);  
  23.                 Touch newTouch2 = Input.GetTouch (1);  

  24.                 //第2点刚开始接触屏幕, 只记录,不做处理  
  25.                 if( newTouch2.phase == TouchPhase.Began ){
  26.                         oldTouch2 = newTouch2;  
  27.                         oldTouch1 = newTouch1;  
  28.                         return;  
  29.                 }

  30.                 //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型  
  31.                 float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);  
  32.                 float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);  

  33.                 //两个距离之差,为正表示放大手势, 为负表示缩小手势  
  34.                 float offset = newDistance - oldDistance;  

  35.                 //放大因子, 一个像素按 0.01倍来算(100可调整)
  36.                 float scaleFactor = offset / 100f;  
  37.                 Vector3 localScale = transform.localScale;  
  38.                 Vector3 scale = new Vector3(localScale.x + scaleFactor,
  39.                         localScale.y + scaleFactor,  
  40.                         localScale.z + scaleFactor);  

  41.                 //最小缩放到 0.3 倍  
  42.                 if (scale.x > 0.3f && scale.y > 0.3f && scale.z > 0.3f) {
  43.                         transform.localScale = scale;  
  44.                 }

  45.                 //记住最新的触摸点,下次使用  
  46.                 oldTouch1 = newTouch1;  
  47.                 oldTouch2 = newTouch2;  
  48.         }
  49. }
复制代码


代码注释已有,这是一套unity 游戏移动端的万能模版,大家可以收藏此段代码。




文章来源:http://www.manew.com/thread-99133-1-1.html
无欲无求
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ| Archiver|手机版|小黑屋| 亮社区   

Copyright © 2001-2013 Comsenz Inc.   All Rights Reserved.

Powered by Discuz! X3.2( 京ICP备16064692号-2 )

快速
回复
返回
列表
返回
顶部
加入R社联盟,立即注册账号登陆 QQ账号登陆 微信账号登陆