当前位置:   article > 正文

ue4 classuobject没有成员beginplay_第6期(1):UE4蓝图规范-V1.0(BPSpec-V1.0)

"uobject\" 没有成员 \"tick"

蓝图存放与命名

根据蓝图的类型存放蓝图。

d0c40dfec5b1a4e6bdc84654a88cc1ef.png

蓝图的类型主要分为:

fca10f53129a11bd3ff9a3391c30620b.png

文件夹的前两位数字主要用来自动排序,以防文件夹的顺序混乱。蓝图UAsset资源命名:以蓝图类别缩写(如“BPA”)开始,以下划线(“_”)连接。

蓝图的描述信息和蓝图分类

给蓝图资源添加蓝图描述和蓝图分类,可以帮助其他人或将来的自己快速了解该蓝图的功能。

2d0cf7be80de4c521171d1e2e0e825a0.png

c586b6de6f5e977a0b5dae7b1996b161.png

蓝图功能划分和蓝图层级

使用基类和子类的方式划分蓝图功能:采用这种面向对象的编程思想,可以便于后期的功能扩展。可以减轻单个蓝图的复杂度。

b2d03aa5d9f70bb0600fa3b4a767c938.png

使用蓝图接口:采用这种面向对象的编程思想,可以减轻蓝图间的依赖关系,方便其他人调用该蓝图的功能接口。

652472671ec3dbefb14c070132c33bea.png

对于蓝图Actor,可以根据实际的蓝图功能,将某些蓝图功能划分到蓝图组件中。

9a03432ce4fc29a0f3098a3e6a4a675d.png

蓝图函数分类、变量分类

避免在蓝图中使用大函数(一个函数包含太多蓝图结点),而是将大函数分割成多个小函数。为每个函数设置“Category”,对函数进行分类。

dbcff63500cb66b8f35f1ec9daf2be40.png

建立具有层级结构的蓝图分类。功能性函数和辅助功能的函数分开。

蓝图函数的主要分类为:

  • Private:只有本蓝图能使用的函数;子类蓝图不能重载(但可以调用);其他蓝图不能调用。
  • Public:本蓝图可以使用;子类蓝图可以重载或调用;其他蓝图不能调用。
  • Interfaces:本蓝图可以使用;子类蓝图可以重载或调用;其他蓝图可以调用。

如下面的“Add(CustomMoveingPlatform)”函数所示。将其分类为“Public”,用于表示该函数主要用于子类蓝图的重载。

a0d60782ffb35cf43a555313b05ad3c1.png

如下面的“BeginPlay”函数所示。该函数主要用来让其他蓝图调用。因此可以将其分类为“Interfaces”。其他人就只需要了解“Interfaces”类别的函数,就可以轻松的使用你所写的这个蓝图功能模块。

8b53458325448dd418290ed95ee3b6bb.png

蓝图的变量的类别可以分为:PublicPrivate。

  • Public:本蓝图可以使用;子类蓝图可以使用;其他蓝图可以使用;如果需要在蓝图实例的属性面板中配置该变量,则需要将该蓝图变量的右边眼睛点亮。
  • Private:本蓝图可以使用;子类蓝图可以使用。

Private变量下又分出Cache变量。Cache变量是在功能执行过程中,用来存储中间结果的变量。

b0f5364d899e3cd6846c693b9237561d.png

在蓝图函数内部,使用局部变量可以减轻蓝图函数的连线复杂态度。

局部变量的命名规则为“Local(Name)”。在局部变量名中,使用 “Local()”的形式标识出该变量是局部变量。

  • 将函数的参数保存为局部变量,在使用该参数时,可以减少连线长度和数量。
  • 将Pure函数输出的结果存储为局部变量,可以减少对Pure函数的调用次数(尤其是在多次调用Pure函数对性能影响很大的情况下)。
  • 将函数返回节点需要的返回值存储为局部变量,可以减少连线长度和布局复杂度。

cd376e9ffb6518952bf165364244537f.png

习惯性使用“Sequence”节点

当你思考这个蓝图函数怎样开始时,首先考虑添加一个“Sequence”蓝图函数节点。使用该节点,可以将蓝图函数的串行布局变为并行布局(但是函数执行却是从上而下的串行的)。

6f037e2755f962e363ef680ceec7f398.png

使用Collapse将大函数变为小函数

为了保持单个蓝图函数的简单性,可以将复制的函数划分为:多个子函数、多个蓝图Nodes、多个蓝图宏。

