根据游戏类型的不一样,会需要各种各样的摄像机,下面将分享三种典型的摄像机类型:(1)地下城摄像机;(2)第三人称跟随摄像机;(3)鼠标控制旋转摄像机。将这些控制脚本拖动到场景的MainCamera上即可。

  为了辅助测试,使用了下面的角色移动/旋转控制脚本:

  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class Player : MonoBehaviour
  5. {
  6. public float movementSpeed = ;
  7. public float turningSpeed = ;
  8.  
  9. void Update()
  10. {
  11. float horizontal = Input.GetAxis("Horizontal") * turningSpeed * Time.deltaTime;
  12. transform.Rotate(, horizontal, );
  13.  
  14. float vertical = Input.GetAxis("Vertical") * movementSpeed * Time.deltaTime;
  15. transform.Translate(, , vertical);
  16. }
  17.  
  18. }

  看向固定目标的Camera的基本实现,主要使用transform.LookAt函数来实现:

  1. public class LookAtCamera : MonoBehaviour
  2. {
  3. public GameObject target = null;
  4.  
  5. void LateUpdate()
  6. {
  7. if (target == null)
  8. return;
  9.  
  10. transform.LookAt(target.transform);
  11. }
  12. }

  (1)地下城摄像机,就像暗黑3那样的,摄像机和角色保持固定距离和角度,摄像机不会绕着角色旋转:

  1. public class DungeonCamera : MonoBehaviour
  2. {
  3. public GameObject target = null;
  4. public Vector3 offset = Vector3.zero;
  5. public float damping = ;
  6.  
  7. void Start()
  8. {
  9. if (target == null)
  10. return;
  11. offset = transform.position - target.transform.position;
  12. }
  13.  
  14. void LateUpdate()
  15. {
  16. if (target == null)
  17. return;
  18.  
  19. Vector3 desiredPosition = target.transform.position + offset;
  20. // 平滑变换过程,即不要立即变换
  21. Vector3 position = Vector3.Lerp(transform.position, desiredPosition, Time.deltaTime * damping);
  22. transform.position = position;
  23.  
  24. // Camera始终看向目标
  25. transform.LookAt(target.transform.position);
  26. }
  27. }

  (2)第三人称跟随摄像机,比较典型的3D游戏摄像机,摄像机会绕着角色一起旋转:

  1. public class FollowCamera : MonoBehaviour
  2. {
  3. public GameObject target = null;
  4. public Vector3 offset = Vector3.zero;
  5. public float damping = ;
  6.  
  7. void Start()
  8. {
  9. if (target == null)
  10. return;
  11. offset = transform.position - target.transform.position;
  12. }
  13.  
  14. void LateUpdate()
  15. {
  16. float currentAngle = transform.eulerAngles.y;
  17. float desireAngle = target.transform.eulerAngles.y;
  18. // 平滑角度变换
  19. float angle = Mathf.LerpAngle(currentAngle, desireAngle, Time.deltaTime * damping);
  20. Quaternion rotation = Quaternion.Euler(, angle, );
  21.  
  22. transform.position = target.transform.position + (rotation * offset);
  23.  
  24. transform.LookAt(target.transform);
  25. }
  26. }

  (3)鼠标控制角色旋转摄像机,注意,鼠标控制旋转时不要做Lerp,因为鼠标控制需要精确,比如玩CS的时候,鼠标控制角色转动还要过程那还能玩吗 

  1. public class MouseAimCamera : MonoBehaviour
  2. {
  3. public GameObject target = null;
  4. public Vector3 offset = Vector3.zero;
  5. public float rotateSpeed = ;
  6.  
  7. void Start()
  8. {
  9. offset = target.transform.position - transform.position;
  10. }
  11.  
  12. void LateUpdate()
  13. {
  14. // 根据鼠标左键旋转目标物体
  15. float horizontal = Input.GetAxis("Mouse X") * rotateSpeed;
  16. target.transform.Rotate(, horizontal, );
  17.  
  18. float desiredAngle = target.transform.eulerAngles.y;
  19. Quaternion rotation = Quaternion.Euler(, desiredAngle, );
  20. transform.position = target.transform.position - (rotation * offset);
  21.  
  22. transform.LookAt(target.transform);
  23.  
  24. }
  25. }

参考:http://code.tutsplus.com/tutorials/unity3d-third-person-cameras--mobile-11230

