UE4
Unreal Engine 4是一个游戏引擎,就是一个制作游戏的工具。游戏的美术资源和程序资源需要放到游戏引擎中进行整合,然后才能导出最终的游戏产品软件发布版本。Unity3D与Unreal Engine 4是两款主流的开源游戏引擎,前者比较容易上手,后者画面效果比较好。关于两者的比较,网上很多,可以随便搜搜了解一下。
蓝图
蓝图是UE4的一大特色,提到蓝图,大家常会提到蓝图可视化编程。可视化编程可以理解为鼠标拖拖拽拽就完成了编程的工作。对于不会编程的游戏制作者,他们懂得游戏逻辑,但是不会C++编程,蓝图可视化编程就是他们最大的福音。
今日学到的蓝图节点
参考书是这一本,不知道好不好,根据销量随便买的。
目前我观察到,蓝图的要素就是节点、管脚和连线。蓝图中可以放置一些具有特定功能的节点,节点上有管脚,节点左侧的管脚代表输入,右侧管脚代表输出,连线可以把不同或相同节点的不同管脚连接起来,这样就构成了一张蓝图,可以看看下面的例子。
材质蓝图
材质结果节点
新建一个材质,打开他的蓝图,就会看到蓝图中有下面这个节点,它的功能是控制一个材质的最终效果。
它左侧的那些圆球就是管脚,因此它只有输入管脚,没有输出管脚,因为它的输出对象是我们的眼睛,我们看到的材质的样子就是它的输出,而这种输出不需要管脚。
VectorParameter
这个节点只有右侧有管脚,所以只有输出。它在编辑材质的地方出现,显然会与颜色有关,双击中间的黑色区域就可以编辑它的颜色,右侧第一个管脚(白色圆)就可以输出这个颜色,下面三个红、绿、蓝管脚显然是输出这个颜色的三个颜色的分量的。
ScalerParameter
这个东西看起来就是输出一个浮点数而已,这个浮点数输出给其它东西作为缩放因子。
最终材质
把它们连起来就是这样,红色作为基础颜色,金属度0.1,粗糙度0.1。
物体蓝图(不知道该叫什么,先这么叫吧)
对于物体的行为逻辑,我们可以用蓝图来表达,这应该是不懂编程的游戏开发者最想用的功能。
蓝图有很多分类,下面按照分类来说。
Event
今天用到2个事件类蓝图节点。顾名思义,这类蓝图与事件有关。事件包括自身与其它物体碰撞和帧更新等。可以想象的是,这类节点不应该有输入管脚,因为它们的输入就是那些事件的发生,这没必要用管脚和连线表示。
EventHit
它右侧的白色管脚代表执行一个动作,它会触发它所连接的动作。
Other管脚指的是碰撞到的其它的Actor对象,接受这个输入的后续节点可以对这个对象进行一些处理。比如说可以辨别它是不是子弹,如果是子弹打到自己,自己应该做一定的反应。
EventTick
这个东西就是Unity3D中的Update函数,每一帧都会执行一次。
它有两个管脚,一个是要执行的动作,另一个是上一帧到这一帧经过的秒数。
Cast
转换类节点,就是把数据类型进行转换的节点。按C++编程术语就是,可以把子类强制转换成父类,反过来不行。非编程人员可以通过一个例子理解,游戏物体可以包括游戏中的有形状或颜色的那些东西,它可以是子弹或墙壁等物体,我现在想知道一个游戏物体是不是子弹,那么我就可以尝试将这个物体转换成子弹,如果这个转换时成功的,那么说明它就是某种子弹,否则它就不是。
Cast To FirstPersonProjectile
这是一个强制转换成FirstPersonProjectile类型(子弹类型)的节点。
左侧第一个管脚是动作序列的输入,也就是这个转换的上一个动作,左侧第二个管脚Object是被转化的对象。
右侧第一个管脚是转换成功的后续动作,第二个管脚是转换失败的后续动作,第三个管脚看上去是不管后果的强制转换。
总得来说,就是尝试把一个对象转换成子弹类型,能转换成功就是子弹,不管是什么口径、装的什么火药,反正肯定是子弹。当然,我觉得程序员应该可以写一个转换失败的子弹,只要不继承FirstPersonProjectile类就行了。
这个结合EventHit,就可以知道是是子弹还是别的东西与自己碰撞了。
复杂功能函数
这并不是一个严格的分类,只是我根据目前观察的感觉做出的分类。从计算机底层角度看,这类函数功能是比较复杂的,总之我把这些蓝色的称为复杂功能函数。
Set Material
设置材质,就是改变物体的材质,这在人眼中是很直观的,但在计算机底层是很复杂的过程。
Delay(书中第一章没用到,是我自己找来用的)
显然就是一个延时若干秒的功能。
SetActorTransform
改变目标的transform,即改变物体的位置、方向和缩放。
数学函数
数学函数都比较简单,下图中分别是向量归一化、小数相乘、向量乘小数、向量相加。注意管脚的颜色代表了数据类型,黄色是向量,绿色是浮点数。
变量操作
变量只有两种操作,分别是Get和Set。这些节点和管脚的颜色取决于变量的类型,这个var是布尔型,节点就是红色,浮点数就是绿色,向量就是黄色。
其它(我暂时没找到很好理解的分类名称)
- Get World Delta Seconds
就是获得delta second,我试验下来它与EventTick的DeltaSeconds的效果相同。 - GetWorldTransform
获得目标在世界坐标系中的位置。 - Break Transform
拆分Transform,就是把一个Transform管脚拆成位置、方向和缩放三个管脚。 -
Make Transform
制造Transform,就是Break Transform反过来用。