CinemachineVirtualCamera

来源于:Unity相机管理:虚拟相机

虚拟相机看起来就像是一个普通的组件,我们可以通过编写脚本,在游戏进行时修改它的各个属性,但是在概念上,我们最好把它当做一种相机行为的配置文件。在游戏开发中,我们的相机有几种行为,就为它制作几个虚拟相机,比如为角色移动准备一个第三人称的虚拟相机,为角色的举枪瞄准准备一个第一人称的虚拟相机,为过场剧情准备几个固定机位的虚拟相机和几个滑轨虚拟相机。当我们需要改变相机的行为时,直接切换虚拟相机就好了。本质上虚拟相机应该是相机行为的配置文件,当切换虚拟相机的时候,其实就是在通过切换不同的配置文件来控制相机的行为。既然它是配置文件,那么当虚拟相机里的属性被设置完毕后,就应当尽量避免在游戏中进行修改,如果你发现自己在游戏中进行修改多个属性的话,请考虑再制作一个虚拟相机,它并不会消耗多少的系统资源,而这样做会更便于你管理你自己的相机行为。

Status(虚拟相机的状态)

  • 激活状态Live,这表示Cinemachine Brain正在使用这个虚拟相机的属性来控制相机。可通过点击后面的Solo按钮,使其立即处于激活状态。

  • 待机状态Standby:表示虚拟相机并未被Cinemachine Brain使用。但是虚拟相机自身还在运行当中,下面的Follow、Look At等计算不一定会停止,它的计算频率或者说刷新频率由下面的Standby Update决定。

  • 禁用状态Disabled:表示虚拟相机被禁用,不在占用系统资源。

Game Window Guides:游戏窗口引导,打开后会在Game窗口显示虚拟相机的一些提示信息,比如Dead Zone,Soft Zone区域等。

Save During Play:如果激活它,那么在Play状态下的对虚拟相机的修改则会被保存下来。

Priority:优先级,Cinemachine Brain会使用优先级较高的虚拟相机,在Timeline中使用虚拟相机时,这里的优先级是没有任何作用的。

Follow:虚拟相机会跟随这里的游戏对象移动,具体的跟随移动行为设置在下面的Body里。

Look At:虚拟相机会看向这里的游戏对象,具体的看向旋转行为设置在下面的Aim里。

Standby Update:指的是当虚拟相机处于待机状态时,这些Follow和Look At之类的计算要以什么样的频率执行或刷新,Never表示永远不执行或永远不刷新,Always表示执行和刷新的频率与激活的相机是一样的。Round Robin是一种轮替的更新策略,大概可以理解为每一帧选择一个standBy相机进行更新。

Lens(镜头设置)

  • Vertical FOV:视野角度

  • Near Clip Plane:*裁剪*面,与相机距离小于这个数值的游戏对象不会被渲染。

  • Far Clip Plane:远裁剪*面,与相机距离大于这个数值的游戏对象不会被渲染。

  • Dutch:荷兰角,斜角镜头的角度。

Advanced(高级模式)

Mode Override:相机模式,有正交相机、透视相机和物理相机。在使用正交相机时,FOV视野角度会变成视窗尺寸Ortho Size,使用物理相机时,FOV视野角度会变成焦距Forcal Length,并增加传感器大小Sensor Size等等。 修改该属性同时也会修改Camera上的属性,当这个虚拟相机不再被激活时,Camera上被修改后的属性并不会变回去。

Transitions(虚拟相机切换时的属性设置)

Blend Hint:相机切换的行为具有怎样的物理空间特征。

  • None:对角度和位置做差值,也就是一条线性的切换。

  • Spherical Position:球形切换,如果Look At属性有值的话,那么就以它为球心做一个球形的切换,也就是相机经过的路径大致处于一个球面上。

  • Cylindrical Position:圆柱形切换,如果Look At属性有值的话,那么就以它为中心,在水**面上做圆形切换,在垂直*面上做线性切换,相机划过的路径大致处于一个圆柱体的表面上。

  • Screen Space Aim When Target:当Look At的目标不一样时,在屏幕空间之间做切换,这种切换在位置上使用世界坐标系,表现出的是普通的线性切换。在角度上则会根据两个相机所构成的屏幕空间的夹角间做切换。

