蓝图的介绍

如果蓝图在每个 tick 都执行大量操作和复杂的数学计算,则需要考虑使用本地 C++ 代码。蓝图最适合创建事件驱动的功能,如处理伤害接收、控制,或其他非每帧调用的操作

蓝图类是在项目中实现可重用行为的最佳方式。创建蓝图类后,可将其添加到任意关卡,还可随意添加任意数量的副本到关卡中,无需四处复制脚本。

公开函数到蓝图:UFUNCTION宏

1. BlueprintCallable 蓝图可调用,C++函数可以在蓝图中被调用

UFUNCTION(BlueprintCallable,Category = "Test|BlueprintCallable",meta = (DisplayName = "整型转字符串"))
    //有一个返回值的函数
  FString IntTofsTing(int32 input)
    {
        return FString::FromInt(input);
    }

2.BlueprintPure(蓝图纯函数) ,纯函数必须有返回值

UFUNCTION(BlueprintPure,Category = "Test|BlueprintPure",meta = (DisplayName = "有多个返回值的纯函数"))
    void IntTofsTing(int32 input,FString &output1,int32 &output2,bool &output3)
    {
        output1 = FString::FromInt(input);
        output2 = input + 5;
        output3 = true;
    } 

(没输入输出引脚的)

3.BlueprintImplementableEvent(蓝图可实现事件)

C++中声明且调用函数(不定义函数),蓝图中定义函数(Functions中进行override),红色无流入引脚的形式存在

//声明函数
    UFUNCTION(BlueprintImplementableEvent,Category = "Test|BlueprintImplementableEvent",meta = (DisplayName = "C++负责声明,蓝图负责定义"))
    void CppDefinitionFun(); 

有无返回值的区别:无返回值以事件形式存在,有返回值以函数形式存在

4.BlueprintNativeEvent(蓝图原生事件) 

a.C++中声明函数,C++和蓝图中都可以定义函数(C++必须实现),如果蓝图不定义,会执行C++中的定义,如果蓝图和C++都定义,蓝图则会覆盖C++定义,只执行蓝图定义.

(2)C++函数声明,需要额外声明一个名为:函数名+_Implementation的返回值和参数列表都一致的函数.

(3)BlueprintNativeEvent需要配合BlueprintCallable一起使用,否则蓝图中不可调用

(4)与BlueprintImplementableEvent 一样,有返回值的在蓝图以函数形式存在,无返回值的在蓝图中以事件形式存在. 

//声明函数,无返回值
    UFUNCTION(BlueprintNativeEvent,BlueprintCallable = "Test|BlueprintNativeEvent",meta = (DisplayName = "C++负责声明调用,蓝图与C++都可实现"))
    void CppDefinitionFun();

//函数的定义
void ACpp_Actor::CppDefinitionFun_Implementation()
{
    FString str = TEXT("我爱中国");
    GEngine->AddOnScreenDebugMessage(-1,10.f,FColor::Black,FString::Printf(TEXT("屏幕上打印出来的字是:%s"),*str));

5.总结

BlueprintCallable和BlueprintPure在c++中声明和定义,c++和蓝图可以调用。只是有无引脚的区别

BlueprintImplementableEvent在c++声明调用,蓝图中定义。

BlueprintNativeEvent 在c++中声明定义调用,蓝图中定义可覆盖c++定义

引用:

六、蓝图访问C++函数/事件(UFUNCTION) - 哔哩哔哩

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值