浅谈UE4中的函数和事件

在UE4函数和事件到底有什么区别呢,这已经是一个老生常谈的问题,那么,这两者之间到底有什么实质性的区别呢?

前几天有人问我这个问题,我开了个小小的玩笑,函数的定义我们都是写在一个单独的页面里的,而多个事件的定义我们写在一个页面里。反问来了,这也算区别吗?这当然这也算区别了,因为事件的定义是可以多个事件共享一个页面,那么事件与事件之间的关系就会更加的紧密,而函数之间的关联我们就需要传递参数去进行。

言归正传,那么到底函数和事件有什么特别的区别会让我们在不同的地点使用呢?有一点需要我们记住,那就是在函数里我们可以有返回值,而在事件中是没有返回值的。所以当我们需要返回值的时候,我们应该使用函数。关于这个返回值还有几个有趣的地方,在UE4里函数的图标为一个小写的f,而事件的图标为一个箭头,如果我们在事件中去调用函数,若这个函数没有返回值,你会发现此时它的图标会是箭头,也就是说系统是把它作为一个事件来进行的,同样的,在子类重载父类函数的时候也是这样,如果父类的函数是没有返回值的,那么重载后就会被当做事件去进行。有人说这是UE4的BUG,当然是BUG还是UE4的特性,我们是不得而知的,不过如果我们想要一个没有返回值的函数被事件调用的时候作为函数的话,我们可以给它加个空的返回值,这样就不会被作为事件调用了。

接下来小编想聊一聊等待时间的节点,举个例子,也就是我们的Delay和Timeline节点,这些节点都只能在事件中去调用,而不能在函数中进行调用,如果想要在函数中进行等待时间的话,我们需要用别的办法去实现。

然后小编想再谈一个重要的概念,也就是函数和事件最本质的区别。函数的调用会立即执行并等待结果,而事件的调用只是触发。这句话是什么意思呢,小编举个例子,当我们在调用函数的时候,系统一定会等函数执行结束返回结果后,才会有后续动作,而事件的调用,只是触发了这个事件的开始,系统就继续往下执行了,用稍微专业一点的话来讲就是函数的执行都是在同一个线程,而事件的执行则是在多线程(如果有同学不懂线程的话可以自己先尝试百度去理解一下,这是在计算机中比较重要的一个概念)。

因为事件只是触发,其执行的先后顺序我们是不得而知的,所以我们应该优先的去使用函数,因为函数的调用顺序是有保证的。

猜你喜欢

转载自blog.csdn.net/RaAlGhul/article/details/80333993