Inherti Position:表示这个虚拟相机被激活时,不是让相机移动到虚拟相机的位置,而是虚拟相机移动到相机的位置。

Body和Follow相关,Aim和Look At相关,Noise可为相机添加抖动,Extensions可为相机添加额外的功能,比如相机碰撞检测等。

Body

Transposer

虚拟相机将在某个固定的偏移或距离上跟随目标移动。这个固定偏移就是下面的Follow Offset。默认值是(0,0,-10),也就是说虚拟相机将在跟随过程中尽量处于相对与跟随目标身后10米的位置。为什么说尽量呢,因为有阻尼系数Damping,可以理解为相机移动的延迟。这里的值越小,反应越灵敏。至于这里的身后10米指的是Follow目标本地坐标系还是世界坐标系则由Binding Mode指定。

Binding Mode(虚拟相机和目标的绑定方式)

  • Lock To Target On Assign:表示虚拟相机会锁定自己和目标之间的距离,锁定发生在这个虚拟相机和Follow对象建立关系的时候,也就是On Assign的时候,此时虚拟相机会出现在目标本地坐标系下由Follow Offset指定的偏移的位置。On Assign指的是什么时候呢,在非Play模式下,只要Follow这里有对象,就一直是On Assign状态。在Play模式下,只有当虚拟相机被激活的那一瞬间或者Follow有对象的那一瞬间才是On Assign状态。

  • World Space:与上面类似,但是此时使用的是世界坐标系

  • Lock To Target With World Up:虚拟相机绕目标的偏航轴旋转。

  • Lock To Target No Roll:虚拟相机可以绕着目标的偏航轴和俯仰轴旋转,但是不能绕这横滚轴旋转。

  • Lock To Target:虚拟相机此时可以绕着目标的三个轴旋转。

  • Simple Follow With World Up:虚拟相机不会绕对象的任何一个轴旋转,且尽量不会横向移动。

绕垂直轴Y轴左右旋转机头被称为偏航Yaw,对应的垂直轴被称为偏航轴Yaw Axis,绕横向轴X轴将机头上下旋转被称为俯仰Pitch,对应的横向轴被称为Pitch Axis。绕纵向轴Z轴转动被称为横滚Roll,对应的纵向轴被称为Roll Axis。这里说的旋转都是绕目标旋转,虚拟相机本身的Rotation不会改变。

Orbital Transposer

当选用该模式时,可在Scene视图中看到一个红色圆圈,它会限制相机在这个红色圆环上移动。Follow Offset中的y表示这个红色圆环相对于追踪目标的高度,z表示红色圆环的半径,x表示虚拟相机在这个圆环的切线上的偏移。

Heading

Definition:

  • Target Forward:表示目标的前方

  • World Forward:世界坐标系的前方

  • Position Delta:根据目标在上一帧的位移,来决定相机处于什么位置。

  • Velocity:和上面几乎一样,不过它识别的是刚体的速度。

Bias:如果希望相机归位时有其他位置选择的话,可以设置偏移量。

Velocity Filter Strength:速度的过滤器,可通过设置其大小来过滤掉一些不规则的扰动,让相机移动更*滑。(Definition设置为Position Delta或Velocity时可用)

Recenter To TargetHeading

Enabled:勾选后让相机自动回到Heading方向(由Heading的Definition属性决定)的"后方",也就是虚拟相机的自动归为功能。

Wait Time:表示虚拟相机相关的输入停止之后多久,虚拟相机开始自动归位。

Recentering Time:表示虚拟相机要花多久的时间才能够归位。

X Axis(描述的是虚拟相机在这个圆环上的行为)

