大家好,又见面了,我是你们的朋友全栈君。
实现电影级别的分镜,推拉式镜头等,需要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
此时会多出一个游戏物体,该游戏物体只挂在了一个组件
【注意,他不是摄像机本身,他只是管理摄像机】
添加后,会发现场景中的主摄像机发生了改变,多了一个红色图标,并添加了一个名为Cinemachine Brain的组件
Cinemachine Brain用于管理所有的虚拟摄像机。Live Camera就代表当前的 虚拟摄像机。场景中可以存在多个虚拟摄像机。当有多个虚拟摄像机时,主摄像机的默认当前设置总是最新创建的【层级窗口靠下面】的虚拟摄像机
这个组件就是将当前的虚拟摄像机所看到的,拿给真实存在的主摄像机来渲染。【所以不耗费性能,因为真实的相机只有一个,其他的是虚拟相机】
此时主摄像机会被锁死,移动不了
要修改摄像机位置,只能修改当前虚拟摄像机的位置
(一)VirtualCamera的两种跟随方式【并没有将任何主摄像机/虚拟摄像机放入TimeLine】
(1)设置Follow实现位置跟随
(摄像机跟着目标一起移动,保持一定的相对位置)
打开当前虚拟摄像机的检视面板
设置跟随目标,和偏移量,【可以手动输入,也可以拖动实现】
Damping代表平滑程度
这几个设置都是有关镜头的,
第一个代表视野的大小,视野越大,越靠近屏幕边缘就会畸变【类似广角相机的效果】
第二个通常不用管他默认就行
第三个代表视野的远近,该值代表5000m之外的东西就看不到了
第四个是镜头旋转【不是摄像机的rotation】直接对镜头以正前方向为轴的旋转,一般用于模拟开车门,被打翻在地上滚眼中所见
(2)设置Look At实现带有镜头旋转的跟随
(摄像机位置并没有移动,只是朝向的改变)
另外一种跟随的方式LookAt,使用这个前,将Follw置为空,避免影响。这两个是可以一起用【采访跟拍的效果】
比如看向脸
此时Scene窗口会变为这样
这些区域的含义分别是
中间的区域【原本的颜色】:叫做死亡区域,LookAt的这个目标在这个区域内,摄像机是不会跟随的
蓝色区域:代表缓冲区域,此时摄像机会开始跟随,使目标在中间的透明区域
红色区域:不可到达区域,跟随过程中目标是不可能到达这些区域的
Aim标签就是对这些进行设置,当然也可以直接对这些线操作
除此之外,还有一些对屏幕位置,平滑度的一些设定。
实际效果就是
【追加功能:模拟手持摄像机】
展开noise选项卡,选择类型
就可以模拟出这种效果
【优化】如果相机在跟随时抖动幅度太大,晃动厉害。应当对其跟随目标的这个动画进行一定的处理,比如勾选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对相机开关方便多了,也更加节省性能】
当超过这些片段或者是中间的这些空白区域,主摄像机的画面就是虚拟摄像机中优先级最高的那个
同样:他和其他的Track一样,也可以做些淡入淡出,改时长,切换时衔接过渡
(三)轨道镜头
创建推轨相机,使用Dolly Camera Track
此时会产生两个物体,一个虚拟摄像机和一个DollyTrack.【该插件有时候会产生bug即游戏物体位置并不是虚拟摄像机所在位置,如果出现,就删除这个虚拟摄像机,重新创建一个并设置为这个模式指定DollyTrack】
并且该虚拟摄像机的模式已经被指定为
为Tracked Dolly,刚才所讲的第一种默认是为Transpoer
并且这个轨道路径已经指定为刚刚生成的DollyTrack
现在演示轨道摄像机,为避免原来的轨道的影响,可以添加一个Track group管理并且将其静音,把刚刚的那个虚拟摄像机优先级设高保证显示
点击DollyTrack1,添加轨道的路径点。【虚拟摄像机只是在这些点上移动,朝向始终不会改变,LOOKAT需要自己去设置】
添加路径点后
勾选Loop会自动进行首尾相连.
点击白色小球可以直接拖动,绿色的轨道就是虚拟摄像机的行进路线,其中Roll属性就是指翻转,类似于过山车轨道那种
DNA双螺旋那种效果。
摄像机LookAt要设置,并且保留Follow为空,因为此时是轨道控制运动而非是自主跟随
此时回到Game窗口,发现摄像机目前是在关键点第一个的位置看向目标的
直接运行是没有效果的,轨道镜头的控制,是根据 当前虚拟摄像机下 Path Position这个值来运行的
可以手动拖动他的值来查看摄像机在轨道上的运动
这个值和路径点的标号对应
此时为3
所以为了控制它,需要创建一个Animation来修改这个Path Position里面的值来实现
拖入这个虚拟摄像机并录制他Path Position值得改变
结束录制并转换为Animation片段
运行后就可以看到实际效果
*自动推轨跟随
刚刚那种需要手动的录制Path Position的值来使推轨进行在做精细的时候这样使用
然而有一种方法可以不创建AnimationTrack也让他做推轨运动
首先要设置follow,然后开启Auto Dolly
此时会自动计算轨道上合适的位置开始,来进行推轨镜头
(四)镜头切镜【可以用于CG,由于自动控制也常用于游戏过程中的镜头切换】
【注意!】这里的切镜与前面所讲的类似但又大有不同:
镜头的融合主要就是虚拟摄像机在TimeLine中 创建Cinemachine Track轨道来实现的镜头切换
而这里的镜头切换用的是ClearShotCamera
他的镜头切换是自动的,不需要在TimeLIne中手动设置,当拍摄目标时遇到障碍物看不见时就会自动切换机位
创建ClearShot摄像机
其子物体代表机位,先调高父物体优先级,保证当前显示的是这个
点击+号添加新的机位,将所有机位的位置设置好。优先级可以进行考虑,全部一样不改也行.然后只要摄像机和目标之间有障碍物挡住,就会自动寻找一个合适的摄像机来显示
需要注意的是,这个障碍物必须要有碰撞器才判断的出来,【当然,利用的射线检测的原理,可以指定某些层时才切,或是忽略某些tag—在Cinemachine Colider中设置。】
切镜方式也是可以指定的
(五)第三人称自由镜头
既跟随,又可以自由旋转,在第三人称中
新创建一个场景,ThridPersonFreeCamera,并导入资源.[场景+Unity娘]
创建一个自由摄像机
把跟随目标和朝向目标指定过去,设置初始的位置。直接运行
这就已经实现了跟随目标和随鼠标旋转视野,竖直方向上移动鼠标拉近拉远
可以看到相机有很多红线,很多地方可以在该FreeLookCamera检视面板微调
红线的修改在
该功能很强大,除了可以,因为在三个位置bottom midle top都有分别对应的设置
甚至可以根据在不同位置设置,重写Look at的对象。
取消Commonlens选项框,则可以分别定义相机在3个高度上面镜头的具体参数,勾选则用统一的设置
【注意:Axis Controll的设置】
实现鼠标移动控制镜头的原理是他获取了Input下的Mouse X Mouse Y
当然他也可以换为其他的值,比如通过手柄操控。
(六)状态驱动相机
非常实用!!!
他会根据目标动画状态机的状态,来切换机位,比如目标在正常行走的时候是一个机位,目标在放大招时,由于动画状态改变,自动换一个机位对目标的动作进行特写。
使用该相机必须要求 观察目标 具有Animator组件,且状态不能太少
现在用这个 状态驱动相机实现 以下效果:
1:idle状态时对unity娘进行面部特写【一个虚拟摄像机】
2:处于locomotion混合树的时候就使用【刚刚那个自由摄像机】
3:处于WalkBack状态时的时候j进行远部摄像【另一个虚拟摄像机】
步骤:
创建一个State Driven摄像机
与切镜clera shot类似,也会生成一个父物体带一个子物体。
子物体代表机位。
先给这个状态驱动摄像机指定跟随目标和look at对象,还有目标的Animator
点击+号可以添加更多机位
注意后续添加的摄像机都是灰色的,且开启不了,也移动不了,只要把他托上去,作为第一个子物体才能修改【算一个BUG】
最后将刚刚那个自由摄像机也放下来作为子物体,此时那个列表会自动添加上这个摄像机
这里的优先级可以不用设置,因为只有存在相同情况时才会比较优先级。让优先级高的那个显示,这里不可能存在那种情况
现在开始设置 虚拟摄像机机位对应的状态
状态添加即可
这里的wait和min代表时间延时
wait代表,该动画动画已经切换过了等x秒在切换摄像机【结束等】
Min代表,该动画刚切换,等x秒再从原来的摄像机切过来【开始等】
切换的融合效果在Defalut Blend中设置,当然还可以自定义每个之间转换的效果,点击CreatAsset按钮可以设计细节
(七)2D相机
既可以在3d项目中使用也可以在2d项目中使用。
其能实现的效果就是,摄像机能够跟随目标,但是不会超出一个边界。
比如,角色在台子上跳跃,如果继续跟随就会照射到地图之外的内容。
使用这种相机就能保证不会出现问题。
这次不用建场景,直接打开该插件的官方用例
可以发现跳起时相机并没有跟随,照到边界之外.
创建2d摄像机
并指定观察对象,由于是2d正交摄像机,所以不需要look at
这种相机实现该效果的原因是因为有一个2d的多边形碰撞器规定了该2d相机的跟随范围
创建一个空物体,并加上 2d多边形碰撞器组件,编辑碰撞器绘制出跟随范围
然后将这个碰撞器指定给虚拟摄像机即可
(八)混合列表摄像机
其设置与状态驱动摄像机类似,也是一个父物体包含多个子物体,这些子物体就是虚拟摄像机机位
只不过机位的切换是根据时间进行的,而不是动画状态。
他和镜头融合达到的效果差不多,只不过这个不用在TimeLine中创建cinemachine的轨道。
(九)混合机位相机
他的效果是,其可以包含多个子物体,也就是机位,通过设置权值,达到这些机位中的一个折中的效果进行显示
比如Bottom就是这种视角
而top是这种视角
然后通过设置每个机位权值后折中下来的效果就是
这种相机在进行目标跟随的时候可以添加插件提供的脚本来实现,权重的自动变换,合适
(十)轨道物体(不是摄像机,对于游戏物体)
与轨道相机类似,也是让游戏物体在轨道上运动
创建后
按照同样的方式创建轨道关键点
要使其运动起来,比推轨相机简单,推轨相机在不使用Auto dolly的情况下要用动画来控制path position的值来使其运动。
而轨道物体更简单,直接将 要运动的物体作为 DollyCart的子物体,并ReSet他的Transform,一定要ReSet,保证父子之间没有相对位移才能保证运动的时候是在轨道上。
然后只用设置speed,运行就直接播放了,不用TimeLine
然后鸟就在预定轨道上运动了,
此时再加一个虚拟摄像机一般的。设置follo,look at就行了
【补充】
当Body模式为Transposer时,不同的Binding模式的效果
当然,这种效果只能在 目标具有旋转时才会有区别。这几个演示目标都没有旋转,只是移动
默认为Target with world up,简单来说,不管目标怎么转,摄像机不会跟着他转,不会跟着翻转,因为with的是世界坐标,目标自转是局部坐标
Look to target,简单来说就是,目标在转,摄像机也会跟着转,跟着翻转,效果就像是两个人面对面拉着一起转圈,你眼中始终看着对方的脸的效果
其他的不是很常用,可以在官方案例中查看他们的区别
Extensions标签有几个选项。点击后会添加相应的组件
由于在创建具体的虚拟摄像机时,已经自动的添加了,所以一般不需要设置。
第一个是前面切镜摄像机所需要的摄像机碰撞器,第二个是前面2d摄像机防止摄像机移除边界的指定多边形2d碰撞器
第3个根据需要:有些时候需要添加,即在不做跟随follow的情况下,只是look at那么就会有远小近大的效果,如果添加了这个,那么就不会。始终都是一个大小【这也叫做固定视角跟随】
【Tips:注意!该插件的黄色提醒】
这种黄色三角形里面的属性说明修改了不可用,因为他的前需没有设置,比如这里的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相机
此时会自动生成两个物体
一个虚拟摄像机和一个targetGroup,且这个目标组已经指定给了这个虚拟摄像机。
现在回到TargetGroup的检视面板
添加指定要观察哪些目标
后面的权重则代表,权值越大,相机就越靠近谁
回到scene场景调节该虚拟摄像机的位置到合适。
这个摄像机是一个正交视图摄像机
该值可以修改摄像机的大小。
可以发现当两个坦克很近的时候,镜头就会拉的很近。所以要设置一下最远和最近距离
在虚拟摄像机的Aim标签下有
将min调大点即可
太累了,教程中所需要的资源我会单独的提供在一个博客中
【!!!】欢迎关注我的个人线上课堂https://www.zuikakuedu.cn,内含JavaWeb与Unity游戏开发实战教程,完全免费!,Csdn博客涉及的课程资料也在该网站上
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133425.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...