ue4动态代理

  • c++ and bp 混合使用动态代理
  • 及各种bind

c++ and bp 混合使用动态代理

  1. c++中定义一个动态代理

    DECLARE_DELEGATE_OneParam(FMyDelegate1, int32);
    //c++和bp混合使用的代理必须是这种宏,而不是上面那种
    DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMyDelegate2, int32, abc);
    
    UCLASS()
    class AMyChar : public ACharacter
    {
        GENERATED_BODY()
    public:
        //必须声明为BlueprintAssignable,只给蓝图绑定这个代理
        UPROPERTY(BlueprintAssignable, Category = "MyChar")
            FMyDelegate2 OnMyDelegate2;
    };
  2. 在蓝图中绑定这个代理
    这里写图片描述

  3. 起个LibFunc静态方法测试,在c++广播这个代理

    void UMyBpFuncLib::TestBpDelegate(AMyChar * _myChar, int32 _num)
    {
        _myChar->OnMyDelegate2.Broadcast(_num);
    }
  4. 蓝图中调用这个测试方法
    这里写图片描述

  5. 结果
    这里写图片描述


代理的各种bind

//declare
DECLARE_DELEGATE_OneParam(FMyDlg1, int32); //为multi服务

//共享指针中的方法
class Test : public TShareFromThis<Test>
{ 
public:
    void Output(int32 num) {
        UE_LOG(LogMyTest, Warning, TEXT("--- TSharePtr, num:%d"), num);
    }
};

//静态方法
static void gOutput(int32 num) {
    UE_LOG(LogMyTest, Warning, TEXT("--- static method, num:%d"), num);
}

//Lambda表达式
auto lambdaFunc [&](int32 num)->void {
    UE_LOG(LogMyTest, Warning, TEXT("--- lambdaFunc, num:%d"), num);
}

//Uobject的方法
void AMytest::Log(int32 num) {
    UE_LOG(LogMyTest, Warning, TEXT("--- AMytest::Log, num:%d"), num);
}

//蓝图中的方法
//贴到这段代码的下面了

FMyDlg1 mDlg1;
FMyDlg1 mDlg2;
FMyDlg1 mDlg3;
FMyDlg1 mDlg4;
FMyDlg1 mDlg5;
TSharePtr<Test> mTestPtr = TSharePtr<Test>(new Test); //new一个共享指针


//bind
mDlg1.BindUObject(this, &AMytest::Log); //this只能是继承自UObject的类
mDlg2.BindSP(mTestPtr.Get(), &Test::Output) //继承自TShareFromThis<XXX>的类
mDlg3.BindStatic(&gOutput); //静态方法
mDlg4.BindLambda(lambdaFunc); //lambda表达式
mDlg5.BindUFunction(this, "testDelegateUFunctionBp"); //this的蓝图中的方法

//execut
mDlg1.Execute(111);
bool b2 = mDlg2.ExecuteIfBound(222);
bool b3 = mDlg3.ExecuteIfBound(222);
bool b4 = mDlg4.ExecuteIfBound(222);
bool b5 = mDlg5.ExecuteIfBound(222);
  • 蓝图中的方法
    这里写图片描述

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝶泳奈何桥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值