本文原创,转载请注明出处:http://www.cnblogs.com/AdvancePikachu/p/6555188.html

最近在做一款VR项目,有一个查看功能,分为自由查看和跟随查看。

自由查看:

第一人称自由控制查看。使用firstPersonControl即可。

跟随查看:

摄像机可自由旋转并跟随查看的物体移动(摄像机不可为子物体)。

刚开始使用固定坐标的方法,但摄像机无法自由旋转。后来换用rotatearound,可以自由旋转,可一旦物体移动,旋转半径会拉大。

最后,模仿手势插件写了一个方法,代码如下:

 1 public Transform target;
 2
 3
 4     public float minDistance = 1.5f;
 5     public float maxDistance = 10.0f;
 6
 7     public float yawSensitivity =30f;
 8     public float pinchSensitivity = 5.0f;
 9
10     public float smoothZoomSpeed = 30.0f;
11     public float smoothOrbitSpeed = 10.0f;
12
13     float distance = 5.0f;
14     float yaw = 0;
15     float pitch = 0;
16
17     float idealDistance = 0;
18
19     bool rotate;
20
21     public float IdealDistance
22     {
23         get { return idealDistance; }
24         set { idealDistance = Mathf.Clamp( value, minDistance, maxDistance ); }
25     }
26
27     public float Yaw
28     {
29         get { return yaw; }
30     }
31
32     void Start()
33     {
34         Vector3 angles = transform.eulerAngles;
35
36         distance = IdealDistance = 5f;
37         yaw =  angles.y;
38         pitch = 25;
39
40         UpdateCamera();
41     }
42
43
44     void Update()
45     {
46         if (Input.GetMouseButtonDown (1))
47             rotate = true;
48         if (Input.GetMouseButtonUp (1))
49             rotate = false;
50
51         if( rotate )
52         {
53             yaw += Input.GetAxis ("Mouse X") * yawSensitivity;
54             pitch -=  Input.GetAxis ("Mouse Y") *pinchSensitivity;
55         }
56
57         IdealDistance -= Mathf.Lerp (0, Input.GetAxis ("Mouse ScrollWheel") * smoothZoomSpeed, Time.deltaTime);
58         IdealDistance = Mathf.Clamp (IdealDistance, minDistance, maxDistance);
59     }
60
61     void LateUpdate()
62     {
63         UpdateCamera ();
64     }
65
66     void UpdateCamera()
67     {
68         distance = Mathf.Lerp (distance, IdealDistance, Time.deltaTime * smoothZoomSpeed);
69
70         Vector3 lookAtPos = target.position;
71         Quaternion rotaetAngle = Quaternion.Euler (pitch, yaw, 0);
72
73         Vector3 desiredPos = lookAtPos - rotaetAngle * new Vector3 (0, 0, distance);
74
75         transform.position = desiredPos;
76         transform.rotation = rotaetAngle;
77
78         transform.LookAt (target);
79     }
80
81     static float ClampAngle( float angle, float min, float max )
82     {
83         if( angle < -360 )
84             angle += 360;
85
86         if( angle > 360 )
87             angle -= 360;
88
89         return Mathf.Clamp( angle, min, max );
90     }

以上,完美实现摄像机跟随,并可以右键旋转,滚轮拉近功能。

转载于:https://www.cnblogs.com/AdvancePikachu/p/6555188.html