b14112fa72bee134c6a0f1d367102420.png

添加注释

在你觉得需要注释的地方添加合适的注释,并用标号、颜色、字号加以标识。

8fc256c633f8ee31869bf66e4a694469.png

函数的命名与变量的命名

函数和变量的命名要直接明了。可以使用“()”或“_”对名称的结构进行组织。如“Get(Config(MovingPlatformMesh)) ”。给变量添加具有描述性的注释(Tooltip)。

a240bfc8cab5f52b6493c0cdcd8f2662.png

给函数添加用于阐释函数功能和注意事项的描述(Description)。

8c43d45563c26fccfa8e9a392377d48e.png

事件

减少“EventGraph”中的代码复杂性。

484e64c55e52dd5f1a95cb700fef9bd4.png

可以创建多个“EventGraph”,为“EventGraph”设置合适的名称,命名规则为“EventGraph(Name)”。

b2c1f04a288da950343caf6227d9714a.png

可以在“EventGraph”中创建多个自定义事件(CustomEvent)。然后将代码封装到另外的函数中。为了方便其他蓝图可以绑定本蓝图的事件,可以为本蓝图添加“EventDispatcher”。

命名规则为:

  • CustomEvent的命名规则:“CE(Name) ”
  • 处理事件代码的内部函数的命名规则:“Event(Name) ”
  • 事件分发器的命名规则:“EventDispatcher(Name) ”

aba29317ced78be8cb248524de357a05.png

排版布局

建议不要使用UE4引擎没有默认启用的第三方插件来进行排版布局。因为会增加蓝图对其他第三方插件的依赖性,可能会导致其他人使用你的蓝图时,出现布局混乱的情况。

可以使用UE4提供的蓝图排版布局功能,如下所示。可以在编辑器属性面板中,为排版布局功能设置个性化的快捷键。

9985c60bd3fccc09238ded51b636f5a1.png

结构体类型的变量

为了方便其他地方(如在场景中选中某个蓝图Actor,在属性面板中配置该Actor的属性)配置该蓝图的属性,并且该蓝图中需要配置的属性较多,可以将这些属性封装到蓝图结构体中。然后,在蓝图中创建一个蓝图结构体类型的属性变量。

df41cae5e5ffd5b1c2000b1583684384.png

蓝图结构体类型的属性,可以使蓝图属性的配置过程更加清晰明了,具有层级感。

82bec877b3d890d9b3f0f65eb1b1e483.png

使用Pure函数

将简单功能的函数声明为“Pure”函数。可以在调用该函数时降低连线复杂度。

69458d15adbb84ccf4cf5e09742bcc94.png

但是注意:避免使用“Pure”函数实现复杂功能逻辑;避免使用“Pure”函数封装对性能影响较大的代码。如下图所示,“Get(TransformAtDistanceAlongSpline)”函数是一个“Pure”函数,在下面的情况下,该函数会被调用执行3次。

19339098beb24d414f714c604cd5dc07.png

性能

下面的情况,建议使用C++对代码进行封装,然后在蓝图中调用C++封装好的蓝图节点,而不只使用蓝图:

  • 对性能影响较大的代码
  • 较复杂的功能逻辑
  • 蓝图无法实现的功能逻辑

将蓝图的“Nativize”选项勾选上,打包时会将该蓝图转换为本地代码(C++),对运行性能也许有所提升。

9862d134122b8f550ee6afc092bf94a1.png

辅助工具

查找引用

为了便于快速查找哪些地方使用了某个函数或变量,可以使用下面的“Find References”功能。

a81cb8509d9dea215f3463ebe71c2990.png

也可以在其他蓝图中,查找函数或变量。

2fbec02c9114cdc13d05126c75c9f5e3.png

使用内部跳转

使用下面的内部跳转功能,可以快速定位到某个蓝图节点位置。

d8c4de4eea1180add73685bcd6db09f6.png

调试

运行时,可以使用下面的“Debug”或“Blueprint Debugger”调试工具,调试蓝图代码。

4ca5f96b81a647e007dd3aa8f74cfb9d.png

b79a244c3e8da1883c7cb15a00408afd.png

-----------------------------------------------------------------------------------------------

更新列表:

  1. YeHaike(2019-09-19):添加《第6期(1):UE4蓝图规范-V1.0(BPSpec-V1.0)》;

-----------------------------------------------------------------------------------------------

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/133431?site
推荐阅读
相关标签
  

闽ICP备14008679号