Cinemachine的应用-第三人称视角

前言

最近开发游戏战斗系统时,需要实现各种运镜和特写功能。调研了一圈,最终选择了用Cinemachine插件作为战斗和剧情相机操作的核心组件,以实现复杂的运镜功能。下面我们一起来探讨一下此插件的使用方式以及核心关键点。

一、插件集成

我们可以直接在Package Manager包管理器中输入Cinemachine搜索安装,如图所示:

安装完毕后,会在GameObject菜单下出现Cinemachine菜单,如下图所示:

至此,我们成功的集成了Cinemachine插件。

二、Cinemachine的基本概念和运行逻辑

要会使用Cinemachine,首先要了解它的基本概念和运行逻辑,不然它提供的各种组件都不知道怎么使用。Cinemachine简单来说可以分为两部分,第一部分为相机大脑,第二部分为虚拟相机。相机大脑只有一个,主要体现在CinemachineBrain组件。虚拟相机可以有一个或多个,例如可以有第三人称视角虚拟相机、第一人称视觉虚拟相机、技能特写相机等。这些虚拟相机在同一时间只有一个被激活,切换虚拟相机的逻辑需要我们自己实现。

三、实现第三人称视角

在角色扮演或探索动作类游戏中,通常都要实现相机第三人称视角跟随玩家角色。如果自己实现,需要写上跟随算法、平滑阻尼、防抖处理、相机切换等功能,虽然难度不大,但真正要做好工作量还是挺大的。庆幸的是,这一切cinemachine都帮我们做好了,我们只要了解如何使用它就行。

我们先在场景中添加一个空的GameObject,然后给它加上相机Camera组件和CinemachineBrain组件,参数也可以按图中如此设置。如图所示:

如上图,解释一下几个关键的属性。CinemachineBrain下的 LiveCamera属性是绑定的虚拟相机组件,表示当前CinemachineBrain正在和绑定的虚拟相机联动。改变这个属性值就可以切换相机,进行视图变换。

Default Blend属性是虚拟相机之间互相切换时的混合过渡曲线,后面的S是混合过渡时间。S设置为0就是没有过渡了,直接硬切。

我们接着在场景中再添加一个GameObject,给它附加上Cinemachine的第三人称自由视角虚拟相机组件CinemachineFreeLook,如图所示:

当添加了CinemahcineFreeLook后,之前添加的相机大脑中的LiveCamera属性就自动关联上了,如下图:

CinemahcineFreeLook其中几个关键属性和参数我们要了解一下。Follow表示相机跟随的游戏对象,Look At表示相机要注视锁定的游戏对象。很好理解,把这两个属性都设置为玩家角色就实现了边跟随边注视玩家角色的功能了。

Binding Mode有几种选项,设置为World Space时,即表示相机是以世界坐标为基准,不会随着玩家角色旋转而旋转。一般第三人称视觉都可以采用这个选项。

TopRig、MiddleRig、BottomRig这三个属性实质就是相对于lookat对象位置的上中下的三个圈,相机在这三个圈中平滑移动。Height是高度,Raidus是半径,三个圈设定一样的值就是一个固定的视角,如我们要实现的第三人称视角。

这个时候我们保存场景,然后在加载这个场景的时候,在代码中给CinemahcineFreeLook的LookAt属性和Follow属性都赋值为玩家角色对象,就实现了第三人称视角跟随了。关键代码如下:

arduino 复制代码
 public void SetLookAt(Transform target)
 {     
     _binder.LookAt = target;
 }

 public void SetFollow(Transform target)
 {          
     _binder.Follow = target;
 }

其中_binder是CinemahcineFreeLook组件

四、运行效果

通过以上的设置和代码的绑定,CinemachineFreeLook的运行时属性如下图所示:

最终第三人称视角效果如下:

至此,我们完成了Cinemachine第三人称跟随视角的实现。

相关推荐
ℋᙚᵐⁱᒻᵉ鲸落4 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙6 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
前端snow7 小时前
ai agent --- 实现 openclaw 定时间效果
前端
码云之上7 小时前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化
k4m7v2pz7 小时前
Bevy 0.18.1 雨雪天气粒子系统排障实录:四个“想当然“如何让 3D/2D 粒子全部不可见
3d·游戏开发·3d渲染·bevy·天气粒子·2d渲染
星栈7 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·agent·weui
研☆香7 小时前
简单的图片上传 删除 预览
前端
ITresearchGuest7 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·人工智能·信息可视化
慧一居士9 小时前
Vite项目中使用Less步骤,详细使用示例
前端·css
花间相见9 小时前
【LangChain组件03】—— LangChain Agents 执行与状态:工作流程与状态管理实战
java·前端·langchain