摘要:【长文预警,先收藏后品尝】Cinemachine中的虚拟相机如何跟随目标物体呢?这就需要搞明白Body属性的设置咯。

你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。

自从咱们一起5分钟入门Cinemachine之后,上周我和你一起学习了Cinemachine中的VirtualCamera的基本用法,今天咱们来学习一下它的Body属性。
**【长文预警,先收藏后品尝】**Cinemachine中的虚拟相机如何跟随目标物体呢?这就需要搞明白Body属性的设置咯。

Body属性

CinemachineVitualCamera组件中的Body属性用于设置相机移动时使用什么算法。需要先设置好上面的Follow属性。

Cinemachine包含以下移动相机的算法:

  • Do Nothing:不移动虚拟相机
  • Framing Transposer:跟随目标移动,并在屏幕空间保持相机和跟随目标的相对位置。
  • Hard Lock to Target:虚拟相机和跟随目标使用相同位置。
  • Orbital Transposer:相机和跟随目标的相对位置是可变的,还能接收用户的输入。常见于玩家控制的相机。
  • Tracked Dolly:相机沿着预先设置的轨道移动。
  • Transposer:跟随目标移动,并在世界空间保持相机和跟随目标的相对位置固定。

Do Nothing算法

选中这个算法时,虚拟相机激活时,会控制Unity相机会固定在当前虚拟相机的位置,不会移动。用于固定位置的镜头,也可以通过自定义脚本来控制相机的位置。通常和Look At配合使用,模拟固定位置的跟随镜头。

Framing Transposer算法

选中这个算法时,Cinemachine会在屏幕空间将相机和跟随物体保持固定的相对位置关系。只会改变相机的位置,不会改变相机的旋转。还可以设置偏移、阻尼、构图规则等等。

Framing Transposer算法是为2D和正交相机设计的,主要用于2D情况。但是对于透视相机和3D环境也可以使用。

这个算法工作流程大概是:首先沿着相机的Z轴移动相机直到Camera Distance距离的XY平面上,然后在XY面上平移,直到目标物体在屏幕空间到达期望的位置。
特别注意:使用Framing Transposer时,Look At属性必须为空。

如果Follow属性是一个Target Group(后面会讲到),会有额外的设置。

属性详解

Lookahead Time:根据目标的运动,调整虚拟相机与“跟随”目标的偏移量。Cinemachine预测目标在未来数秒之内到达的位置并提前设置Unity相机的位置。这个功能对微动的动画敏感,并且会放大噪点,导致非预期的相机抖动。如果不能接受目标运动时的相机抖动,减小这个属性可能会使相机动画更流畅。
Lookahead Smoothing:预测算法的平滑度。较大的值可以消除抖动但会使预测滞后。
Lookahead Ignore Y:如果选中,在预测计算时会忽略沿Y轴的移动。

X Damping:相机在X轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。每个轴使用不同的设置可以制造出各种类型相机的行为。
Y Damping:相机在Y轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。
Z Damping:相机在Z轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。

Screen X:目标的水平屏幕位置。相机移动的结果是使目标处于此位置。
Screen Y:目标的垂直屏幕位置,相机移动的结果是使目标处于此位置。
Camera Distance:沿摄像机Z轴与跟随目标保持的距离。
Dead Zone Width:当目标在此位置范围内时,不会水平移动相机。
Dead Zone Height:当目标在此位置范围内时,不会垂直移动相机。
Dead Zone Depth:当跟随目标距离相机在此范围内时,不会沿其z轴移动相机。

Unlimited Soft Zone:如果选中,Soft Zone没有边界
Soft Zone Width:当目标处于此范围内时,会水平移动相机,将目标移回到Dead Zone中。Damping属性会影响摄像机的运动速度。
Soft Zone Height:当目标处于此范围内时,会垂直移动相机,将目标移回到Dead Zone中。Damping属性会影响摄像机的运动速度。
Bias X:Soft Zone的中心与目标位置的水平偏移。
Bias Y:Soft Zone的中心与目标位置的竖直偏移。

