Unity Cinemachine插件全功能详解

实现电影级别的分镜,推拉式镜头等,需要2017以上的版本才能使用,配合TimeLine一起使用,和Animator一起.

虚拟摄像机不支持Align with View【有BUG】还是手动拖比较好
1:实现简单的相机跟随效果
使用TimeLine实现,由于这次不同于“Unity动画系统案例1”那样需要对人物进行控制。这个项目只是单纯的做CG效果。所以不需要指定动画状态机【但必须挂在Animator组件:原因已经在“Unity动画系统案例1”讲过了】,用TimeLine。对动画设置初始offset就可以了。
步骤,导入人物场景后,创建一个空物体,取名TimeLine,挂载DirectorPlayable插件,创建一个空的.playable片段指定过去
将人物拖到TimeLine面板创建AnimationTrack,由于官方unity娘的动画是不带位移的。这里使用其他的动画【带位移的那种】
在这里插入图片描述
该动画要设置剪切,并设置为循环,在直接点击边界拉伸,让持续时间更长一点【动画系统与TImeLine中已经讲过这些的处理】

在这里插入图片描述
此时点击Cinemachine菜单栏,创建一个最简单的Virtual Camera
Unity Cinemachine插件全功能详解_第1张图片
此时会多出一个游戏物体,该游戏物体只挂在了一个组件
在这里插入图片描述
【注意,他不是摄像机本身,他只是管理摄像机】
添加后,会发现场景中的主摄像机发生了改变,多了一个红色图标,并添加了一个名为Cinemachine Brain的组件
在这里插入图片描述
Cinemachine Brain用于管理所有的虚拟摄像机。Live Camera就代表当前的 虚拟摄像机。场景中可以存在多个虚拟摄像机。当有多个虚拟摄像机时,主摄像机的默认当前设置总是最新创建的【层级窗口靠下面】的虚拟摄像机
这个组件就是将当前的虚拟摄像机所看到的,拿给真实存在的主摄像机来渲染。【所以不耗费性能,因为真实的相机只有一个,其他的是虚拟相机】
此时主摄像机会被锁死,移动不了
要修改摄像机位置,只能修改当前虚拟摄像机的位置

(一)VirtualCamera的两种跟随方式【并没有将任何主摄像机/虚拟摄像机放入TimeLine】
(1)设置Follow实现位置跟随
(摄像机跟着目标一起移动,保持一定的相对位置)
打开当前虚拟摄像机的检视面板
设置跟随目标,和偏移量,【可以手动输入,也可以拖动实现】
Unity Cinemachine插件全功能详解_第2张图片
Damping代表平滑程度
Unity Cinemachine插件全功能详解_第3张图片
这几个设置都是有关镜头的,
第一个代表视野的大小,视野越大,越靠近屏幕边缘就会畸变【类似广角相机的效果】
第二个通常不用管他默认就行
第三个代表视野的远近,该值代表5000m之外的东西就看不到了
第四个是镜头旋转【不是摄像机的rotation】直接对镜头以正前方向为轴的旋转,一般用于模拟开车门,被打翻在地上滚眼中所见

(2)设置Look At实现带有镜头旋转的跟随
(摄像机位置并没有移动,只是朝向的改变)
另外一种跟随的方式LookAt,使用这个前,将Follw置为空,避免影响。这两个是可以一起用【采访跟拍的效果】
比如看向脸
在这里插入图片描述
此时Scene窗口会变为这样
Unity Cinemachine插件全功能详解_第4张图片
这些区域的含义分别是
中间的区域【原本的颜色】:叫做死亡区域,LookAt的这个目标在这个区域内,摄像机是不会跟随的
蓝色区域:代表缓冲区域,此时摄像机会开始跟随,使目标在中间的透明区域
红色区域:不可到达区域,跟随过程中目标是不可能到达这些区域的
Unity Cinemachine插件全功能详解_第5张图片
Aim标签就是对这些进行设置,当然也可以直接对这些线操作
除此之外,还有一些对屏幕位置,平滑度的一些设定。
实际效果就是

Unity Cinemachine插件全功能详解_第6张图片

