AR相机的实现,功能包括:

1.双指进行放大缩小操作;

2.单指水平滑动时,水平旋转;

3.单指垂直滑动时,垂直旋转。

代码如下:

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class ARCamera : MonoBehaviour
{//目标public GameObject target;//当前camera距离public float distance = 3.5f;//camera 最远距离public float maxDistance=5f;//camera 最近距离public float minDistance=2f;//camera 移动速度public float moveSpeed = 0.3f;//水平移动速度public float xSpeed = 250.0f;//垂直移动速度public float ySpeed = 120.0f;//垂直旋转最小角度public float yMinLimit = -20;//垂直旋转最大角度public float yMaxLimit = 80;private float x = 0.0f;private float y = 0.0f;//前一帧手指位置private Vector2 oldPosition1;private Vector2 oldPosition2;private Vector3 tempPositon;//PC端测试模式public bool bDebug=false;void Start(){Vector2 angles = transform.eulerAngles;x = angles.y;y = angles.x;//确保刚体不会改变旋转if (GetComponent<Rigidbody>())GetComponent<Rigidbody>().freezeRotation = true;}void Update(){//PC端测试if (bDebug) {if (Input.GetAxis ("Mouse ScrollWheel") > 0.01f) {if (distance > minDistance) {distance -= moveSpeed;} } else if(Input.GetAxis ("Mouse ScrollWheel") < -0.01f){if (distance < maxDistance) {distance += moveSpeed;}}if (Input.GetMouseButton (0)) {x += Input.GetAxis ("Mouse X") * xSpeed * 0.02f;y -= Input.GetAxis ("Mouse Y") * ySpeed * 0.02f;y = ClampAngle (y, yMinLimit, yMaxLimit);}} else {if (Input.touchCount == 1) {if (Input.GetTouch (0).phase == TouchPhase.Moved) {x += Input.GetAxis ("Mouse X") * xSpeed * 0.02f;y -= Input.GetAxis ("Mouse Y") * ySpeed * 0.02f;y = ClampAngle (y, yMinLimit, yMaxLimit);}}if (Input.touchCount > 1) {if (Input.GetTouch (0).phase == TouchPhase.Moved || Input.GetTouch (1).phase == TouchPhase.Moved) {Vector3 tempPosition1 = Input.GetTouch (0).position;Vector3 tempPosition2 = Input.GetTouch (1).position;if (IsEnlarge (oldPosition1, oldPosition2, tempPosition1, tempPosition2)) {if (distance > minDistance) {distance -= moveSpeed;} } else {if (distance < maxDistance) {distance += moveSpeed;}}oldPosition1 = tempPosition1;oldPosition2 = tempPosition2;}}}}void LateUpdate(){if (target){ClampAngle(y, yMinLimit, yMaxLimit);Quaternion rotation = Quaternion.Euler(y, x, 0);tempPositon.Set(0.0f, 0.0f, (-1) * distance);Vector3 position = rotation * tempPositon + target.transform.position - Vector3.down * 0.5f;transform.rotation = rotation;transform.position = position;}}//检测是否放大还是缩小private bool IsEnlarge(Vector2 oldPos1, Vector2 oldPos2, Vector2 newPos1, Vector2 newPos2){float leng1 = Vector2.Distance (oldPos1, oldPos2); float leng2 = Vector2.Distance (newPos1, newPos2);if (leng1 < leng2){return true;}else{return false;}}private float ClampAngle(float angle, float min, float max){if (angle < -360)angle += 360;if (angle > 360)angle -= 360;return Mathf.Clamp(angle, min, max);}
}

挂载在相机上即可。