Center On Active:选中时,虚拟相机激活时会将镜头中心对准物体。不选中时,虚拟相机会将目标物体放置在最近的dead zone边缘。

下面的属性仅当Follow属性设置为Target Group时显示。

Group Framing Mode:指定构图时要考虑的屏幕尺寸。

  • Horizontal 仅考虑水平尺寸。忽略垂直尺寸。
  • Vertical 仅考虑垂直尺寸。忽略水平尺寸。
  • Horizontal And Vertical 使用水平和垂直尺寸中较大的那个来获得最佳匹配。
  • None 不进行任何构图调整。

Adjustment Mode 如何调整相机以获得所需的取景。可以是缩放、拉近拉远或同时进行。

  • Zoom Only 不移动相机,仅调整FOV。
  • Dolly Only 移动相机,不修改FOV。
  • Dolly Then Zoom 将相机移动到范围允许的最大范围,然后根据需要调整FOV。

Group Framing Size:目标应占据的屏幕大小比例。使用1填充整个屏幕,使用0.5填充一半的屏幕,依此类推。

Max Dolly In:朝目标拉近相机的最大距离。
Max Dolly Out:远离目标拉远相机的最大距离。
Minimum Distance: 限制相机可以接近目标的最小距离。
Maximum Distance:限制相机可以远离目标的最大距离。
Minimum FOV:自动调节FOV时的最小值。
Maximum FOV:自动调节FOV时的最大值。
Minimum Ortho Size:自动调节正交尺寸时的最小值。
Maximum Ortho Size:自动调节正交尺寸时的最大值。

Cinemachine Target Group组件

Cinemachine Target Group组件可以让多个GameObjects作为一个组,设置为Look At的对象。在虚拟相机中使用Group Composer算法,可以设置Follow属性为这个TargetGroup。

如何创建一个Target Group呢?

1、菜单栏选择Cinemachine > Create Target Group Camera。Unity会在场景中添加一个虚拟相机和Target Group。Follow和Look At属性会自动设置为这个Group。
2、Hierarchy中选中这个Group
3、Inspector上可以点击加号+添加新的物体到这个组
4、点击加号后,设置GameObject、权重和半径。
5、可以重复多次3-4步来添加更多物体。

属性详解
Position Mode 如何计算Group的位置

  • Group Center 根据所有物体的包围盒计算一个包含它们的大包围盒,Group Center就是这个大包围盒的中心
  • Group Average 根据所有物体的位置加权重计算平均值

Rotation Mode 如何计算Target Group的旋转

  • Manual 使用TargetGroup根物体的旋转。推荐设置
  • Group Average 根据所有物体的旋转加权重计算

Update Method 更新Target Group的Transform的时机

Targets 组内包含的物体列表

  • Weight 每个对象的权重
  • Radius 每个物体的半径,用于计算包围盒。不可为负数。

Hard Lock To Target算法

Unity相机保持和目标位置一致,即位置同步。

Damping:相机追赶上目标位置的时间。如果为0,那就是保持同步,如果大于0,相当于经过多少秒相机和目标位置重合。

Orbital Transposer算法

这个算法支持相机和目标之间的可变相对位置关系。可以接受玩家的输入,动态的控制相机的位置。

Orbital Transposer引入了一个新的概念叫heading,代表了目标移动的方向或面朝的方向。Orbital Transposer会尝试移动相机,让镜头朝向heading的方向。默认情况下,相机的位置会在target的正后面。也可以通过Heading Bias属性设置。

如果给Orbital Transposer添加了输入控制器,玩家就可以控制相机围绕目标旋转。可以设置为Input Manager中的轴,也可以直接用脚本控制。

Recenter To Target Heading属性选中时,在没有输入时Orbital Transposer可以自动重新居中相机。

属性详解
Binding Mode绑定模式:从目标推断位置时使用的坐标空间。

  • Lock To Target On Assign:本地空间,相机被激活或target赋值时的相对位置。
  • Lock To Target With World Up:本地空间,保持相机y轴朝上,yaw和roll为0。
  • Lock To Target No Roll:本地空间,锁定到目标物体,roll为0。
  • Lock To Target:本地空间,锁定到目标物体
  • World Space:世界空间
  • Simple Follow With World Up:相对于目标的位置,使用相机的本地坐标系,保持相机y轴朝上

