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第三人称跟随视角的实现。

相关推荐
子兮曰19 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰19 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万19 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝19 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋20 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
SmalBox20 小时前
02-07-原理篇-文件系统与跨平台适配
unity3d·游戏开发
卡布鲁20 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
只睡四小时21 小时前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
汉堡大王95271 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大1 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端