【追加功能:模拟手持摄像机】
Unity Cinemachine插件全功能详解_第7张图片
展开noise选项卡,选择类型
Unity Cinemachine插件全功能详解_第8张图片
就可以模拟出这种效果
【优化】如果相机在跟随时抖动幅度太大,晃动厉害。应当对其跟随目标的这个动画进行一定的处理,比如勾选rotation 的bake into pose或是position y方向上的
【小技巧】在游戏运行时,想知道当前的主摄像机播放的是哪个虚拟摄像机的画面,可以在主摄像机里面的Brain插件下勾选show debug text
在这里插入图片描述
此时Game窗口的左上角就会显示当前的虚拟摄像机

在这里插入图片描述

当场景中存在多个虚拟相机时,相机的priority优先级属性将其作用,主摄像机中渲染的内容是优先级最高的那个
在这里插入图片描述

所以LiveCamera不能手动修改,而是只能通过更改虚拟摄像机的优先级。
在这里插入图片描述
优先级相同的话,以时间较新的为准【任何具有层级/优先级关系的东西基本上都是这样】

【小技巧】由于上面这个优先级问题,产生了一个小技巧。
我想在当前的虚拟摄像机情况下,修改另外一个虚拟摄像机一些位置旋转之内的操作。但由于优先级缘故,这个虚拟摄像机必然不可见
想让他临时可见进行修改而又不再修改相机priority的情况下,点击solo可以临时开启
在这里插入图片描述

(二)镜头融合/分镜
将多个虚拟摄像机看向跟随不同的位置,设置好,并命名好以示区分。相机的优先级也要区分开,最好都不一样【因为如果写代码实现某些效果程序将会控制这个属性,然而这里并不需要,TimeLine帮我们办好一切】
在这里插入图片描述
由于导入Cinemachine插件,在创建TimeLine轨道时又多了一个选项,Cinemachine轨道,选择这个轨道
需要指定一个真实摄像机,该摄像机必须挂了Cinemachine brain组件,该项目中,就是这个主摄像机,将其指定过去,并创建Cinemachine Track空片段
在这里插入图片描述
单击这些片段,到检视面板,就可以设置其对应的虚拟摄像机了,在运行时就会有分镜的效果,自动切换虚拟摄像机。【这就比TimeLine里面的Activtation Track对相机开关方便多了,也更加节省性能】
当超过这些片段或者是中间的这些空白区域,主摄像机的画面就是虚拟摄像机中优先级最高的那个
Unity Cinemachine插件全功能详解_第9张图片

同样:他和其他的Track一样,也可以做些淡入淡出,改时长,切换时衔接过渡
在这里插入图片描述

(三)轨道镜头
创建推轨相机,使用Dolly Camera Track
Unity Cinemachine插件全功能详解_第10张图片
此时会产生两个物体,一个虚拟摄像机和一个DollyTrack.【该插件有时候会产生bug即游戏物体位置并不是虚拟摄像机所在位置,如果出现,就删除这个虚拟摄像机,重新创建一个并设置为这个模式指定DollyTrack】
并且该虚拟摄像机的模式已经被指定为
在这里插入图片描述
在这里插入图片描述

为Tracked Dolly,刚才所讲的第一种默认是为Transpoer
并且这个轨道路径已经指定为刚刚生成的DollyTrack
现在演示轨道摄像机,为避免原来的轨道的影响,可以添加一个Track group管理并且将其静音,把刚刚的那个虚拟摄像机优先级设高保证显示
在这里插入图片描述

点击DollyTrack1,添加轨道的路径点。【虚拟摄像机只是在这些点上移动,朝向始终不会改变,LOOKAT需要自己去设置】
添加路径点后
Unity Cinemachine插件全功能详解_第11张图片
在这里插入图片描述
勾选Loop会自动进行首尾相连.
Unity Cinemachine插件全功能详解_第12张图片

点击白色小球可以直接拖动,绿色的轨道就是虚拟摄像机的行进路线,其中Roll属性就是指翻转,类似于过山车轨道那种
Unity Cinemachine插件全功能详解_第13张图片
DNA双螺旋那种效果。
摄像机LookAt要设置,并且保留Follow为空,因为此时是轨道控制运动而非是自主跟随
Unity Cinemachine插件全功能详解_第14张图片
此时回到Game窗口,发现摄像机目前是在关键点第一个的位置看向目标的
Unity Cinemachine插件全功能详解_第15张图片
直接运行是没有效果的,轨道镜头的控制,是根据 当前虚拟摄像机下 Path Position这个值来运行的
可以手动拖动他的值来查看摄像机在轨道上的运动
Unity Cinemachine插件全功能详解_第16张图片
这个值和路径点的标号对应
Unity Cinemachine插件全功能详解_第17张图片
此时为3
在这里插入图片描述
所以为了控制它,需要创建一个Animation来修改这个Path Position里面的值来实现
拖入这个虚拟摄像机并录制他Path Position值得改变
在这里插入图片描述
在这里插入图片描述

