主流游戏相机实现(unity3d Cinemachine)
简介:本文通过unity3d引擎和Cinemachine组件来实现主流游戏的相机设置,切换和管理的概念,习惯,基本原理,经验参数等。
(手游【战双 Like ACT Camera)
(PC游戏 【Sifu/师傅 Like ACT Camera)
<hr/>更多内容可以在 uwa 上查看:
<hr/>一【战双】相机分解和实现
A 基本相机分解
1 自由行走相机
[*]TPS相机,相机转向小于角色水平切向速度:水平行走会有旋转跟随效果
[*]手动拖动屏幕相机可以旋转。
[*]水平拖动半屏幕相机可以旋转360度,拖动旋转比率大致如此。
[*]垂直拖动屏幕相机可以旋转 ~30度,有上下限制,基于轨道。
[*]单词次击屏幕,相机会调整回角色正方向 用时 ~0.5
(图)(动图来自手游 战双)
2 锁定相机
锁定一个目标,目标在屏幕中心附近,主控角色在相机安全区域内
(图)(动图来自手游 战双)
3 特写相机
大技能特写(动图来自手游 战双)
<hr/>B 状态衔接:
图)(动图来自手游 战双)
攻击立刻进入锁定相机
拖动屏幕立刻进入自由相机
按住移动键,保持移动超过~1秒进入自由相机
相机切换有自然融合效果。
C 实现:
Cinemachine:
com.unity.cinemachine@2.6.11 稳定版
自由相机:
原本的自由相机CinemachineFreeLook Axis由input输入,自由观看。 具有3个rigs轨道和背部spline.
这里对CinemachineFreeLook进行修改:
[*]参数修改 Rig[] 同轨道
[*]代码修改: inputAxis => 拖屏输入:UseTouchInput, TouchInputValue 外部传值实现手动拖屏处理。取消Axis由input输入自由观看。
锁定相机:
CinemachineVirtualCamera + FramingTransposer + GroupComposer
CinemachineTargetGroup
相机切换和融合:
用权重切换相机;
融合用参数:
每个虚拟相机的位置角度都是独立计算,切换会有很多翻转和融合的边界问题。
其中 Inherit Position是继承brain中CamB的位置的选项,勾选后可以省去很多边界和位置处理问题。
不同预制相机组件有的需要重写OnTransitionFromCamera方法:
相机控制:
[*]使用权重切换相机
[*]锁定下目标距离过远和过近切换相机:
[*]锁定下保持移动超过1.5s切换相机:
[*]进入攻击状态切换为锁定相机
[*]点击和拖屏旋转相机
[*]双击矫正相机正方向,也是通过m_XAxis的值。
[*]双击矫正和自由拖动互斥:
融合参数:
D 效果展示
说明
0:00 ~ 0:06自由行走;
0:06 ~0:10 水平拖动屏幕旋转相机;
0:10 ~0:14 双击屏幕相机矫正正方向;
0:16锁定相机,攻击目标;
~ 相机切换和融合 ...
<hr/>
二【Sifu/师傅 】战斗相机部分分解与实现
Sifu 游戏战斗相机表现
(动图来自steam 游戏 sifu )
复刻部分效果,连招特写等
A 基本相机
基本行走相机和上节的类似,在部分细节上有区别。这里不过多还原。
B 状态驱动相机
为了部分技能连招的表现力和独特效果,很多游戏会用到特写相机。不限于大招,特殊连招等。不同技能的表现可能需要不同角度和位置的机位以及不同渐变,FOV等参数来表现和区分。
部分技能连招的特写相机,这里用到了Cinemachine的转态驱动相机CinemachineStateDrivenCamera
CinemachineStateDrivenCamera 需要和Animator 绑定。读取AnimationState名字来切换子相机。
其中CinemachineStateDrivenCamera有4个子特写相机。
分镜师,美术,策划可以在子特写相机设计上发挥。
子特写相机可以的位置和朝向看点等可以按照需求设定。另外也可以加上动画等。
CM vcam4 用到了Aim和看点。这里看相的是主控角色,也可以多样化看敌人等其他对象。
CM vcam5 没有设定 Body和 Aim。只用到了Transform本身的值。
主控角色的Animator的States如下:
状态切换:
相机切换用权重来实现,其中默认相机的值为10.高于10的11会替换掉当前相机。同理低于10会非激活。
C 屏幕震动效果
在需要震动效果的子相机上挂上CinemachineImpulseListener 用于监听
其中Gain是增益百分比参数默认1, 0.5是折半,2是翻倍等。
在需要产生发生震动的物体(震动源)上加上CinemachineImpulseSource,本例中是主控角色。可以是3d场景物体或者是一个骨骼节点等,也可以统一面向对象管理。
RawSingnal 信号源资源设置:
这里我们用AnimationCurve 来定义一个波形递减的效果。
调用震动方法
void doShakeIntel()
{
m_ImpulseSource.GenerateImpulse();
}
用在关键帧上调用相机震动效果
D 拓展延伸
类似的连招技能特写游戏有【Jump大乱斗】,【街霸5】等
【Jump大乱斗】的连招技能特写多相机切换过程较快,机位位置设置较为夸张。
相机切换可以用 Blend 的 Cut 类型进行快切。
(动图来自游戏 Jump大乱斗)
<hr/>更多内容可以在 uwa 上查看:
<hr/>
页:
[1]