Cinemachine
Cinemachine检查器设置对应的脚本代码
判断相机是否live:
Class CinemachineBrain | Cinemachine | 2.9.7 (unity3d.com)
Priority
相机显示Priority最大的机位那两个机位优先级一样呢?经研究:
1.从停用变成激活的,且优先级是最大之一的会变成Live;
2.从较小的优先级变成最大之一会变成Live;
其他的官方也没说。
Setting Virtual Camera properties | Cinemachine | 2.9.7 (unity3d.com)
Body
Transposer
Lock To Target On Assign
Lock To Target With World Up
位置受Follow绕y轴旋转的影响,不受绕x轴、z轴旋转的影响。下图当头低下时,相机一直在头世界坐标前方一定的位置,没有随低头下移,结果就是相对头上移了。
Lock To Target No Roll
位置受Follow绕x轴、y轴旋转的影响,不受绕z轴旋转的影响。但是所以这个功能也不能完全防抖。(下图相机的y轴是对准WorldUp的,看起来歪是因为站在斜坡上)
Lock To Target
位置受Follow绕x轴、y轴、z轴旋转的影响。Follow绕z轴旋转时相机保持y轴和Follow一致。
World Space
Follow的世界位置加上Follow Offset。
3rd person Follow
这种模式下改变相机的旋转不会影响相机视野的旋转。相机朝向的不是z轴。
第一人称相机配置
z坐标和Near Clip Plane
首先z坐标和Near Clip Plane应该保证相机渲染不到人物的头,要么相机靠前,Near Clip Plane靠后;要么相机靠后,Near Clip Plane靠前。
相机靠前,Near Clip Plane靠后的问题
枪露出来的少。吃鸡的枪露出来的比其他纯FPS少可能也是这个原因。
相机靠后,Near Clip Plane靠前的问题
会导致Near Clip Plane切到枪的某些部分,枪渲染不完整。这是因为Near Clip Plane更大了,从第一个图里能看到,人物额头的头发和枪的提把尾端在一个前后位置上,如果Near Clip Plane大一点,就不可能同时在头发前面又在提把后面。
Near Clip Plane靠前一点,枪渲染完整了,人物的头也开始出来了。
有完整人物模型的射击游戏,第一人称相机的配置面临以下几个问题:
1.人物有头,相机不能太靠后,否则进入人的头里;
2.跑步时人物的头有晃动,第一人称相机挂载在头上也会跟着晃,体验很不好。第一人称相机需要防抖;
需要解决的问题有:
1.相机是谁的子物体;
2.相机需要加什么约束,PositionConstraint、RotationConstraint还是VirtualCamera的Follow和LookAt;
Follow人物的head,LookAt目标物:
位置如图所示:
相机效果:
此时相机相对于head的Transform:
遇到的问题
人物移动时相机的位置出现问题:
相机的Transform:Position没变,Rotation变化了
转向后恢复:
在scene窗口看,相机异常的时候:
转向后相机正常:
每次移动后相机的Rotation变成的值不一样:
Follow None,做Head的子节点,Look at目标物
结果:问题不变
Follow None,做Head的子节点,Look At None
移动后位置不会异常了,但是移动时准星不在画面中心:
说明原因就是Look at设置的问题。
一个解决方法:
人物的Head上挂载Aim Constraint组件,设置z轴正方向指向准星,相机作为Head的子节点,Follow和Look at都设置None。
结论:第一人称相机就设置成头的子物体,Follow和LookAt都不设置,效果最好。
第三人称相机配置
功能需求:
1.人物俯仰时相机始终在人物上半身后面,就是说人物仰视时相机会转到靠下的位置,俯视同理;
2.人物站、蹲、趴时相机跟随改变高度,使人物身体始终在相机里;
3.人物做一些动作(如跑步)晃动时,应该看见人物身体的晃动,而不是身体在画面里静止,世界晃动;
Builtin-RP和URP项目相机的区别
Builtin-RP相机的检查器:
URP项目相机的检查器:
区别是很大的。相同的选项有Projection(透视还是正交)、FOV、FOV Axis、Clipping Plane、Culling Mask(被转移了位置)、Target Texture(如果有就输出到贴图不输出到Display)、Target Display等。(只写了我理解的)
Builtin RP相机特有的选项有:Clear Flags(画面没有物体的部分填充什么。URP相机里有Background types和这个类似,但是选项不一样)、Depth(渲染顺序,越小越靠前)
URP相机特有的选项有:Rendering里的一大堆、Stack。
需要从一个列表里选一个Renderer:
Renderer列表来自一个叫Universal Render Pipeline Asset的asset:这是一个Renderer总表文件。
每个Renderer由一个Universal Renderer Data文件记录:
问题合集
Scene视图里相机看到了模型内部
原因:使用滑轮缩小太多了。滑轮缩小好像会把Scene相机的Near Clip Plane调远。
解决方法:向前滑滑轮放大。相机进退时按住右键按w、s,别用滑轮。
Cinemachine第一人称相机Virtual Camera激活时跑到Cinemachine Brain的位置
已知哪个Virtual Camera选了solo或priority最大时就是Live,Cinemachine Barin就到它的位置。但是第一人称相机由于Priority变成Live时,是它跑到Cinemachine Brain的位置,点solo时是Cinemachine Brain跑到它的位置。
切瞄准相机的瞬间看到人物的脑后或者头内部
Default Blend时长选比较短或者选Cut有这个问题
如果把Blend时长改的特别长0.7s以上,就没有这个问题,但是开瞄准又不能太慢。
2024.8.24今天发现发瞄准相机的Standby Update改成Never能解决问题。
做了几组实验:
瞄准相机StandBy Update | None | Round Robin | Always |
没问题 | 偶发 | 每次切都有问题 |
内部原理不懂。官方文档就这一句话。
第三人称相机的需要随人物站、蹲、趴变化高度
方案1:Follow人物根节点,LookAt目标物,Body选3rd Person Follow,Aim选Composer,通过代码改变Shoulder Offset
问题:相机位置会突变,游戏体验不好。
一个解决方法:给TPP相机挂Animator,通过动画改变Shoulder Offset。
方案2:Follow人物Head,LookAt目标物,Body选3rd Person Follow,Aim选Composer,靠人物改变高度时头部高度改变带动相机高度改变
问题:取决于头有没有约束,如果有,画面是稳定的,但是头在画面里完全静止,很僵硬;如果没有,相机就随头一起晃。
方案3:设置三个TPP相机,分别放在人物站、蹲、趴合适的位置,人物改变高度时改相机的优先级
不用想,代码巨麻烦。我根本不想用。
总之,我需要的是在身体晃的时候不晃,在蹲下趴下的时候又自动跟随调整高度的第三人称相机。