结束录制并转换为Animation片段
运行后就可以看到实际效果
*自动推轨跟随
刚刚那种需要手动的录制Path Position的值来使推轨进行在做精细的时候这样使用
然而有一种方法可以不创建AnimationTrack也让他做推轨运动
首先要设置follow,然后开启Auto Dolly
Unity Cinemachine插件全功能详解_第18张图片
此时会自动计算轨道上合适的位置开始,来进行推轨镜头

(四)镜头切镜【可以用于CG,由于自动控制也常用于游戏过程中的镜头切换】
【注意!】这里的切镜与前面所讲的类似但又大有不同:
镜头的融合主要就是虚拟摄像机在TimeLine中 创建Cinemachine Track轨道来实现的镜头切换
而这里的镜头切换用的是ClearShotCamera
Unity Cinemachine插件全功能详解_第19张图片
他的镜头切换是自动的,不需要在TimeLIne中手动设置,当拍摄目标时遇到障碍物看不见时就会自动切换机位
创建ClearShot摄像机
在这里插入图片描述
其子物体代表机位,先调高父物体优先级,保证当前显示的是这个
Unity Cinemachine插件全功能详解_第20张图片
点击+号添加新的机位,将所有机位的位置设置好。优先级可以进行考虑,全部一样不改也行.然后只要摄像机和目标之间有障碍物挡住,就会自动寻找一个合适的摄像机来显示
需要注意的是,这个障碍物必须要有碰撞器才判断的出来,【当然,利用的射线检测的原理,可以指定某些层时才切,或是忽略某些tag—在Cinemachine Colider中设置。】
切镜方式也是可以指定的
Unity Cinemachine插件全功能详解_第21张图片

(五)第三人称自由镜头
既跟随,又可以自由旋转,在第三人称中
新创建一个场景,ThridPersonFreeCamera,并导入资源.[场景+Unity娘]
Unity Cinemachine插件全功能详解_第22张图片
创建一个自由摄像机
把跟随目标和朝向目标指定过去,设置初始的位置。直接运行
这就已经实现了跟随目标和随鼠标旋转视野,竖直方向上移动鼠标拉近拉远
Unity Cinemachine插件全功能详解_第23张图片
可以看到相机有很多红线,很多地方可以在该FreeLookCamera检视面板微调
红线的修改在
Unity Cinemachine插件全功能详解_第24张图片

Unity Cinemachine插件全功能详解_第25张图片
该功能很强大,除了可以,因为在三个位置bottom midle top都有分别对应的设置
Unity Cinemachine插件全功能详解_第26张图片
甚至可以根据在不同位置设置,重写Look at的对象。
在这里插入图片描述
取消Commonlens选项框,则可以分别定义相机在3个高度上面镜头的具体参数,勾选则用统一的设置
【注意:Axis Controll的设置】
实现鼠标移动控制镜头的原理是他获取了Input下的Mouse X Mouse Y
Unity Cinemachine插件全功能详解_第27张图片
当然他也可以换为其他的值,比如通过手柄操控。

(六)状态驱动相机
非常实用!!!
他会根据目标动画状态机的状态,来切换机位,比如目标在正常行走的时候是一个机位,目标在放大招时,由于动画状态改变,自动换一个机位对目标的动作进行特写。
使用该相机必须要求 观察目标 具有Animator组件,且状态不能太少
现在用这个 状态驱动相机实现 以下效果:
1:idle状态时对unity娘进行面部特写【一个虚拟摄像机】
2:处于locomotion混合树的时候就使用【刚刚那个自由摄像机】
3:处于WalkBack状态时的时候j进行远部摄像【另一个虚拟摄像机】
步骤:
创建一个State Driven摄像机
Unity Cinemachine插件全功能详解_第28张图片
与切镜clera shot类似,也会生成一个父物体带一个子物体。
在这里插入图片描述
子物体代表机位。
先给这个状态驱动摄像机指定跟随目标和look at对象,还有目标的Animator
在这里插入图片描述
点击+号可以添加更多机位
Unity Cinemachine插件全功能详解_第29张图片
注意后续添加的摄像机都是灰色的,且开启不了,也移动不了,只要把他托上去,作为第一个子物体才能修改【算一个BUG】
最后将刚刚那个自由摄像机也放下来作为子物体,此时那个列表会自动添加上这个摄像机
在这里插入图片描述
Unity Cinemachine插件全功能详解_第30张图片