基于Unity3D的相机功能的实现(二)——AR相机相关推荐

  1. 从零开始安卓端相机功能开发(二)让我们来开发一个相机

    目前已有章节大家可以去学习也可以参考一下 1.从零开始安卓端相机功能开发(一)了解用什么去开发以及流程 2.从零开始安卓端相机功能开发(二)让我们来开发一个相机 3.从零开始开发Android相机ap ...

  2. 基于Unity3D的绘画功能实现

    using UnityEngine; using System.Collections; /// <summary> /// 鼠标画图功能 /// </summary> pub ...

  3. 从零开始安卓端相机功能开发(一)了解用什么去开发以及流程

    目前已有章节大家可以去学习也可以参考一下 1.从零开始安卓端相机功能开发(一)了解用什么去开发以及流程 2.从零开始安卓端相机功能开发(二)让我们来开发一个相机 3.从零开始开发Android相机ap ...

  4. 【Android笔记67】Android之使用系统中的相机功能(拍照、保存照片、显示拍摄的照片、照片保存到图库等操作)

    这篇文章,主要介绍Android如何使用系统中的相机功能(拍照.保存照片.显示拍摄的照片.照片保存到图库等操作). 目录 一.使用Android相机功能 1.1.如何调用相机功能 1.2.调用相机功能

  5. 基于Unity3D的相机功能的实现(一)——VR相机

    Unity自带陀螺仪功能,今天就利用陀螺仪实现一个VR相机功能.步骤如下: 打开Unity,创建一个新的C#脚本GyroController.cs,并挂在MainCamera游戏对象上,代码如下: u ...

  6. Android 基于Zxing的扫码功能实现(二)

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 引言 本篇博文是基于 Android 二维码的扫码功能实现(一) 文章写的,建议阅读这篇文章之前,先看看上篇文章.还有建议阅读本文的 ...

  7. unity 陶瓷质感_一种基于Unity3D的虚拟陶瓷设计方法与流程

    本发明涉及虚拟现实领域,特别涉及一种基于Unity3D的虚拟陶瓷设计方法. 背景技术: 陶艺工艺制作环境要求严格:不仅在拉坯成型需要利用旋转机器,在烧制过程则需要窑炉锻造,如何将陶瓷制作工艺与虚拟现实 ...

  8. 机器视觉工业缺陷检测的那些事(二、相机)

    目录 机器视觉工业缺陷检测的那些事(二) 2.相机的选择 (1)工业数字相机的分类: (2)相机的主要参数 ①分辨率 ②速度(帧频/行频) ⑥像元深度 (3)工业数字摄像机主要接口类型 CCD和COM ...

  9. 【聆思CSK6 视觉AI开发套件试用】基于CSK6的头肩手势检测控制会议相机进行数字变焦

    本篇文章来自极术社区与聆思科技组织的CSK6 视觉AI开发套件活动,更多开发板试用活动请关注极术社区网站.作者:海锋 基于CSK6的头肩手势检测控制会议相机实现变倍功能 首先感谢极术社区与聆思科技的信 ...

最新文章

  1. C++中的 typedef Vec<uchar> Vec3b; 是何意?
  2. C语言基础:数组作为函数参数传递演示源码
  3. C和C++中的默认类型
  4. Linux网络协议栈(三)——网络设备(1)
  5. SpringBoot 简单实现仿CAS单点登录系统
  6. c语言中被调用函数只需在主调函数中声明,其他函数中不用声明,求助,函数在其他函数中使用时要先声明后调用,这个没声明就用了...
  7. android基础面试题(一)
  8. 国产服务器虚拟化产品,国内主流虚拟化厂商之间比较.doc
  9. 微信小程序大赛介绍文档
  10. 信息安全风险评估 要素关系
  11. 今天QQ被盗,异常情况调查与反思
  12. Invalid configuration of tez jars, tez.lib.uris is not defined in the configuration
  13. 计算机无法启动安装程序,安装Win10系统提示安装程序无法正常启动怎么办
  14. 滑动验证码自动化实现(1)
  15. 国产大数据系统通过验收,”核高基”基础软件再下一城
  16. 为大家介绍一下自制DIY面膜的好地方
  17. grunt教程--初涉grunt
  18. 介绍一种新的群智能算法---黏菌算法
  19. 深度强化学习 - 无人驾驶自行车
  20. 判断素数的三种方法详解

热门文章

  1. OkHttp3网络编程代码总结
  2. 9.24吉比特测试工程师
  3. 多媒体课程设计android,基于android的多媒体播放器课程设计报告-20210410041625.docx-原创力文档...
  4. win7ue4崩溃问题汇总
  5. 数学,金融,计算机优秀博客
  6. Openvino IGPU(GPU) 读取模型(加载时间过长)中的读取缓存加速方式
  7. python程序暂停和继续_如何“暂停”和“继续”下载工作?
  8. UE4 MotionBuilder快速动画重定向
  9. 计算机组成原理——输入输出(I/O)系统考研题
  10. NISP一级模拟题(五、六)