Follow Offset:跟随目标时的位置偏移
X Damping:相机在X轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。每个轴使用不同的设置可以制造出各种类型相机的行为。 绑定模式为Simple Follow With World Up时不可用。
Y Damping:相机在Y轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。
Z Damping:相机在Z轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。

【下面3个属性参考上面的飞机图】
Yaw Damping:相机在y轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。每个轴使用不同的设置可以制造出各种类型相机的行为。Binding Mode为Lock to Target With World Up、Lock to Target No Roll、Lock to Target时可用。
Pitch Damping:相机在x轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。 Binding Mode为Lock to Target No Roll、Lock to Target时可用。
Roll Damping:相机在z轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。 Binding Mode为Lock to Target时可用。

Heading:计算Follow朝向的方法
Definition:计算方法

  • Position Delta:基于当前帧和上一帧的目标位置之间的变化
  • Velocity:使用目标的刚体速度,如果目标没有Rigidbody组件,会使用Position Delta
  • Target Forward:使用目标的transform.forward作为heading的方向
  • World Forward:使用世界坐标系中的Vector3.forward作为heading方向

Bias:相机围绕旋转的偏移,单位是度数。

Recenter To Target Heading:接收不到用户输入时,自动居中。
Enable:是否启用
Wait Time:等待延迟时间,用户无输入后多长时间重新自动居中。
Recentering Time:重新自动居中的过程花费的时间

X Axis:通过玩家输入控制Heading方向。
Value:当前值
Value Range:输入范围
Speed:最大速度(Max Speed)或者最大增加速度(Input Value Gain)
Accel Time:加速到最高速度所需要的时间
Decel Time:减速到0所需的时间
Input Axis Name:接收输入的Input Manager中的轴名称,空字符串代表不接收输入。
Input Axis Value:玩家输入的值。可以直接通过自定义脚本控制。
Invert:是否反转输入的值(取相反数)

Tracked Dolly

这个算法可以让相机沿预定路径移动。使用Path Position属性来指定将虚拟相机放置在路径上的位置。

使用Auto-Dolly模式将虚拟相机移动到路径上最接近Follow目标的位置。启用后,Auto-Dolly会自动将虚拟相机的位置移动到最接近目标的路径上的位置。

提示:使用Auto-Dolly模式时,一定要谨慎选择路径形状。在围绕某个点形成弧形的路径上可能会有问题。举一个极端的例子,考虑一条以Follow目标为中心的完美圆形路径。路径上最接近目标的点变得不稳定,因为圆形路径上的所有点都同样接近目标。在这种情况下,将Follow目标移动很小的距离会导致相机在轨道上移动很大的距离。

属性详解
Path 相机移动的路径。此属性必须引用CinemachinePath或Cinemachine Smooth Path对象。
Path Position 沿路径放置相机的位置。直接给这个属性作动画或启用Auto-Dolly。这个值以Position Units指定的单位为单位。
Position Units 路径位置的度量单位。

  • Path Units 沿路径使用路径点。0表示路径上的第一个路径点,1表示第二个路径点,依此类推。
  • Distance 沿路径使用距离。根据路径的Resolution属性对路径进行采样。Cinemachine创建一个距离查找表,并将其存储在内部缓存中。
  • Normalized 使用路径的开头和结尾。值0表示路径的起点,值1表示路径的终点。
    Path Offset 相机相对于路径的位置。X垂直于路径,Y向上,而Z平行于路径。使用此属性可使相机偏离路径本身。

X Damping 设置相机如何在垂直于路径的方向上保持其位置。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。每个轴使用不同的设置可以产生多种相机表现。
Y Damping 设置相机如何在路径局部坐标向上方向上保持其位置。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。
Z Damping 设置相机如何在平行于路径的方向上保持其位置。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。

