找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 420|回复: 10

[Unity3D] (Unity3d)Vuforia开辟 基本 五-模子 交互

[复制链接]

该用户从未签到

2

主题

14

帖子

10

积分

LV.1

Rank: 1

积分
10
QQ
发表于 2016-5-30 22:40:39 | 显示全部楼层 |阅读模式
最后再来说说模子怎么交互。模子交互重要仍是以下这些交互方法:
重要的交互方法包含:
1、模子的扭转、平移和缩放
这些须要共同触屏来操纵。
2、模子的选定-射线法
模子选定之后显示高亮边框
3、模子动画的操纵
应用代码,把持模子坐标等
应用Unity3d动画体系来完成
4、音频、文字等
应用Unity3D自带的组件完成
NGUI
5、其他
填色板等

这里先先容最基础的交互方法:模子的扭转、平移和缩放
假如在PC上,应用鼠标操纵。
假如在移动终端上,须要联合触屏来操纵。
先来剖析下扭转平移的道理,重要涉及到模子和摄像头的投影矩阵。
是以,一个模子的扭转、平移和缩放重要受这两者的投影矩阵对应关系影响。转变此中一个,城市使模子产生变更。
在一般的场景中,可以转变两者,并且转变摄像头的地位是比拟常用的方法,由于对于缩放比拟轻易,网上一年夜推教程,可以往看看。
可是对AR场景,因为ARCamera是不克不及移动的,所以只能经由过程转变模子自己的坐标系。

请看下面的代码:
  1. using UnityEngine;
  2. using System.Collections;

  3. public class Move : MonoBehaviour
  4. {

  5.     public Transform target;
  6.     float distance = 30f;
  7.     float xSpeed = 150f;
  8.     float ySpeed = 150f;
  9.     float yMinLimit = -180f;
  10.     float yMaxLimit = 180f;
  11.     float x = 0f;
  12.     float y = 0f;
  13.     Vector2 oldPosition1;
  14.     Vector2 oldPosition2;
  15.     private bool flag_Roable = true;//主动
    扭转
    标记


  16.     private System.DateTime oldTime;
  17.     private System.DateTime nowTime;
  18.     // Use this for initialization
  19.     void Start()
  20.     {
  21.         transform.eulerAngles = new Vector3 (0,-90,0);
  22.         Vector3 angles = transform.eulerAngles;
  23.         x = angles.y;
  24.         y = angles.x;
  25.         if (rigidbody)
  26.         {
  27.             rigidbody.freezeRotation = true;
  28.         }
  29.         oldTime = System.DateTime.Now;
  30.     }


  31.     // Update is called once per frame
  32.     void Update()
  33.     {
  34.         nowTime = System.DateTime.Now;
  35.         System.TimeSpan ts1 = new System.TimeSpan(oldTime.Ticks);
  36.         System.TimeSpan ts2 = new System.TimeSpan(nowTime.Ticks);

  37.         System.TimeSpan ts = ts2.Subtract(ts1).Duration();
  38.         if (ts.Seconds > 8 && !Input.anyKey)
  39.         {
  40.             flag_Roable = true;
  41.             oldTime = System.DateTime.Now;
  42.         }
  43.         if (Input.anyKey)
  44.         {
  45.             /*
  46.             if (Input.touchCount == 1)
  47.             {
  48.                 if (Input.GetTouch(0).phase == TouchPhase.Moved)
  49.                 {
  50.                     //x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
  51.                     //y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
  52.                     x = Input.GetAxis("Mouse X") * xSpeed ;
  53.                     y = Input.GetAxis("Mouse Y") * ySpeed ;
  54.                     transform.Rotate(Vector3.up * -x * Time.deltaTime, Space.World);
  55.                     transform.Rotate(Vector3.right * y * Time.deltaTime, Space.World);
  56.                 }
  57.             }*/
  58.             if (Input.touchCount > 1)
  59.             {
  60.                 if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
  61.                 {
  62.                     Vector2 tempPosition1 = Input.GetTouch(0).position;
  63.                     Vector2 tempPosition2 = Input.GetTouch(1).position;
  64.                     if (isEnlarge(oldPosition1, oldPosition2, tempPosition1, tempPosition2))
  65.                     {
  66.                         float oldScale = transform.localScale.x;
  67.                         float newScale = oldScale * 1.025f;
  68.                         transform.localScale = new Vector3(newScale, newScale, newScale);
  69.                     }
  70.                     else
  71.                     {
  72.                         float oldScale = transform.localScale.x;
  73.                         float newScale = oldScale / 1.025f;
  74.                         transform.localScale = new Vector3(newScale, newScale, newScale);

  75.                     }
  76.                     //备份上一次触摸点的地位
    ,用于对照
       
  77.                     oldPosition1 = tempPosition1;
  78.                     oldPosition2 = tempPosition2;
  79.                 }
  80.             }
  81.         }

  82.     }

  83.     bool isEnlarge(Vector2 oP1, Vector2 oP2, Vector2 nP1, Vector2 nP2)
  84.     {
  85.         //函数传进
    上一次触摸两点的地位
    与本次触摸两点的地位
    盘算
    出用户的手势   
  86.         var leng1 = Mathf.Sqrt((oP1.x - oP2.x) * (oP1.x - oP2.x) + (oP1.y - oP2.y) * (oP1.y - oP2.y));
  87.         var leng2 = Mathf.Sqrt((nP1.x - nP2.x) * (nP1.x - nP2.x) + (nP1.y - nP2.y) * (nP1.y - nP2.y));
  88.         if (leng1 < leng2)
  89.         {
  90.             //放年夜
    手势   
  91.             return true;
  92.         }
  93.         else
  94.         {
  95.             //缩小手势   
  96.             return false;
  97.         }
  98.     }
  99. }
复制代码

该用户从未签到

4

主题

14

帖子

12

积分

LV.1

Rank: 1

积分
12
QQ
发表于 2016-10-19 11:54:19 | 显示全部楼层
看帖怎么能不会呢??

该用户从未签到

1

主题

12

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2016-10-20 04:35:31 | 显示全部楼层
这里竟然还有这么一个关于AR的网站的收藏了

该用户从未签到

3

主题

20

帖子

9

积分

LV.1

Rank: 1

积分
9
QQ
发表于 2016-10-21 10:53:48 | 显示全部楼层
想了解下AR增强现实的相关内容来看看

该用户从未签到

1

主题

35

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2016-10-22 13:30:30 | 显示全部楼层
嗯,很不错的样子!!

该用户从未签到

3

主题

17

帖子

11

积分

LV.1

Rank: 1

积分
11
QQ
发表于 2016-10-25 15:29:33 | 显示全部楼层
楼主辛苦了。。回帖是一种美德

该用户从未签到

0

主题

8

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-11-17 17:30:05 | 显示全部楼层
竟然还有零回复,给我消失

该用户从未签到

4

主题

10

帖子

13

积分

LV.1

Rank: 1

积分
13
QQ
发表于 2017-3-24 01:28:44 | 显示全部楼层
增强现实希望发展越来越好

该用户从未签到

3

主题

7

帖子

10

积分

LV.1

Rank: 1

积分
10
QQ
发表于 2017-3-24 05:03:20 | 显示全部楼层
楼主写的很不错,关于AR的知识受教了

该用户从未签到

1

主题

12

帖子

8

积分

LV.1

Rank: 1

积分
8
QQ
发表于 2017-4-19 19:32:58 | 显示全部楼层
增强现实,增强现实,增强现实。重要的事情说三遍
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表