您需要 登录 才可以下载或查看,没有账号?注册
x
整理蓝图这件事对于粗线条的人来说可能不重要,只要节点连对了,位置什么的不重要,这倒是真的。不过当你回头检查的时候可能会找不到你的程序逻辑,可能同样的节点机械地连上几十遍,蓝图节点总是臃肿地摆不下节点,然后把节点抻来抻去,蓝图看起来更乱。
其实,灵活运用一些小技巧就可以让你的蓝图看起来清爽许多。当然,需要你养成良好的蓝图编写习惯,而不是良好的蓝图整理习惯。下面说一下这几个技巧。
1、Variable(变量) 添加变量是一件十分简单的事情,大多数我们添加的变量总是能在默认的变量类型列表中找到。变量是控制程序逻辑的一部分,用来存储程序运行时所需的各种计算所需的参数。有些参数我们可以在程序运行时随时「Get」到,所以不必使用变量来储存它们。不过有些参数在程序中一般是不变的,并且每次get它都比较麻烦,对于这样的变量我们可以使用参数来存储它们。
比如,获得玩家角色这样的事情,我们需要「Get Player Character」->「Cast To MyCharacter」两步,尤其是第二部,需要调用程序流程,这样因为想要调用玩家信息就要在原逻辑流程中加入一个与逻辑无关的流程,而且当多次调用玩家角色的时候只Cast一次连出的线太长太远,多次Cast又打乱节奏。这时我们就可以考虑在「Event Begin Play」的时候Cast一次,得到MyCharacter,然后把它Set到一个变量「Me」中,以后凡是调用玩家角色的时候,只需调用变量「Me」即可,不论从逻辑流程还是蓝图整体布局来看都清爽了不少。
2、Custom Event(自定义事件) 第二个介绍Custom Event是因为它和Variable有相似之处。初学Unreal的朋友可能知道Custom Event,但是并不回去使用他们。因为好像并没有什么事情逼得我们非要用这个功能不可,所有的功能都可以用引擎自带的触发事件加上强大的Tick事件来解决。
确实如此,不过连过稍微复杂一些功能的朋友可能会有这样的感觉,当我们需要“监听”的事件越来越多,我们需要把越来越多的「Branch」、「Sequence」节点放在Tick上,来保证“一怎样就怎样,只有当怎样才怎样”的程序逻辑可以执行下去。「Branch」节点限制了Tick的通路,要想让false的情况也产生作用,需要将false的出口绕过true后面的一大串操作连到后面一个「Branch」上,蓝图瞬间混乱,「Sequence」节点能够缓和一些这种情况,可是“盖楼”多了一样会比较乱。
这时候我们就可以考虑「Custom Event」了,首先我们将要“监听”的事件定义成一个Event,假设我们要做一个计时的功能,我们就可以新建一个「Custom Event」名字叫「Timer」,然后我们在Tick时间中不断的Call这个「Timer」事件,在事件后面我们没Call一次,就把当前时间加上delta time。并且我们可以加入判断,当时间超过Life Time的时候Destroy Actor,在custom event里加判断的好处是,不论「Branch」判断是否为真,只会影响custom event自己内部的逻辑是否往下执行,而不会影响Tick事件中逻辑的继续进行。将不同的监听事件写入不同的custom event中去管理,也更容易排版,一个事件就像一个代码块,而Tick事件负责总体流程(Call各位Custom Event去执行,而各个Event到底是否执行,执行什么,则是他们自己的事)。
3、Function & Macro(函数、宏) 大家可能对Function比较熟悉,而Macro用的人比较少,其实用过这两个的人会就知道他们的区别于联系。从本质上讲,他们都是为了使我们不必重复地一遍一遍地连相同的节点而设计的。
举个例子,如果我们需要实时判断玩家和场景中多个物体之间的距离,那么就需要将判断距离这个功能重复连好多遍,节点量大,连起来麻烦,以后需要修改的话也是想想就头疼。那么我们就可以将这种“求玩家和某物体距离”这样的功能设置为一个函数,每次只要调用这个函数,在输入端指明玩家是谁和要判断的物体是什么即可,如果以后需要修改判断逻辑,只需要修改函数即可。这样就方便了不少。
那么Function 和 Macro的区别是什么呢?他们的区别有两点,第一点,Function内可以连接程序流程,并且Function必须被执行才能调用;Macro内只能连不涉及程序流程的节点,Macro不必也不可以被执行调用,可以理解为计算的打包。比如我们的功能里需要做Set操作,那么我们只能用Function,如果我们的功能中只有Get及加减乘除运算操作,不需要Set,那么我们既可以用Function,也可以用Macro,如果我们想要考虑尽量减少流程操作的话可以考虑尽量使用Macro。不过,Function和Macro区别的第二点需要注意,Function可以被该蓝图以外的蓝图调用,而Macro只能在该蓝图内使用,这是因为Function是可执行对象而Macro并不是可执行对象。Function在被调用的时候会在定义它的蓝图中被执行,而Macro只是把代码纯粹地复制粘贴了一遍,当调用Macro的时候只是相当于将Macro里的节点复制出来使用,所以如果在其他蓝图中使用的话就相当于直接在其他蓝图中使用,这样就一定会出现不可预知的问题,为了避免这种情况发生,Unreal不允许蓝图之间互相调用Macro,而只可以调用Function。
以上就是关于蓝图整理的三个小技巧,个人认为蓝图的整洁有利于逻辑梳理,所以分享出来,希望可以帮到和我有同样想法的朋友。
|