各种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岁的黑客和计算 ...
随机推荐
- css3多列显示
columen-width:定义单列显示的宽度.初始值是auto,适用于不可替代的块级元素,行内块元素和单元格,表格元素除外. 目前Webkit引擎支持-webkit-column-width,Moz ...
- SSL在https和MySQL中的原理思考
之前对HTTPS通信过程有过了解,HTTPS是应用HTTP协议使用SSL加密的版本,在TCP和HTTP之间增加SSL协议.通过握手阶段认证双方身份,协商对称秘钥对通信信息进行加密.此处只描述常用的服务 ...
- 将数据导出到Excel2007格式。
增加数据格式 public static void TableToExcel2(DataTable table, string filename, string sheetname) { XSSFWo ...
- Python学习笔记(1):列表元组结构
Python的列表元组功能强大,令人印象深刻.一是非常灵活,二是便于集体操作.特别是以元组作为列表项的结构,和数据访问的结果能够对应起来,和习惯的二维表理解上也一致,有很多的用途. 以学习笔记(3)中 ...
- Diameter消息应用层路由
1. 创建和发送Request消息: 1) 产生一个Request消息时,必须遵守下列规则: · 设置头部的Command code: · 设置头部的 'R' 位: · 设置头部的End-to-End ...
- Swift入门篇-结构体
前面主要是介绍swift语言中基本类型的用法,今天给大家介绍的是swift的结构体的用法,swift中结构体的用法和其他语言的用法,还有不太一样,不过您多敲几遍,就可以理解结构体,结构体在ios开发中 ...
- Ubuntu下vsftpd配置实例,超级简单,高度可用
看了网上很多关于vsftpd的安装配置教程,发现很多都是不可以用的,经过多次尝试,总结了一个最简单的设置方法. 第一步:安装vsftpd sudo apt-get install vsftpd 第二步 ...
- PCM音频设备的操作(转)
对音频设备的操作主要是初始化音频设备以及往音频设备发送 PCM(Pulse Code Modulation)数据.为了方便,本文使用 ALSA(Advanced Linux Sound Archite ...
- Halcon学习标定助手
本文采用halcon标定助手进行标定. 第一步:打开标定助手. 第二步:对描述文件进行修改 具体:打开算子窗口,输入gen_caltab,进行描述文件修改. 参数XNum和YNum为7行*7列的圆,M ...
- goldengate一些参数整理
转自:http://blog.csdn.net/lemontree1123/article/details/46603549 manager参数: AUTOSTART:指定在mgr启动时自动启动那些进 ...