语法上的区别
执行引脚:
调用函数和发射事件只能有一个执行引脚,而宏在调用的时候可以有很多执行引脚进入或者输出。
返回值
事件被触发了在执行触发事件的逻辑之后,没有返回值,函数和宏有返回值
(所以当我们需要返回值的时候,我们应该使用函数。关于这个返回值还有几个有趣的地方,在UE4里函数的图标为一个小写的f,而事件的图标为一个箭头,如果我们在事件中去调用函数,若这个函数没有返回值,你会发现此时它的图标会是箭头,也就是说系统是把它作为一个事件来进行的,同样的,在子类重载父类函数的时候也是这样,如果父类的函数是没有返回值的,那么重载后就会被当做事件去进行。有人说这是UE4的BUG,当然是BUG还是UE4的特性,我们是不得而知的,不过如果我们想要一个没有返回值的函数被事件调用的时候作为函数的话,我们可以给它加个空的返回值,这样就不会被作为事件调用了。)
延迟节点
自定义事件可以通过添加一个系统自带的延迟节点,来延迟事件触发后的执行逻辑,而函数和宏不能添加这个延迟节点,函数的调用会立即执行并等待结果,而事件的调用只是触发。当我们在调用函数的时候,系统一定会等函数执行结束返回结果后,才会有后续动作,而事件的调用,只是触发了这个事件的开始,系统就继续往下执行了