这里的优先级可以不用设置,因为只有存在相同情况时才会比较优先级。让优先级高的那个显示,这里不可能存在那种情况
现在开始设置 虚拟摄像机机位对应的状态
Unity Cinemachine插件全功能详解_第31张图片
状态添加即可
Unity Cinemachine插件全功能详解_第32张图片
这里的wait和min代表时间延时
wait代表,该动画动画已经切换过了等x秒在切换摄像机【结束等】
Min代表,该动画刚切换,等x秒再从原来的摄像机切过来【开始等】
切换的融合效果在Defalut Blend中设置,当然还可以自定义每个之间转换的效果,点击CreatAsset按钮可以设计细节
在这里插入图片描述
(七)2D相机
既可以在3d项目中使用也可以在2d项目中使用。
其能实现的效果就是,摄像机能够跟随目标,但是不会超出一个边界。
比如,角色在台子上跳跃,如果继续跟随就会照射到地图之外的内容。
使用这种相机就能保证不会出现问题。
这次不用建场景,直接打开该插件的官方用例
Unity Cinemachine插件全功能详解_第33张图片

可以发现跳起时相机并没有跟随,照到边界之外.
创建2d摄像机
Unity Cinemachine插件全功能详解_第34张图片
并指定观察对象,由于是2d正交摄像机,所以不需要look at
Unity Cinemachine插件全功能详解_第35张图片
这种相机实现该效果的原因是因为有一个2d的多边形碰撞器规定了该2d相机的跟随范围
创建一个空物体,并加上 2d多边形碰撞器组件,编辑碰撞器绘制出跟随范围
Unity Cinemachine插件全功能详解_第36张图片

Unity Cinemachine插件全功能详解_第37张图片
然后将这个碰撞器指定给虚拟摄像机即可
Unity Cinemachine插件全功能详解_第38张图片
(八)混合列表摄像机
在这里插入图片描述
其设置与状态驱动摄像机类似,也是一个父物体包含多个子物体,这些子物体就是虚拟摄像机机位
只不过机位的切换是根据时间进行的,而不是动画状态。
他和镜头融合达到的效果差不多,只不过这个不用在TimeLine中创建cinemachine的轨道。

(九)混合机位相机
Unity Cinemachine插件全功能详解_第39张图片
他的效果是,其可以包含多个子物体,也就是机位,通过设置权值,达到这些机位中的一个折中的效果进行显示
在这里插入图片描述
比如Bottom就是这种视角
Unity Cinemachine插件全功能详解_第40张图片
而top是这种视角
Unity Cinemachine插件全功能详解_第41张图片
然后通过设置每个机位权值后折中下来的效果就是

Unity Cinemachine插件全功能详解_第42张图片
Unity Cinemachine插件全功能详解_第43张图片
这种相机在进行目标跟随的时候可以添加插件提供的脚本来实现,权重的自动变换,合适
在这里插入图片描述

(十)轨道物体(不是摄像机,对于游戏物体)
与轨道相机类似,也是让游戏物体在轨道上运动
Unity Cinemachine插件全功能详解_第44张图片
创建后
在这里插入图片描述
按照同样的方式创建轨道关键点
Unity Cinemachine插件全功能详解_第45张图片
要使其运动起来,比推轨相机简单,推轨相机在不使用Auto dolly的情况下要用动画来控制path position的值来使其运动。
而轨道物体更简单,直接将 要运动的物体作为 DollyCart的子物体,并ReSet他的Transform,一定要ReSet,保证父子之间没有相对位移才能保证运动的时候是在轨道上。

在这里插入图片描述
Unity Cinemachine插件全功能详解_第46张图片
然后只用设置speed,运行就直接播放了,不用TimeLine
Unity Cinemachine插件全功能详解_第47张图片

然后鸟就在预定轨道上运动了,
此时再加一个虚拟摄像机一般的。设置follo,look at就行了
Unity Cinemachine插件全功能详解_第48张图片