Camera Up 如何为虚拟相机设置向上的方向。这会影响屏幕的组成,因为相机的Aim算法会尝试遵循向上方向。

  • Default 不修改虚拟相机的向上方向,而是使用Cinemachine Brain中的World Up Override属性。
  • Path 在当前点使用路径的向上方向。
  • Path No Roll 在当前点使用路径的向上方向,但Roll设置为零。
  • Follow Target 使用Follow目标的向上向量。
  • Follow Target No Roll 使用Follow目标的变换中的向上向量,但Roll为零。

Pitch Damping 相机如何跟踪目标旋转的x角。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。
Yaw Damping 相机如何跟踪目标旋转的y角。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。
Roll Damping 相机如何跟踪目标旋转的z角。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。

Auto Dolly 控制自动轨道位置选择方式。要使用此功能,必须设置Follow目标。

  • Enabled 选中以启用。注意:这可能会影响性能,具体取决于search resolution。
  • Position Offset 以position units为单位从路径上的最近点到跟随目标的偏移量。
  • Search Radius 当前段两侧的段数。如果只有一个路径使用0。当路径相对于目标位置的形状导致路径上最近的点变得不稳定时,请使用较小的数字。
  • Search Resolution Cinemachine通过将片段分成许多直片段来搜索片段。数字越高,结果越准确。但是,对于更大的数字,性能成比例地变慢。

Transposer

这个算法将使用固定的相对位置将虚拟相机跟随目标,也可以使用Damping属性。

属性详解
Binding Mode绑定模式:从目标推断位置时使用的坐标空间。

  • Lock To Target On Assign:本地空间,相机被激活或target赋值时的相对位置。
  • Lock To Target With World Up:本地空间,保持相机y轴朝上,yaw和roll为0。
  • Lock To Target No Roll:本地空间,锁定到目标物体,roll为0。
  • Lock To Target:本地空间,锁定到目标物体
  • World Space:世界空间
  • Simple Follow With World Up:相对于目标的位置,使用相机的本地坐标系

Follow Offset:跟随目标时的位置偏移
X Damping:相机在X轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。每个轴使用不同的设置可以制造出各种类型相机的行为。 绑定模式为Simple Follow With World Up时不可用。
Y Damping:相机在Y轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。
Z Damping:相机在Z轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。

【下面3个属性参考上面的飞机图】
Yaw Damping:相机在y轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。每个轴使用不同的设置可以制造出各种类型相机的行为。Binding Mode为Lock to Target With World Up、Lock to Target No Roll、Lock to Target时可用。
Pitch Damping:相机在x轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。 Binding Mode为Lock to Target No Roll、Lock to Target时可用。
Roll Damping:相机在z轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。 Binding Mode为Lock to Target时可用。


扩展阅读

【Cinemachine】VirtualCamera虚拟相机详解(一)
5分钟入门Cinemachine智能相机系统
Unity编辑器录屏神器:Unity Recorder
5分钟制作过场动画
 【建议收藏】找不到免费的角色动画?来试试mixamo

【扩展学习】在洪流学堂公众号回复timeline可以下载Timeline&Cinemachine系列教程全文带目录PDF


呼~ 今天小新絮絮叨叨的真是够够的了。没讲清楚的地方欢迎评论,咱们一起探索。

我是大智,你的技术探路者,下次见!

别走!点赞收藏哦!

好,你可以走了。