各种Camera,总有一款适合你(一)的更多相关文章

  1. 各种Camera,总有一款适合你(二)

    在实际的项目开发中,一般需要程序抽象出一些在几何意义上有明确意义的参数,这样方便策划或美术在自己的机器上进行调试. 下面是一个可变参的地下城摄像机的简单实现: // 第三人称摄像机,平移和旋转会同时进 ...

  2. 10款流行的Markdown编辑器,总有一款适合你

    摘要:作为一个开源人,如果你不会使用Markdown语法,那你就OUT了!Markdown 是 2004 年由 John Gruberis 设计和开发的纯文本格式的语法,非常的简单实用. 作为一个开源 ...

  3. .NET5都来了,你还不知道怎么部署到linux?最全部署方案,总有一款适合你

    随着2020进入4季度,.NET5正式版也已经与大家见面了.不过,尽管 .NET Core发布已经有四五年的时间,但到目前为止,依旧有很多.NET开发者在坚守者.NET4,原因不尽相同,但最大的问题可 ...

  4. 这么多TiDB负载均衡方案总有一款适合你

    [是否原创]是 [首发渠道]TiDB 社区 前言 分布式关系型数据库TiDB是一种计算和存储分离的架构,每一层都可以独立地进行水平扩展,这样就可以做到有的放矢,对症下药. 从TiDB整体架构图可以看到 ...

  5. [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!

    引言 之前项目需要,查找了office文档在线预览的解决方案,顺便记录一下,方便以后查询. 方案一 直接在浏览器中打开Office文档在页面上的链接.会弹出如下窗口: 优点:主流浏览器都支持. 缺点: ...

  6. 四大VDI客户端 总有一款适合你

    [TechTarget中国原创] 交付虚拟桌面时IT管理员必须要考虑到用户如何访问虚拟桌面,因为这会影响用户体验以及VDI部署最终的成败. IT可以转向简便的HTML5客户端,HTML 5客户端功能丰 ...

  7. 把 Console 部署成 Windows 服务,四种方式总有一款适合你!

    一:背景 1. 讲故事 上周有一个项目交付,因为是医院级项目需要在客户的局域网独立部署. 程序: netcore 2.0,操作系统: windows server 2012,坑爹的事情就来了, net ...

  8. [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!

    引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...

  9. 40个容易上瘾的HTML5网页游戏,总有一款适合你

    我记得姐姐家的孩子在刚刚才学会走路,说话还不能完整的时候就已经能自己用小手点出小游戏的网站来一个人自娱自乐.我一直在想这一代跟着计算机一起茁壮成长的孩子会不会也和美国那一代人一样,出现9岁的黑客和计算 ...

随机推荐

  1. css伪元素选择器

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. javaweb学习总结(四)——Http协议

    一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...

  3. Leetcode 200 Number of Islands DFS

    统计联通区域块的个数,简单dfs,请可以参考DFS框架:Leetcode 130 Surrounded Regions DFS class Solution { public: int m, n; b ...

  4. EndPoint详解

    EndPoint详解 EndPoint主要用于暴露一些SpringMvc内部运行的信息,通常是通过SpringMvc的请求地址获取相关信息.如/health获取健康检查信息. 简单单元测试 @Test ...

  5. Xcode 重新下载项目配置文件

    配置文件保存在: ~/Library/MobileDevice/Provisioning Profiles 可以按修改日期排序移走没用的配置文件或者干脆将目录重命名,备份好旧的配置文件后,到Xcode ...

  6. 爬虫神器xpath的用法(一)

    1.如果你没有安装lxml,请运行pip install lxml或者easy_install lxml安装,如果在安装过程中失败的话, 是因为lxml需要依赖某些库文件,具体可以问下度娘,这里不再赘 ...

  7. How do I check if a type is a subtype OR the type of an object?

    To check if a type is a subclass of another type in C#, it's easy: typeof (SubClass).IsSubclassOf(ty ...

  8. jQuery之Deferred对象详解

    deferred对象是jQuery对Promises接口的实现.它是非同步操作的通用接口,可以被看作是一个等待完成的任务,开发者通过一些通过的接口对其进行设置.事实上,它扮演代理人(proxy)的角色 ...

  9. 机器学习基石--学习笔记01--linear hard SVM

    背景 支持向量机(SVM)背后的数学知识比较复杂,之前尝试过在网上搜索一些资料自学,但是效果不佳.所以,在我的数据挖掘工具箱中,一直不会使用SVM这个利器.最近,台大林轩田老师在Coursera上的机 ...

  10. [2013 eoe移动开发者大会]靳岩:从码农到极客的升级之路

    (国内知名Android开发论坛 eoe开发者社区推荐:http://www.eoeandroid.com/) 前天,2013 eoe 移动开发者大会在国家会议中心召开,eoe 开发者社区创始人靳岩在 ...