蓝图基础开发
说到蓝图开发,我个人觉得得从整体的Gameplay开始说, 在我刚开发的时候,是对整个Gameplay是没有概念的,但是根据我的学习计划,就从蓝图-材质-地编这个方向,当时是需要去比赛,你只需要完成具体功能就行,你只需要学会调用蓝图节点,就可以完成大部分的实现以及功能。就算当时使用了gameplay,也只是说加入这个选择就可以了,所以是默认就可以。
说到gameplay,就要聊到GameInstance/GameMode/GameState/PlayState/PlayerController/Player这六个最重要的角色,当然我也不会从这六个的具体实现去说,我会对这六个在整个开发当中,具体的作用进行分析。

其中GameInstance(游戏实例)作为整个这次一整个游戏运行的蓝图,他作为可以让开发者能够跨关卡对象进行数据交换的蓝图,我们在开发的时候就能发现,在多个关卡切换的时候,在当前关卡对象的数据,靠自己是无法传输给其他的关卡对象,这是因为在加载另一个关卡对象的时候,程序已经将上一个关卡对象从内存中销毁了,自然不可能再保留任何一个数据,这时候就需要一个在关卡数据层级之上的层级去存放这些,你想要跨关卡对象数据的蓝图对象,那么UE就准备了GameInstance让开发者能够存放整场游戏的数据,当然,如果你存入数据到GameInstance当中,你要时刻注意这个变量其实是全局存在的,如果创建过多也是会对整个程序有负担。
在上个环节说到了关卡对象,那关卡对象中又有哪个蓝图可以去放整个关卡对象的数据呢,这时候就是GameMode登场,关于GameMode有很多种作用,你可以用来存关卡中的全局变量,全局函数,特殊的CustomEven,都可以,但是要记住每个关卡对象都会有自己的一个GameMode,且都是单独独立的,如果后续需要网络同步的时候,每个GameMode的数据都相当于本地数据,是无法同步的。在GameMode中,你可以去配置这次关卡的GameState/PlayState/PlayerController/Player,关于State我需要放到单独一章去说。
我们这次先了解PlayerController和Player这两个蓝图,这两个分别是角色控制器/角色,在一场游戏中,肯定是要有一个角色给玩家操控的,那这两个都是player有什么区别呢?问题就在于这里,我刚开始开发的时候,所有的教程都会让我们将操控角色的逻辑放到Player当中,但是当我了解到PlayerController的时候,我就一直思考,为什么要专门加一个控制器出来,直到我玩到《泰坦陨落》,同一个场景当中需要做到玩家和机甲的切换,假设我要用UE做出来,我需要做两个角色,并在两个角色当中都写一套控制逻辑,当然写两个就还好,如果是10个20个呢,不同的角色模型不同的角色,重复性就很高,这是不健康的,这时候就是控制器出来的时候了,我可以给不同的角色上同一套控制器,控制器出去的接口跟每个角色需要控制的接口都匹配上,这样我只需要写一套控制逻辑,就可以完成多种角色的控制了。
好,现在我大概的说完关于gameplay的基础,现在就需要到具体的蓝图模块了,要先了解有哪些蓝图类型,以及哪些常用的蓝图节点,蓝图要如何跟材质,特效,C++去交互,特别是众生常谈的,蓝图优化的问题,如何去做到更好的运用蓝图。