1、UFUNCTION()和 UPROPERTY ()宏相同,需提供使用其进行操作的相关信息,以便非程序员开发者可使用更多功能和访问权。 有三种选择可使用:
(1)BlueprintCallable 函数以C++编写,可从 蓝图图表 中调用,但只能通过编辑C++代码进行修改或重写。以此类方式标记的函数通常具备供非程序员使用而编写的功能,但是不应对其进行修改,否则修改将毫无意义。数学函数便是此类函数的经典范例。
(2)在C++ header (.h)文件中设置 BlueprintImplementableEvent 函数,但是函数的主体则在蓝图图表中完成编写,而非C++中。创建此类通常是为了使非程序员能够对无预期默认动作或标准行为的特殊情况创建自定义反应。在宇宙飞船游戏中,玩家飞船接触到能量升级时发生的事件便是这方面的范例。
(3)BlueprintNativeEvent 函数与 BlueprintCallable 和 BlueprintImplementableEvent 函数的组合类似。其具备用C++中编程的默认行为,但此类行为可通过在蓝图图表中重写,进行补充或替换。对此类代码编程时,C++代码固定使用命名末尾添加了_Implementation的虚函数,此为最为灵活的选项。
【注意】在第三种中,蓝图事件会彻底取代C++代码中的事件,例如,原函数会执行粒子爆炸效果,一旦使用BlueprintNativeEvent,原C++代码的内容(父类)将不会继续执行;但在蓝图中插入父类的执行节点,就可以在执行蓝图事件后,继续执行C++父类中函数的内容: First: 右击蓝图类的事件函数,选择 add to parent function(); --------将调用添加到父项函数(添加一个调用此函数父项的节点) Second: 插入到你需要执行的位置
总结 1 // (1) 把TimeToOver变成一个函数事件: // (2) 在Actor中,以此父类添加对应的蓝图类,然后就可以找到这个自定义的函式了。 // (3) 在蓝图中右击该事件,可以添加父类节点。
// .h 中 UPROPERTY(BlueprintNativeEvent) void TimeToOver(); virtual void TimeToOver_Implementation(); .cpp中: void AcountDown::TimeToOver_Implementation() { CountdownText->SetText(TEXT("Go")); }