UE4:用C++的方式在UE中添加一个Sequence蓝图函数库

在尝试Sequence的开发中,发现下面这个蓝图函数

UE4:用C++的方式在UE中添加一个Sequence蓝图函数库

找不到C++中对应的接口,因此自己添加一个C++的蓝图函数库,通过传入的字符串名返回对应的Sequence的bind ID

具体步骤如下:

第一步,引擎资源浏览器选择添加C++类,然后引擎会根据你选择的模块位置自动帮你生成cpp和h文件

UE4:用C++的方式在UE中添加一个Sequence蓝图函数库

其中公有还是私有取决于你要不要把这个类用到其他Module

第二步,因为我用的是源码版的引擎,因此添加完类之后,需要关闭VS,用生成文件重新生成一下解决方案,让引擎识别新的依赖关系,不然比如在新增的类A.cpp里面 #include “A.h” 文件会报错说找不到该文件

UE4:用C++的方式在UE中添加一个Sequence蓝图函数库

上图中选择Generate Visual Studio …

第三步,在UE中,每个Project的每个Module或者Plugin都有一个build.cs文件,文件的作用是为UnrealBuildTool描述每个Module的“环境”依赖信息。对于我们需要添加的函数而言,由于我们是要在Game/Test的模块中加入处理sequence的内容,如图

UE4:用C++的方式在UE中添加一个Sequence蓝图函数库

那么我们需要将引擎源码中的关于Sequence的信息加入到build文件中。具体加到哪个信息可以按照如下判断:

PublicIncludePathModuleNames:模块名称列表,包含我们模块的public文件夹下的头文件需要访问的头文件,但不需要“导入”或链接。

PrivateIncludePathModuleNames:模块名称列表,包含我们模块的private文件夹下的头文件需要访问的头文件,但不需要“导入”或链接。

PublicDependencyModuleNames:公共依赖模块名称列表(自动包含public/private目录)。 这些是我们的public source 所需的模块。需要链接

PrivateDependencyModuleNames:私有依赖模块名称列表。 这些是我们的private代码所依赖的模块,但我们的public文件中不会有对这些模块的依赖,需要链接

这里我们是要在主模块添加LevelSequence函数并提供接口给外部使用,因此需要把"MoviePlayer", “LevelSequence”, “MovieScene” 三个信息加入PublicDependencyModuleNames。如果没加,则链接的时候会报错找不到外部项

PublicDependencyModuleNames.AddRange(new string[] {“LevelSequence”,“MoviePlayer”,“MovieScene”})

另外简单说一下UE4的sequence功能,简单来说就是一个可定制的方案,实现镜头轨迹移动、角色移动之类的。可用于比如刚进入一个场景,镜头前移总览整个场景

UE4:用C++的方式在UE中添加一个Sequence蓝图函数库

一般流程如上,用Cinematics->添加关卡序列可创建一个sequence并编辑,然后在需要播放的地方用CreateLevelSequencePlayer创建出来,调用Play播放。如果需要动态绑定角色,用AddBinding来指定绑在哪个sequence角色上,需要注意的是,sequence里面的角色要勾上可生成才能被绑定。