【Cinemachine智能相机教程】VirtualCamera(二):Body属性相关推荐

  1. 【Cinemachine智能相机教程】VirtualCamera(四):Noise属性

    摘要:[长文预警,先收藏后品尝]如何让Unity中的相机模拟现实世界手持拍摄的晃动效果呢?Cinemachine的Noise属性可以让你在5分钟内解决这个问题. 洪流学堂,让你快人几步.你好,我是郑洪 ...

  2. 【Cinemachine智能相机教程】VirtualCamera(三):Aim属性

    摘要:[长文预警,先收藏后品尝]Cinemachine中的虚拟相机如何旋转来让镜头锁定目标物体呢?这就需要搞明白Aim属性的设置咯. 洪流学堂,让你快人几步.你好,我是郑洪智,你可以叫我大智.我正在记 ...

  3. Unity Cinemachine智能相机教程(五):VirtualCamera的Extension扩展

    摘要:[长文预警,先收藏后品尝]如何让相机更智能呢?Extension扩展可以给虚拟相机带来无限的可能. 洪流学堂,让你快人几步.你好,我是跟着大智(VX: zhz11235)学Unity的萌新,我叫 ...

  4. Unity Cinemachine之第三人称摄像机CinemachineFreeLook属性详解

    演示 CinemachineFreeLook是一个第三人称视角相机插件,功能非常强大,内置了很多属性可以供开发者根据需求进行调整. 创建   首先是Cinemachine插件的导入,如果是2018以后 ...

  5. 5分钟入门Cinemachine智能相机系统

    摘要:相机是Unity世界的眼睛,一个智能相机更是能帮咱们节省大把的时间和精力.Cinemachine现在已经大量应用到各种项目中,如果你还没有用过Cinemachine,墙裂建议你来体验一下. 你好 ...

  6. Python编程系列教程第12讲——属性和方法

    视频地址:http://v.youku.com/v_show/id_XNTgyOTg4NjQ4.html 普及网络安全知识,推动信息技术发展. 为祖国的网络安全撑起一片蓝天,为网络安全爱好者构建一方家 ...

  7. NSIS 的 Modern UI 教程(二)

    NSIS 的 Modern UI 教程(二) [ 2008-02-24 20:22:20 | 作者: 陈敏毅 ] http://chenmy.hanzify.org/article.asp?id=51 ...

  8. Quick-Cocos2d-x初学者游戏教程(二) -------------------- Quick内部的代码结构及相应的原理...

    Quick-Cocos2d-x初学者游戏教程(二) 上一章我们已经了解了Quick的一些基础知识,所以本章我们将开始深入到Quick内部,了解它内部的代码结构,同时在解析的过程中学到相应的原理,并学会 ...

  9. [翻译]asp.net ajax xml-script教程(二)

    原文地址:http://dotnetslackers.com/articles/atlas/xml_script_tutorial_part2.aspx asp.net ajax xml-script ...

最新文章

  1. 提高班第三周周记(中秋第二天)
  2. OpenStack环境搭建(二:Fuel Master的安装及配置)
  3. 平面设计师必备的十个技能
  4. python运行excel高级筛选怎么用_懂点EXCEL就行!教你利用Python做数据筛选(上)...
  5. C/C++ putchar函数 - C语言零基础入门教程
  6. java 跨类 调用 model_Model.java中的这两个方法,为什么不能在子类中调用,或者包内调用也行啊。...
  7. 即使对象属性显示在控制台日志中,也无法访问
  8. 升级tomcat遇到的坑
  9. oracle日期按时间点过滤,Oracle数据库日期过滤方法性能比较
  10. adb shell循环命令_Android adb 命令使用总结
  11. CAN通信协议(一)
  12. 图解傅里叶变换(时域频域)
  13. 移动端中的vMin和vMax
  14. Mongodb分片学习
  15. Edison编译时显示No such file or directory
  16. Facet Kernel详解、Random Walk随机游走算法详解
  17. 解决Win10更新后无法开启移动热点的问题
  18. debain系统安装nginx
  19. 卸载antivirus(AVG)教程
  20. 国内外17个学术论文网站推荐,记得收藏哦!

热门文章

  1. SQL 行转列,列分行,行合并列(转)
  2. springboot hibernate 缓存不更新_spring boot 整合 ehcache
  3. java maven 读取配置文件_Java项目和maven项目中如何获取设置配置文件中的属性
  4. socket io 不使用redis_为什么Redis单线程能够达到数十万、百万级的QPS?
  5. pci内存控制器是什么驱动_以微软的技术实力, win10还会出现硬盘100%占用的问题,为什么呢?...
  6. opencv读取usb摄像头_2020 款 11寸 iPad Pro 深度摄像头 RGBD 视频流可视化
  7. html文本框 控件,标签和文本框都用于显示文本
  8. 设计师必备的设计导航站,工作简单化
  9. 设计psd分层素材模板|家居海报设计思路!
  10. 电商移动促销页面设计素材PSD分层模板,轻松出稿稿