相机系统

设置相机系统组件

为你的角色添加GCMS_CameraSystemComponent,确保你的角色拥有弹簧臂和相机组件。

通用相机系统.001

初始化相机系统组件

然后调用如下函数进行初始化:

通用相机系统.002

你还需要在组件的细节面板中,指定一个默认的相机模式。

通用相机系统.003

切换相机模式

只需要如下这一个API足矣。

通用相机系统.004

创建相机模式

新建一个继承自GCMS_CameraMode的蓝图即可。推荐相机模式以CM_作为前缀。

通用相机系统.005

默认参数

一个新建的相机模式,默认有如下的一些参数:

通用相机系统.006

其中最值得注意的是Blending部分,你可以调整该相机模式的混合方式,时间等参数。

View是一个蓝图可读写的结构体类型变量,一个相机模式的主要目的就是在激活时更新这个View结构体,并作为该相机模式的“输出”。

编写相机模式逻辑

一个相机模式有如下几个函数供你重写。

通用相机系统.007

轴心位置和旋转

其中PivotLocation和PivotRotation已经有默认实现,并提供了注释说明。一般情况下你不需要重写这两个函数。

如果你希望角色镜头的触发点和特殊点

生命周期函数

通用相机系统.008

你可以通过覆写OnActivation和OnDeactivation来执行一些初始化和清理的工作,类似于Actor的Beginplay和Endplay。

更新相机模式View

一个相机模式最核心的部分就在于:你需要在OnUpdateView中根据你的实际游戏逻辑,更新相机模式View。

通用相机系统.009

你可以通过AssociatedCamera和AssociatedSprintArm,以及TargetActor获取相机模式以外的信息,并基于它们提供的信息来自定义你的逻辑。

OnUpdateView会在该相机模式激活期间每帧执行。

可复用的相机模式

GCMS除了提供基础的代码结构允许你根据自己项目的需求创建不同的相机模式,同时还提供了一些内置的相机模式,拥有更多的默认参数,且开箱即用。

比如这个适用于第三人称游戏的相机模式:

通用相机系统.010

它提供了更多的默认参数,允许你通过曲线值或者固定值驱动相机模式View的参数。

你可以以它为父类创建更多的相机模式,并通过调整曲线,混合类型,混合时间等参数以完成不同的相机控制效果。

使用案例

通用相机系统.011

这里我有三个不同的相机模式,默认会使用CM_ThirdPerson,如果我正在瞄准,则使用CM_ThirdPerson_ADS,如果我正在锁定目标,则使用CM_ThirdPerson_Targeting。

下面是这些相机模式在实际游戏中的效果:

拓展性

相机系统组件不仅仅用于基于角色类的Actor,你可以用于任意Actor,并为其添加各种不同的相机模式,然后根据游戏逻辑进行切换。

比如你的游戏是资源管理类游戏,你可能在某些情况下操控的是一个相机Actor,并在Topdown相机模式下管理你的营地。