Unity Cinemachine智能相机教程(五):Virtu
摘要:【长文预警,先收藏后品尝】如何让相机更智能呢?Extension扩展可以给虚拟相机带来无限的可能。
洪流学堂,让你快人几步。你好,我是跟着大智(VX: zhz11235)学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。
自从咱们一起5分钟入门Cinemachine之后,我和你一起学习了Cinemachine中的VirtualCamera的基本用法,VirtualCamera的Body属性、Aim属性、Noise属性,今天咱们来学习一下它的扩展功能,可以给虚拟相机扩展增强更多的能力。
【长文预警,先收藏后品尝】如何让相机更智能呢?Extension扩展可以给虚拟相机带来无限的可能。
虚拟相机扩展
Cinemachine的虚拟相机可以添加很多扩展,通过扩展来获得更多的能力。比如Collider扩展可以让相机被其他物体遮挡时,自动避开遮挡的物体。
Cinemachine内置了几种扩展,你也可以通过继承CinemachineExtension
类来实现你自己的扩展。
如何给虚拟相机添加扩展呢?你可以直接把扩展脚本拖到虚拟相机物体上,也可以从CinemachineVirtualCamera脚本中的下拉菜单中选择。
下面咱们一起看下内置的几个扩展都是什么作用吧。
CinemachineCameraOffset
可以给相机添加偏移。
Offset 偏移量。相机自身空间坐标系下的偏移。
Apply After 在什么阶段来计算增加偏移。
Preserve Composition 保持镜头构图。如果在Aim阶段之后调整相机偏移,调整偏移后重新调整瞄准的方向来保持LookAt的目标在屏幕中的位置。
CinemachineCollider
当人物和物体在复杂的场景中四处移动时,场景中的障碍物有时会遮挡目标。Cinemachine提供了扩展来处理这个情况。
这个扩展的主要作用是:用来在最后处理虚拟相机的位置,基于扩展中属性的设置,保持LookAt目标的视线不受遮挡。
如上图所示,在默认情况下,红色的盒子挡住了黄色的盒子,但是加上CinemachineCollider扩展后,会自动避开遮挡视线的物体,让黄色盒子能够看到。
这个功能是使用射线检测实现的,所以遮挡物上需要有Collider才行。这个功能还是有点耗费性能的,如果你的游戏对性能很敏感,可以考虑用其他方式实现这个功能。
Obstacle Detection 遮挡检测
Collide Against 遮挡检测的层layer
Ignore Tag 检测忽略的Tag
Transparent Layers 透明层,代表不会遮挡视线的层layer
Minimum Distance From Target 如果遮挡物和目标物体很近,小于这个属性的举例,就忽略这个遮挡物(不避开它)
Avoid Obstacles 勾选时才启用这个自动避开遮挡物的功能
Distance Limit 目标物与相机的检测距离限制。在这个距离限制内才会检测遮挡。设置为0即代表不限制。
Minimum Occlusion Time 遮挡超过这个时长以后才调整相机避开遮挡物。
Camera Radius 虚拟相机会尽量与遮挡物保持不低于这个距离。如果你看到由于较大的FOV导致相机穿透了遮挡物内部,可以适当增加这个值。
Strategy 避开遮挡物的策略。
- PullCameraForward 将相机沿着自身的Z轴往前拉,直到在遮挡物前面。
- PreserveCameraHeight 保持相机的高度,同时把相机往前拉。
- PreserveCameraDistance 保持相对于目标物体的距离,同时把相机往前拉。
Maximum Effort 最多处理多少个遮挡物。数字越大越影响性能,一般4足够了。
Smoothing Time 平滑时长。到避开遮挡位置至少会停留这么长时间。
Damping 不遮挡时相机回到正常位置的时长。
Damping When Occluded 相机从正常位置移到避开遮挡位置的时长。
Shot Evaluation
OptimalTargetDistance 如果设置大于0的值,在计算相机位置时会更倾向于接近这个距离。
CinemachineConfiner
CinemachineConfiner:这个扩展可以将相机的最终位置限定在一个区域内。Confier可以在2D或3D模式下运行。Mode属性影响其接受的边界形状的种类。在3D模式下,是一个空间的范围,需要考虑深度;在2D模式下,是一个平面的范围,不必考虑深度。
对于正交相机,还有一个附加选项可以限制屏幕边缘,而不仅仅是相机的位置。这样可以确保整个屏幕区域都位于边界区域内。
Confine Mode:限制模式,2D还是3D
Bounding Shape 2D/3D:需要一个Collider2D或者Collider对象来限定范围。
Damping:阻尼。
CinemachineFollowZoom
这个扩展的功能是:调整相机的FOV来保持物体在屏幕上的尺寸。
Width 物体宽度
Damping 阻尼
Min FOV 最小FOV
Max FOV 最大FOV
CinemachineStoryboard
这个扩展的作用是:最后在屏幕上显示一张图片。
Storyboard Global Mute:勾选时全局禁用,不显示所有CinemachineStoryboard的图片。
Show Image:是否显示图片以及现实的图片是什么
Aspect:图片比例。
- Best Fit 在屏幕范围内尽可能大
- CropImageToFit 图片撑满整个屏幕,可能会有一部分不在屏幕内
- StretchToFit 拉伸图片撑满全屏
Alpha:图片透明度
Center 图片中心的位置
Rotation 旋转
Scale 缩放比例,Sync勾选时宽高等比缩放
Mute Camera 勾选时,这个虚拟相机不会控制Unity相机(相当于只使用StoryBoard的功能)
Split View:图片水平方向上的分割调节
Waveform Monitor:可以用来查看图片的色阶
CinemachineImpulseListener
关于相机震动后面还会有详细的讲解。
只有Impulse Signals和Impulse Source无法做任何事情,因为他们发出的信号需要有“人”来接收并作出反应。Impulse Listener组件是虚拟相机的一个扩展,就是用来“听到”震动信号并对震动作出反应的。
当你给一个虚拟相机添加Impulse Listener扩展时,这个虚拟相机就能对震动做出反应,最直观的就是相机晃动。
下图中,角色的脚是震动源。当脚与地板(A)发生碰撞时会产生震动。虚拟相机上的Impulse Listener扩展会对震动作出反应,那就是相机的晃动(B),会导致Game窗口中C的结果。
如何给虚拟相机添加这个ImpluseListener扩展呢?
选中虚拟相机,在Extension属性中选择:
属性详解
Channel Mask 通道遮罩,不包含的通道会被忽略。
Gain 脉冲的增益。1代表正常强度,0代表忽略这个信号。真实世界中,有的相机绑定在类似树枝上,会造成晃动的更厉害。这个值越大,晃动就会越多。
Use2DDistance 使用2D距离,忽略Z轴
Post Processing Extension 后处理扩展
使用Post Processing Extension扩展可以将Postprocessing V2的profile添加到虚拟相机上。
这个扩展在虚拟相机激活时,会将Post-Processing Profile应用到相机上。如果相机和其他相机发生混合,Post Processing中的参数也会发生混合。
小新:“等等,我怎么没有看到这个扩展?”
在开始之前呢,你需要做一些设置:
1、通过Package Manager安装Post Processing包。
2、这时候你就能在扩展下拉列表里看到CinemachinePostProcessing啦。
3、这时候你还需要给Unity相机,也就是上面有CinemachineBrain组件的那个,添加Post-Process Layer组件。
4、这时候你给虚拟相机的CinemachinePostProcessing扩展设置Postprocessing Profile,相机激活时就会应用到Unity相机上。
属性详解
Profile 用来设置Post-Processing profile
Focus Tracks Target 勾选时,将对焦的距离设置为相机和Look At目标之间的位置。
Offset 偏移。选中Focus Tracks Target时,对焦位置距离Look At目标的距离。如果没有设置Look At目标,这个偏移会是与相机的距离。
扩展阅读
- 【Cinemachine智能相机教程】VirtualCamera(四):Noise属性
- 【Cinemachine智能相机教程】VirtualCamera(三):Aim属性
- 【Cinemachine智能相机教程】VirtualCamera(二):Body属性
- 【Cinemachine】VirtualCamera虚拟相机详解(一)
- 5分钟入门Cinemachine智能相机系统
- Unity编辑器录屏神器:Unity Recorder
- 5分钟制作过场动画
- 【建议收藏】找不到免费的角色动画?来试试mixamo
【扩展学习】在洪流学堂公众号回复
timeline
可以下载Timeline&Cinemachine系列教程全文带目录PDF哦,更有视频教程等着你!
呼~ 今天小新絮絮叨叨的真是够够的了。没讲清楚的地方欢迎评论,咱们一起探索。
我是大智(欢迎加我微信:zhz11235),你的技术探路者,下次见!
别走!点赞,收藏哦!
好,你可以走了。