各种Camera,总有一款适合你(一)
根据游戏类型的不一样,会需要各种各样的摄像机,下面将分享三种典型的摄像机类型:(1)地下城摄像机;(2)第三人称跟随摄像机;(3)鼠标控制旋转摄像机。将这些控制脚本拖动到场景的MainCamera上即可。
为了辅助测试,使用了下面的角色移动/旋转控制脚本:
using UnityEngine;
using System.Collections; public class Player : MonoBehaviour
{
public float movementSpeed = ;
public float turningSpeed = ; void Update()
{
float horizontal = Input.GetAxis("Horizontal") * turningSpeed * Time.deltaTime;
transform.Rotate(, horizontal, ); float vertical = Input.GetAxis("Vertical") * movementSpeed * Time.deltaTime;
transform.Translate(, , vertical);
} }
看向固定目标的Camera的基本实现,主要使用transform.LookAt函数来实现:
public class LookAtCamera : MonoBehaviour
{
public GameObject target = null; void LateUpdate()
{
if (target == null)
return; transform.LookAt(target.transform);
}
}
(1)地下城摄像机,就像暗黑3那样的,摄像机和角色保持固定距离和角度,摄像机不会绕着角色旋转:
public class DungeonCamera : MonoBehaviour
{
public GameObject target = null;
public Vector3 offset = Vector3.zero;
public float damping = ; void Start()
{
if (target == null)
return;
offset = transform.position - target.transform.position;
} void LateUpdate()
{
if (target == null)
return; Vector3 desiredPosition = target.transform.position + offset;
// 平滑变换过程,即不要立即变换
Vector3 position = Vector3.Lerp(transform.position, desiredPosition, Time.deltaTime * damping);
transform.position = position; // Camera始终看向目标
transform.LookAt(target.transform.position);
}
}
(2)第三人称跟随摄像机,比较典型的3D游戏摄像机,摄像机会绕着角色一起旋转:
public class FollowCamera : MonoBehaviour
{
public GameObject target = null;
public Vector3 offset = Vector3.zero;
public float damping = ; void Start()
{
if (target == null)
return;
offset = transform.position - target.transform.position;
} void LateUpdate()
{
float currentAngle = transform.eulerAngles.y;
float desireAngle = target.transform.eulerAngles.y;
// 平滑角度变换
float angle = Mathf.LerpAngle(currentAngle, desireAngle, Time.deltaTime * damping);
Quaternion rotation = Quaternion.Euler(, angle, ); transform.position = target.transform.position + (rotation * offset); transform.LookAt(target.transform);
}
}
(3)鼠标控制角色旋转摄像机,注意,鼠标控制旋转时不要做Lerp,因为鼠标控制需要精确,比如玩CS的时候,鼠标控制角色转动还要过程那还能玩吗
public class MouseAimCamera : MonoBehaviour
{
public GameObject target = null;
public Vector3 offset = Vector3.zero;
public float rotateSpeed = ; void Start()
{
offset = target.transform.position - transform.position;
} void LateUpdate()
{
// 根据鼠标左键旋转目标物体
float horizontal = Input.GetAxis("Mouse X") * rotateSpeed;
target.transform.Rotate(, horizontal, ); float desiredAngle = target.transform.eulerAngles.y;
Quaternion rotation = Quaternion.Euler(, desiredAngle, );
transform.position = target.transform.position - (rotation * offset); transform.LookAt(target.transform); }
}
参考:http://code.tutsplus.com/tutorials/unity3d-third-person-cameras--mobile-11230
各种Camera,总有一款适合你(一)的更多相关文章
- 各种Camera,总有一款适合你(二)
在实际的项目开发中,一般需要程序抽象出一些在几何意义上有明确意义的参数,这样方便策划或美术在自己的机器上进行调试. 下面是一个可变参的地下城摄像机的简单实现: // 第三人称摄像机,平移和旋转会同时进 ...
- 10款流行的Markdown编辑器,总有一款适合你
摘要:作为一个开源人,如果你不会使用Markdown语法,那你就OUT了!Markdown 是 2004 年由 John Gruberis 设计和开发的纯文本格式的语法,非常的简单实用. 作为一个开源 ...
- .NET5都来了,你还不知道怎么部署到linux?最全部署方案,总有一款适合你
随着2020进入4季度,.NET5正式版也已经与大家见面了.不过,尽管 .NET Core发布已经有四五年的时间,但到目前为止,依旧有很多.NET开发者在坚守者.NET4,原因不尽相同,但最大的问题可 ...
- 这么多TiDB负载均衡方案总有一款适合你
[是否原创]是 [首发渠道]TiDB 社区 前言 分布式关系型数据库TiDB是一种计算和存储分离的架构,每一层都可以独立地进行水平扩展,这样就可以做到有的放矢,对症下药. 从TiDB整体架构图可以看到 ...
- [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!
引言 之前项目需要,查找了office文档在线预览的解决方案,顺便记录一下,方便以后查询. 方案一 直接在浏览器中打开Office文档在页面上的链接.会弹出如下窗口: 优点:主流浏览器都支持. 缺点: ...
- 四大VDI客户端 总有一款适合你
[TechTarget中国原创] 交付虚拟桌面时IT管理员必须要考虑到用户如何访问虚拟桌面,因为这会影响用户体验以及VDI部署最终的成败. IT可以转向简便的HTML5客户端,HTML 5客户端功能丰 ...
- 把 Console 部署成 Windows 服务,四种方式总有一款适合你!
一:背景 1. 讲故事 上周有一个项目交付,因为是医院级项目需要在客户的局域网独立部署. 程序: netcore 2.0,操作系统: windows server 2012,坑爹的事情就来了, net ...
- [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!
引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...
- 40个容易上瘾的HTML5网页游戏,总有一款适合你
我记得姐姐家的孩子在刚刚才学会走路,说话还不能完整的时候就已经能自己用小手点出小游戏的网站来一个人自娱自乐.我一直在想这一代跟着计算机一起茁壮成长的孩子会不会也和美国那一代人一样,出现9岁的黑客和计算 ...
随机推荐
- 在jsp中重复定义了两个相同id的标签导致的错误
jQuery做前台开发的程序有一个页面在IE11和谷歌浏览器下都没有问题,但是在XP的IE8下运行就报错: 后来发现是定义了两个相同id的标签所致. 在icCard.jsp中定义的标签: 在carIn ...
- SQL Server 内存中OLTP内部机制概述(四)
----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...
- 騰訊RTX的API開發,給RTX開個天窗
好多人可能沒聽說RTX這個軟件,在此我簡單說明一下,這個軟件是騰訊為企業開發的一個內部聊天軟件,服務端不是在騰訊那邊,而是需要企業自己安裝到自己公司內部的服務器上,以供企業內部員工交流使用,功能和QQ ...
- 使用LS2J技术在LotusScript中使用Java
我们可以使用LS2J技术在LotusScript中来调用Java类,下面举例说明: 1. 首先需要在代理的 (Options)部分,添加如下: Uselsx "*javacon& ...
- Oracle User Calls 和 Executions 两个概念的区别
User calls = (User session Login + Parsing within a session + Executions of sql's/Cursors ) per seco ...
- Uploadify v3.2.1 上传图片并预览
前端JSP: <script type="text/javascript"> $(function() { $("#upload_org_code" ...
- Android开发:第四日番外——Assets文件夹和RAW文件夹区别
话说上回说到SQLite数据库,其中涉及到把已经设计好的数据库打包到APK中,提到可以放置在Assert文件夹或者RAW文件夹中,那么两者到底有什么区别呢?让我们来探究一下. 一.res/raw和as ...
- Android开发(三十一)——重复引用包错误Conversion to Dalvik format failed
错误:Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Landroid/sup ...
- 【转帖】ECLIPSE-JEE-LUNA-SR2官方汉化教程
ECLIPSE-JEE-LUNA-SR2官方汉化教程 工具/原料 Eclipse-jee-luna-SR2 步骤/方法 1.在浏览器输入网址http://www.eclipse.org/babel/d ...
- Becoming a Data Scientist – Curriculum via Metromap
From: http://nirvacana.com/thoughts/becoming-a-data-scientist/ Data Science, Machine Learning, Big D ...