Value:指的是虚拟相机在圆环上的位置。0是初始位置,如果把世界坐标系Z轴正方向当做12点方向,X轴当做三点钟方向。0就是表示6点钟方向。这个值增大顺时针转动,减少是逆时针运动。

Value Range:表示虚拟相机在这个圆环上移动的范围。默认是360°一整圈。

Warp:表示是否在最大值和最小值之间循环。

Speed:转速,如果选择Max Speed,故表示最大转速,如果选择Input Value Gain,则表示速度等于这里的值乘以输入的值。

Accel Time:指转速从零到最大转速之间的时间。

Decel Time:指转速从最大转速到零之间的时间。

Input Axis Value:指当前的输入值。

Invert:反向操作,勾选后,比如现在鼠标向右移动时时顺时针移动,取消勾选就是逆时针移动。

Framing Transposer

当我们的屏幕和Follow对象之间的关系相对固定的时候,就会采用Framing Transposer。所以它通常被用在2D游戏以及正交相机当中,不过也可以用于透视相机和3D游戏。比如我们右键 > Cinemachine > 2D Camera创建一个2D虚拟相机时,它其实就是一个使用了Framing Transposer的虚拟相机。Framing Transposer虚拟相机会和目标保持一个固定的距离。

Target Movement Only:如果勾选,那么Damping设置只对目标位移起作用。

Camera Distance:虚拟相机与目标的距离。

Dead Zone Depth:沿着虚拟相机的Z轴方向,只要目标与其距离小于该值,虚拟相机就不需要调整自己轴上的坐标值。

Unlimited Soft Zone:让Soft Zone填满整个屏幕。

Aim

虽然这里写着Look At和Aim,但其本质却是控制虚拟相机自身的旋转,并一度非要看着或者说瞄准这里的游戏对象。Look At和Aim所要做的工作是目标对象作为参考来旋转自身。

  • Same As Follow Target:虚拟相机的角度就会和目标的角度保持一致。

  • Do Nothing:什么都不做。

  • Composer:标准的瞄准模式,可保证相机看向这个游戏对象。如果勾选了Game Window Guides,则会在Game视图出现提示界面。界面上的黄点就是要对准的目标。

  • Hard Look At:无论相机在哪儿,都必须盯着当前目标看。

Tracked Object Offs:在瞄准对象的位置的基础上做一定量的偏移,从而改变瞄准对象的位置。

Lookahead Time:根据目标当前的移动速度推测出一个偏移量。它指的是Cinemachine会计算当前目标的速度,并预测出一段时间后目标的位置,然后添加一个偏移量。

Lookahead Smoothing:可以让上面的预测算法更*滑。当目标运动情况变化笔记大时,可以通过调整这里的数值,以消除镜头抖动,但是数据过大,会导致预测的延迟。

Lookahead Ingore Y:勾选后就不会预测目标垂直方向上的移动。

Screen 和 Screen Y:表示Dead zone的中心位置,(0.5,0.5)表示屏幕的正中央。

Dead Zone Width 和 Dead Zone Height:Dead Zone的宽和高,Dead Zone的区域由周边的淡蓝色直线围出来,Dead Zone的作用是减小相机的敏感程度。只要当前的这个黄点还落在Dead Zone里,相机就不做转动。(Game Window Guides打开才能在Game视图看到各个区域)

Soft Zone Width 和 Soft Zone Height:Soft Zone的宽和高,蓝色区域表示Soft Zone,当黄点落入Soft Zone时,虚拟相机会通过转动让黄点回到Dead Zone里。最外层的红色区域是黄点绝对不会落到的区域。(Game Window Guides打开才能在Game视图看到各个区域)

Bias X和Bias Y:表示Soft Zone的偏移量。Soft Zone永远不会比Dead Zone 小。

Center On Active:勾选时,当前相机被启用的时候,它就会把目标放在屏幕的正中央,否则就会把目标放在最*的Dead Zone的边缘位置。