找回密码
 立即注册
查看: 389|回复: 0

主流游戏相机实现(unity3d Cinemachine)

[复制链接]
发表于 2022-7-29 12:27 | 显示全部楼层 |阅读模式
简介:

本文通过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/>

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 12:37 , Processed in 0.098086 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表