【补充】
当Body模式为Transposer时,不同的Binding模式的效果
在这里插入图片描述
当然,这种效果只能在 目标具有旋转时才会有区别。这几个演示目标都没有旋转,只是移动
Unity Cinemachine插件全功能详解_第49张图片
默认为Target with world up,简单来说,不管目标怎么转,摄像机不会跟着他转,不会跟着翻转,因为with的是世界坐标,目标自转是局部坐标
Look to target,简单来说就是,目标在转,摄像机也会跟着转,跟着翻转,效果就像是两个人面对面拉着一起转圈,你眼中始终看着对方的脸的效果
其他的不是很常用,可以在官方案例中查看他们的区别
Extensions标签有几个选项。点击后会添加相应的组件
在这里插入图片描述
由于在创建具体的虚拟摄像机时,已经自动的添加了,所以一般不需要设置。
第一个是前面切镜摄像机所需要的摄像机碰撞器,第二个是前面2d摄像机防止摄像机移除边界的指定多边形2d碰撞器
第3个根据需要:有些时候需要添加,即在不做跟随follow的情况下,只是look at那么就会有远小近大的效果,如果添加了这个,那么就不会。始终都是一个大小【这也叫做固定视角跟随】

【Tips:注意!该插件的黄色提醒】
Unity Cinemachine插件全功能详解_第50张图片
这种黄色三角形里面的属性说明修改了不可用,因为他的前需没有设置,比如这里的Aim
报黄色警告,因为前面的LookAt还没有设置
虽然,点击TIimeLine的播放就可以进行效果预览,但这并不代表实际最终的效果,预览还是要运行游戏来看,才是最终效果
如果发现播放卡顿,可以查看主摄像机的update method 修改为fixedUpdate
在这里插入图片描述

【CG动画制作中,TimeLine与Cinemachine区别和联系】
1【实现镜头跟随方面】:以前所讲的TimeLine主要用于实现轨道镜头和分镜效果上,以帧的方式设置关键点,而且分镜将会涉及到多个实体摄像机,性能开销较大,且如果要用于镜头跟随,按帧来拖十分麻烦。功能不如这个Cinemachine强大,这个只需要稍微设置就可以达到理想的效果。

2【轨道镜头】cinemachine更直观,有轨道显示,虽然也要对path position这个值创建动画,并且对小圆点拖出轨迹。但镜头直接设置Look aT目标就行了。以前的TIME line直接对主摄像机创建AnimationTrack每帧都要拖,设置位置和朝向,不是很直观和方便。

==========================================================================================================================================================================================================================================以上所讲的是对一个物体的跟随,朝向等摄像机的设置
=以下为对目标组【即多个目标】的跟随

==由于项目设置有冲突,所以另外创了个项目
导入Cinemachine插件和Tank Tourise这个实例项目
目标:
该示例项目中摄像机的效果就是跟随的多个目标两个,且两个坦克离得很远的时候,镜头会被拉远
这些跟随都是通过该项目中的一个脚本实现的。
我们的目标就是不用这个脚本,而用 CineMachine插件实现
步骤
移除或禁用掉CameraController脚本。
由于两个坦克是动态生成的,这次为演示摄像机,直接事先把坦克拖出来,禁用掉原来的GameManager防止重复生成网页.
创建一个TargetGroup相机
Unity Cinemachine插件全功能详解_第51张图片
此时会自动生成两个物体
在这里插入图片描述
一个虚拟摄像机和一个targetGroup,且这个目标组已经指定给了这个虚拟摄像机。
现在回到TargetGroup的检视面板
添加指定要观察哪些目标
Unity Cinemachine插件全功能详解_第52张图片
后面的权重则代表,权值越大,相机就越靠近谁
回到scene场景调节该虚拟摄像机的位置到合适。
Unity Cinemachine插件全功能详解_第53张图片
这个摄像机是一个正交视图摄像机
在这里插入图片描述
该值可以修改摄像机的大小。
可以发现当两个坦克很近的时候,镜头就会拉的很近。所以要设置一下最远和最近距离
Unity Cinemachine插件全功能详解_第54张图片
在虚拟摄像机的Aim标签下有
在这里插入图片描述
将min调大点即可

太累了,教程中所需要的资源我会单独的提供在一个博客中

你可能感兴趣的:(Unity,游戏开发,插件,Cinemachine,Unity3d)