Unity 类似FingerGestures 的相机跟随功能相关推荐

  1. unity 启动相机_Unity3D实现相机跟随控制

    本文实例为大家分享了Unity3D实现相机跟随控制的具体代码,供大家参考,具体内容如下 跟随算法 要实现3D摄像机的控制第一步就是先实现摄像机跟随物体移动. 要想让相机跟随物体移动,就要明白在一定角度 ...

  2. Unity 实现简单的相机跟随和鼠标滚轮拉近拉远视野

    1.脚本挂载在Main Camera 上 ,相机跟随的实现主要是让相机的位置和玩家的位置的差值始终保持不变. 2.实现鼠标滚轮拉近拉远视野,要先测试一下自己鼠标滚轮前滑后滑的正负值,每个鼠标不一定相同 ...

  3. Unity中相机跟随人物移动

    方法1:将相机拖到人物的游戏对象上,也就是让相机成为角色的子物体,这样相机就会跟随角色移动 但是这样会存在问题,1.相机会随着人物的翻转而翻转,2.相机跟随人物没有缓冲效果,移动比较僵硬 方法2:代码 ...

  4. Unity相机跟随以及子弹发射笔记

    相机移动 现在还有一个问题是:主角SpaceMarine移动的时候,会走出玩家的视线,所以这里让相机跟随着SpaceMarine移动. 步骤1. 创建和设置CameraMount 在层级(Hierar ...

  5. Unity通过刚体组件和C#脚本,施加力实现物体下落并滚离平面 及相机跟随物体

    1. 新建场景,新建小球和平面,之间要有一段距离用于下落 2. 通过脚本实现对象的下落 (1)添加刚体组件rigidbody 质量默认为1,可以修改 (2)创建并编写脚本实现小球下落 using Sy ...

  6. Unity 相机跟随人物的几种方式

    相机跟随一般写在生命周期LateUpdate中 1.最简单,无代码,固定距离,固定视角 最简单的就是 直接 把主相机作为Player角色的子物体,并自行固定好相机的位置和角度 优点:使用方便 缺点:使 ...

  7. 【Unity】实现相机跟随及视角转动

    [unity]实现相机跟随,人物移动请参照[Unity] 实现角色移动.视角旋转以及跳跃 第一种实现方法(比较简单) 1.创建一个Camera,将Camera置于物体Player下 随意拖动Camer ...

  8. Unity相机跟随第一视角移动

    1.打开unity,新建一个场景,简单做一个胶囊体代表人物 2.给第一人称胶囊体添加如下代码,使其通过上下左右键移动 using System.Collections; using System.Co ...

  9. 【Unity】虚拟相机跟随Player移动并输出jpg图片

    文章目录 添加相机输出图片 相机跟随移动 添加相机输出图片 添加相机,创建GetImage脚本: 思路是创建相机对象,建立事件,按下空格键即将所看到的画面渲染到目标纹理,然后选择保存路径,代码如下: ...

最新文章

  1. Java IO 体系结构
  2. 在 IDEA 中使用 Debug,真是太厉害了!
  3. 自动驾驶激光雷达物体检测技术
  4. [leetcode-JavaScript]---23、合并K个排序链表
  5. (八)java版spring cloud+spring boot 社交电子商务平台-消息总线(Spring Cloud Bus)
  6. 写jsx_一种让小程序支持JSX语法的新思路
  7. Pinpoint【环境搭建 01】JDK\HBase\Pinpoint Collector+Web 最新版 2.3.3 安装配置运行验证及脚本文件分享(避坑指南捷径指北)
  8. Minimum Integer
  9. XSD /xml 跟元素声明
  10. 如何在word文档中添加附件
  11. SAP Cloud Platform integration上创建一个最简单的iFlow
  12. 【原】Jenkins持续集成环境搭建之创建java项目的job【centos6.5 java maven git 项目】...
  13. JAVA实现telnet代理,对输入命令拦截
  14. 程序员跳槽的7个常见理由,最后一个有人能看懂吗!
  15. 代码是写给人看的还是写给机器看的?
  16. python属性_Python属性()
  17. 直播评论发弹幕切图功能点集合
  18. 符合规则的c语言常量,c语言常量定义规则知识点总结
  19. Mybatis事务管理SqlSession
  20. 小攻是鸿蒙小受是鲲鹏,洪荒之鸿蒙大天尊

热门文章

  1. python编程工资-看到抖音上Python工程师晒得工资条,我沉默了......
  2. python代码画图案-python如何绘制iPhone手机图案?(代码示例)
  3. 简明python教程购买-自学Python买什么书?
  4. python常用命令汇总-酷帅吊炸天的 Pandas 常用操作命令汇总
  5. python中一共有多少个关键字-Python之33个关键字是哪些
  6. python难嘛-我没有基础,能否学会Python?Python难吗?
  7. python在日常工作处理中的应用-记 Python 在实际工作中的第一次应用
  8. python使用教程pandas-python之pandas简单介绍及使用(一)
  9. python 制作gif-如何在线制作gif图片?
  10. python web为什么不火-Python语言为什么这么火?老男孩Python入门培训