UE5 C++ 蓝图交互调用

 



目录

一、C++ 调用蓝图Actor的成员函数

二、蓝图重写C++函数


一、C++ 调用蓝图Actor的成员函数

//调用函数

TWeakObjectPtr<AGWAnalysisToolBase> _bpActor;
//方法1,外部设置字符串
FString param = TEXT("arg1");
FString cmdReset = TEXT("func1 ") + param ;
//函数名+" "+参数(只能是简单参数,如string,int32等,
//不能是枚举、结构体,函数名和参数使用空格隔开)
FOutputDeviceNull device;
_bpActor->CallFunctionByNameWithArguments(
    cmdReset, 
    device, 
    NULL, 
    true);
//方法2,直接调用
_bpActor->CallFunctionByNameWithArguments(
    TEXT("func2"), 
    device, 
    NULL, 
    true);




//修改变量值,
//示例为bool,所以使用FBoolProperty

for (TFieldIterator<FBoolProperty> boolProperty((_bpActor.Get())->GetClass()); boolProperty; ++boolProperty)
{
    if (boolProperty->GetName().Contains(TEXT("bVar1")))
    {
        boolProperty->SetPropertyValue_InContainer(_bpActor.Get(), true);
    }
}

二、蓝图重写C++函数

//重点
//1:需要被蓝图重写的函数需要使用BlueprintNativeEvent修饰
//2:这个函数还需要添加一个虚函数,XXXXXX+[_Implementation],用于子类的重写,
//为固定格式,亦或可以称为UE版本的虚函数吧

UFUNCTION(BlueprintNativeEvent, Category = "BP| fun1")
    bool fun1();
  virtual bool fun1_Implementation() { return false; };
UFUNCTION(BlueprintNativeEvent, Category = "BP| fun2")
    bool fun2();
  virtual bool fun2_Implementation() { return false; };

### UE5 C++ 交互教程示例 #### 动态多播委托的使用 为了实现事件广播机制,在 Unreal Engine 5 (UE5) 中可以利用 `DECLARE_DYNAMIC_MULTICAST_DELEGATE` 宏来声明动态多播委托。这种委托特别适用于需要在蓝图C++ 间建立通信的情景[^1]。 ```cpp // 声明一个多播委托 DECLARE_DYNAMIC_MULTICAST_DELEGATE(FMyMulticastDelegate); class AMyActor : public AActor { public: FMyMulticastDelegate MyEvent; void BroadcastEvent() { MyEvent.Broadcast(); } }; ``` 通过上述代码,可以在 C++ 类中定义一个名为 `MyEvent` 的多播委托,并提供了一个方法 `BroadcastEvent()` 来触发这个事件。这使得任何订阅此事件的对象都能接收到通知并作出相应反应。 #### 打印调试信息至控制台 当开发过程中遇到问题时,可以通过 `FString::Printf` 函数向控制台输出调试信息。这是基于标准库函数 printf 改造而来的方法之一,专为 UE 设计优化过[^2]。 ```cpp void PrintDebugInfo(const FString& Message) { UE_LOG(LogTemp, Log, TEXT("%s"), *Message); } ``` 这段简单的例子展示了如何自定义一个打印日志消息的功能,其中 `LogTemp` 表示临时的日志类别名称;而 `Log` 则指定了记录级别为一般性的日志条目。 #### 使用第三方库扩展功能 对于某些特定需求可能超出 UE 自身所提供的能力范围之外,则可通过引入外部依赖项即所谓的“插件”形式集成进来。具体操作步骤涉及创建一个新的类文件放置于指定路径下以便后续编译链接过程顺利进行[^3]。 ```cpp #include "ThirdPartyLib/Public/SomeClass.h" void UseExternalLibraryFunctionality() { SomeClass* ExternalObj = NewObject<SomeClass>(); // 调用来自第三方库的方法... } ``` 这里假设已经成功配置好了一款叫做 ThirdPartyLib 的附加组件之后就可以像上面那样实例化其内部公开接口进而调用了。 #### 应用材质资源 最后介绍有关处理材质方面的小技巧:如果想要改变场景内某个物体表面的颜色或其他视觉属性的话,那么就需要借助到 UMaterialInstanceConstant 这样的 API 接口了[^4]。 ```cpp UMaterialInstanceConstant* MaterialInst = Cast<UMaterialInstanceConstant>( StaticLoadObject(UMaterialInstanceConstant::StaticClass(), nullptr, TEXT("/Game/Materials/M_MyCustomMat"))); if (MaterialInst != nullptr && MeshComp != nullptr) { MeshComp->SetMaterial(0, MaterialInst); } ``` 以上就是几个关于 UE5C++ 结合使用的典型应用场景及其对应源码片段展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值