赞
踩
Unity相机策略千千万,Cinemachine独占一半
以上权当一句玩笑话
不过就博主入职的若干芝麻小公司而言,Cinemachine出现的频率堪称恐怖。
有直接用Cinemachine的,也有魔改后再用的……
那么,为什么Cinemachine有这样的魔力呢?至此,我开始尝试《走进相机》……
注意:只有2017.1之后版本的Unity才可以使用Cinemachine
Cinemachine是什么?
cinemachine相机是虚拟的,内部由数据来控制,所以体量小,性能消耗小
在运行时将场景的camera绑定到某一个cinemachine虚拟相机上
所以镜头的操作是由cinemachine来实现,而真正的相机功能还是由场景原本的camera来完成
而Cinemachine本身提供了很多封装好的方法
使用Cinemachine可以很方便地实现相机跟随人物、镜头融合、轨道相机……在游戏快速开发阶段,这点堪称绝杀。
本篇博客只是粗略了解下cinemachine提供的各类型相机以及使用方法,如有误欢迎评论区指正。
以下开始逐个了解各个相机的参数
virtual-camera即普通虚拟相机,是最简单的
可以结合timeline完成镜头融合,切换镜头等操作
solo:虚拟相机存在优先级,点击solo后,Game窗口的镜头会锁定到该虚拟相机上,方便调试
Game Window Guides:描述相机视野的窗口白线
Save During Play:播放时保存
Priority:优先级。优先级高的相机会显示在Game窗口,但优先级无法影响timeline中相机的调度
Follow:获取跟踪物体的transform
LookAt:获取镜头锁定物体的transform
Field Of View:视野范围设置
Near Clip Plane:近裁剪面设置(相当于能观察的最近距离)
Far Clip Plane:远裁剪面设置(相当于能观察的最远距离)
body内的数据,只在Follow栏存在物体才会被真正使用。
Binding Mode:绑定的模型类型
Follow Offset:跟随补偿。相当于cinemachine在跟随物体时的镜头偏移量
X/Y/Z/Yaw Damping:四种阻尼类型。相当于镜头在移动时的缓冲程度
Aim中的数据,只有Look At栏存在物体时才会被真正使用
Tracked Object Offset:跟踪对象偏移补偿。相当于cinemachine在跟踪物体时的镜头偏移量
Horizontal/Vertical Damping:水平/垂直阻尼
Screen X/Y:屏幕的偏移量
Dead Zone Width/Height:死亡区域的长宽设置。在死亡区域内的时候,镜头不会跟踪物体。当物体离开死亡区域后,镜头才会开始跟踪物体
Soft Zone Width/Height:软化区域的长宽设置
黄色的点为镜头焦点,中心的透明矩形为死亡区域,蓝色区域为软化区域 当镜头焦点在死亡区域时,镜头不会跟踪物体 当镜头焦点出现在软化区域时,镜头会开始跟踪物体 红区为焦点不可到达的地方Bais X/Y:软化区域的偏移设置
Center On Activate:是否在激活时居中
镜头噪声。可以制作出屏幕抖动抖等效果
Noise有两种状态,none和Basic Multi Channel Perlin
Noise Profile:可以设置噪声,实现屏幕抖动的效果
演示:
TimeLine实现镜头融合
顾名思义,Dolly Camera with Track即为轨道相机
相当于可以给相机规划一个轨道路线,相机会沿着轨道的路线来移动
创建了Dolly Camera with Track后,会创建两个物体
一个是Virtual Camera,还有一个轨道(Dolly Track)
Body的类型为Tracked Dolly
新增的参数:
Path:添加轨道。也就是挂载了轨道脚本的物体
Path Position:相机在轨道上的位置。
如果轨道相机挂载了跟随的物体,那么Auto Dolly即可使用
他会自动的设置相机在轨道的位置,实现跟踪物体的效果
Dolly Track是挂载了CinemachineSmoothPath脚本的物体
Resolution:轨道清晰度调整。作用是调整轨道间距的大小。
Appearance:
Path Color:路径颜色
Inactive Path Color:非活动路径颜色
Width:轨道宽度
Looped:循环
WayPoints:轨道点。一条完整的轨道是由多个轨道点相互连接形成的
点击“+”即可增加轨道点
x,y,z三参数分别为轨道点在三维空间上移动的数值
Roll为轨道点自身的旋转角度
演示:
个人运镜水平非常的拉胯,凑合看看
ClearShot Camera一般是用于切镜操作
什么是切镜:
并不只是单纯地切换镜头。在摄像机拍摄物体时,如果在镜头和物体之间存在遮挡物,就需要切换镜头的视角,来实现在不同位置观察物体的操作
实现思路:
1、点击创建ClearShot Camera后,会生成一个CM ClearShot和若干个CM vcam
2、ClearShot挂载了CinemachineClearShot组件,用于管理不同机位的vcam
3、vacm挂载了一个vitrual Camera(虚拟相机)组件,用于实现虚拟相机的功能。
并且还挂载了一个 Cinemachine Collider组件。
Collider组件是用于判断当前的机位的视线是否会被某个层级的物体遮挡。
如该机位的视线被遮挡了,那么ClearShot会自动切换到下一个机位来观察选中的物体
负责管理旗下的所有参与切镜操作的vcam
solo:虚拟相机存在优先级,点击solo后,Game窗口的镜头会锁定到该虚拟相机上,方便调试
Game Window Guides:描述相机视野的窗口白线
Save During Play:播放时保存
Priority:优先级
优先级高的相机会显示在Game窗口。该优先级是参与全局的cinemachine类型相机优先级的比较。它的子物体(各个vcam)的Priority是在Clear Shot内进行比较
Follow:获取跟踪物体的transform
LookAt:获取镜头锁定物体的transform
(Follow和LookAt上绑定的transform是可以被子物体继承的)
Activate After:Clear Shot激活的时间
Min Duration:最小持续时间
Randomize Choice:随机化选择
Default Blend:镜头混合种类选择。也就是切换镜头的方式
Custom Blends:自定义镜头混合
Virtual Camera Children:存储挂载在Clear Shot下的子相机(vcam)
vcam就相当于切镜时的一个机位。
挂载了CinemachineVirtualCamera组件。用于实现虚拟相机的基础功能
挂载了Cinemachine Collider组件。参与判断切镜条件已经切镜参数设置
具体功能查看:VirtualCamera
唯一需要注意的点是Follow和Look At两个参数
如果Follow和Look At不设置参数时。默认继承父物体Clear Shot上挂载的transform
设置了参数后,在使用该机位时,会暂时覆盖父物体上挂载的transform
Collide Against:碰撞层级设置。
当一个处于执行中机位的视线被指定层级的物体遮挡后,会触发改变机位的行为。
Ignore Tag:相机忽视标签。
当遮挡相机视线的物体,标签为Ignore Tag时,相机不出触发改变机位的行为
Transparent Layers:透明层设置
演示:
Free Look Camera即自由视角相机
可以实现第三人称自由视角的移动。使用起来方便快捷,并且参数一般是可以由c#代码控制的
在创建了Free Look Camera后,会生成一个挂载了CinemachineFreeLook组件的虚拟相机
CinemachineFreeLook组件继承于CinemachineVirtualCamera组件(Virtual Camera)。
所以Free Look Camera的大部分功能是和Virtual Camera相同的
Free Look Camera通过三维空间的相机轨道来控制相机位置以及旋转角度的变化
它拥有三条轨道:Top,Middle,Buttom。用于调控Free Look Camera的位置和旋转角度
每一条轨道的参数都是独立开来的,包括机位高度,相机视野大小,渲染范围大小,相机区域大小等
所以可以把一个Free Look Camera看做是三个不同高度的Virtual Camera进行操作
部分参数功能参考:VritualCamera
CinemachineFreeLook组件参数主要分为两个部分:
一部分用于控制Free Look Camera的整体参数(非轨道参数)
另一部分用于控制三个轨道的参数(轨道参数)
(与Virtual Camera相同的参数不再解释)
Common Lens:开启Lens统一设置。
开启后,统一设置三条轨道的Lens。
关闭后,每个轨道的Lens需要单独设置。
Axis Control部分:Free Look Camera的轴控制
Y/X Axis:
Value:相机位置设置。
Y轴参数改变相机在三条轨道之间的高度位置
X轴参数改变相机在某个轨道之间的水平位置
Speed:相机移动速度设置
Y轴参数可以改变相机在三条轨道之间移动时的垂直速度
X轴参数可以改变相机在某个轨道之间移动时的水平速度
Accel Time:相机移动时的加速时间
Decel Time:相机移动时的减速时间
Input Axis Name:输入轴名称
默认是Mouse X/Y。也就是鼠标移动对应的Axis Name来操作相机
可以自定义成其他的Axis Name
Input Axis Value:输入轴的值
Invert:是否开启轴反转
当你在往左滑动时,却发现镜头往右转
说明当前轴的移动条件和预期相反
可以通过开关轴反转来达到自己的要求
Y Axis Rencentering:
Enabled:是否开启Y轴重新居中。
开启后,当停止对相机的轴操作,相机会重新移动回Middle轨道上
Wait Time:停止操作后的等待时间
Recentering Time:重新定心时间。也就是回到轨道上的时间
Orbits:
Binding Mode:绑定模式设置
Spline Curvature:样条曲线曲率。控制轨道上下移动轨迹的曲率
Top/Middle/Bottom Rig:三条轨道的大小以及高度的设置
Height参数控制轨道高度
Radius参数控制轨道半径
Look At Override:注视覆盖
Lens:在非轨道参数中,将Common Len设为true后激活
Field Of View:视野范围设置
Near Clip Plane:近裁剪面设置(相当于能观察的最近距离)
Far Clip Plane:远裁剪面设置(相当于能观察的最远距离)
Dutch:镜头旋转设置
其余参数,参考VritualCamera
演示:
State-Driven Camera为状态驱动相机
顾名思义,通过场景中某个物体自身的状态(包括动画系统里的参数)来驱动cinemachine虚拟相机的切换
所以状态驱动相机需要挂载场景中某个物体的Animator。
State-Driven Camera分为两个部分:
①状态驱动控制台:挂载了CinemachineStateDrivenCamera组件
②虚拟相机集合:由若干个虚拟相机组合而成(例如Virtual Camera,Free Look Camera)
负责接收已挂载的Animator参数。用于控制虚拟相机集合
由于存在多个子物体(Virtual Camera)。所以某些参数是可以继承给子物体的
具体解释请看ClearShotCamera中的Clear Shot栏
Animated Target:绑定场景中某物体的Animator。用于获取动画状态参数来控制虚拟相机合集
Default Blend:默认混合设置
第一个参数可以选择切换镜头时的效果,例如Cut是立刻切镜、Ease in附带镜头移动
第二参数是切镜效果的持续时间
Custom Blends:选择自定义的混合设置
可以新增自定义混合设置:例如物体从idle状态变成walk状态时,让镜头切换效果是Cut
例如物体从walk状态变成idle状态时,让镜头切换效果是Ease int
状态切换配置表:
设置:某状态对应的指定虚拟相机
Wait:执行虚拟相机切换前的等待时间
Virtual Camera Children:增加或删除子虚拟相机
演示:
使用动画状态控制虚拟相机切换
Group Target Camera:目标组跟随相机
可以保证需要观察的多个物体都在相机的视野范围内
相机会动态更改视野的范围,保证可以观察到指定的多个物体
在生成Group Target Camera后:
会创建一个挂载了CinemachineTargetGroup脚本的TargetGroup物体
以及若干个Virtual Camera
TargetGroup负责管理子虚拟相机Virtual Camera
挂在TargetGroup上
Position Mode:位置模式
Rotation Mode:旋转模式
Update Method:相机更新模式
物体跟随表:增加或删除需要跟随的物体
Target:存放被跟随物体的transform
Weight:权重设置
Radius:半径设置
具体参数功能请参考:VritualCamera
新增的参数:
在Aim参数集中,新增了有关Group Target的参数设置
Group Framing Size:组框架大小设置。
就是多个组物体在相机中所占据的空间大小
Framing Mode:框架模式
Frame Damping:阻尼设置。也就是相机视野变化的速率大小
Adjustment Mode:调整相机模式
Minimum Fov:最小镜头范围设置
Maximum Fov:最大镜头范围设置
演示:
实现相机跟随目标组
顺着Cinemachine自个的相机类型,笼统的实操了一遍,以应付项目中临时的需求。hhhh……
摸鱼本是无敌路,何须再借摆烂骨?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。