郑州制作企业网站,个人网页设计作品模板代码怎么写,第一ppt课件免费下载官网,集艾设计公司官网一. 代理机制#xff0c;代理也叫做委托#xff0c;其作用就是提供一种消息机制。 发送方 #xff0c;接收方 分别叫做 触发点和执行点。就是软件中的观察者模式的原理。
创建一个C Actor作为练习
二.单播代理
创建一个C Actor MyDeligateActor作为练习
在MyDeligateAc…一. 代理机制代理也叫做委托其作用就是提供一种消息机制。 发送方 接收方 分别叫做 触发点和执行点。就是软件中的观察者模式的原理。
创建一个C Actor作为练习
二.单播代理
创建一个C Actor MyDeligateActor作为练习
在MyDeligateActor.h中不需要其他头文件UE自带的
1.类型的声明代理的名称参数类型个数在Actor外
//单播代理类型声明
DECLARE_DELEGATE(NoParamDelegate); //无参数代理
DECLARE_DELEGATE_OneParam(OneParamDelegate,FString); //单播代理 代理名称参数类型
DECLARE_DELEGATE_TwoParams(TwoParamDelegate,FString,int32); //带有两个参数 的单播代理 代理名称参数1类型参数2类型
DECLARE_DELEGATE_ThreeParams(ThreeParamDelegate,FString,int32,float); //带有三个参数 的单播代理 代理名称参数1类型参数2类型,参数3类型
DECLARE_DELEGATE_RetVal(FString,RevalDelegate); //带有返回参数的。返回参数类型代理名称
2.在Actor里声明对应类型的的单播代理变量
//声明单播代理变量 名称
NoParamDelegate NoParamDelegate;
OneParamDelegate OneParamDelegate;
TwoParamDelegate TwoParamDelegate;
ThreeParamDelegate ThreeParamDelegate;
RevalDelegate RevalDelegate;
3.声明代理用绑定的函数 void NoParamFunction();void OneParamFunction(FString str);void TwoParamFunction(FString str,int32 value);void ThreeParamFunction(FString str,int32 value,float value1);FString RevalParamFunction();
4.在CPP中 构造时对单播代理进行绑定 BindUObject(this,Function);
//代理绑定
NoParamDelegate.BindUObject(this,AMyDeligateActor::NoParamFunction);
OneParamDelegate.BindUObject(this, AMyDeligateActor::OneParamFunction);
TwoParamDelegate.BindUObject(this, AMyDeligateActor::TwoParamFunction);
ThreeParamDelegate.BindUObject(this, AMyDeligateActor::ThreeParamFunction);
RevalDelegate.BindUObject(this,AMyDeligateActor::RevalParamFunction);
5.在BeginPlay里执行 //代理执行 判断是否绑定 绑定后就执行NoParamDelegate.ExecuteIfBound();OneParamDelegate.ExecuteIfBound(OneParamDelegate);TwoParamDelegate.ExecuteIfBound(TwoParamDelegate,10);ThreeParamDelegate.ExecuteIfBound(ThreeParamDelegate,10, 5.0f);FString strValue RevalDelegate.Execute();
6.实现绑定的函数
void AMyDeligateActor::NoParamFunction()
{GEngine-AddOnScreenDebugMessage(-1,5.f,FColor::Red,TEXT(NoParamDelegate));
}void AMyDeligateActor::OneParamFunction(FString str)
{GEngine-AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT(%s), *str));
}void AMyDeligateActor::TwoParamFunction(FString str, int32 value)
{GEngine-AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT(%s %d), *str,value));
}void AMyDeligateActor::ThreeParamFunction(FString str, int32 value, float value1)
{GEngine-AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT(%s %d %f), *str, value,value1));
}FString AMyDeligateActor::RevalParamFunction()
{ FString str FString::Printf(TEXT(RevalParamDelegate));return str;
}7.生成BP蓝图后放入场景中。 二. 多播代理
1.多播代理的类型声明一个代理可绑定多个函数
//多播代理类型声明(多播代理可以绑定多个函数)
DECLARE_MULTICAST_DELEGATE_OneParam(OneParamMultiDelegate,FString);
2.在Actor里声明对应类型的的多播代理变量 //多播代理声明OneParamMultiDelegate OneParamMultiDelegate;
3.在Actor里声明多播代理绑定的函数 //多播代理绑定的函数UFUNCTION()void MultiDelegateFunction1(FString str);UFUNCTION()void MultiDelegateFunction2(FString str);UFUNCTION()void MultiDelegateFunction3(FString str);
4.CPP实现绑定的函数
void AMyDeligateActor::MultiDelegateFunction1(FString str)
{FString TmpStr str.Append(1); //组合一下GEngine-AddOnScreenDebugMessage(-1,5.0f,FColor::Red,FString::Printf(TEXT(%s),*TmpStr));
}void AMyDeligateActor::MultiDelegateFunction2(FString str)
{FString TmpStr str.Append(2);GEngine-AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::Printf(TEXT(%s), *TmpStr));
}void AMyDeligateActor::MultiDelegateFunction3(FString str)
{FString TmpStr str.Append(3);GEngine-AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::Printf(TEXT(%s), *TmpStr));
}
5.在构造函数里绑定AddUObject(this,Function); //多播代理绑定 可绑定多个函数OneParamMultiDelegate.AddUObject(this,AMyDeligateActor::MultiDelegateFunction1);OneParamMultiDelegate.AddUObject(this, AMyDeligateActor::MultiDelegateFunction2);OneParamMultiDelegate.AddUObject(this, AMyDeligateActor::MultiDelegateFunction3);
6.在BeginPlay里执行多播代理。 //执行多播代理OneParamMultiDelegate.Broadcast(OneParamMultiDelegate);
7.效果如下 三.动态多播代理
1.动态多播代理类型声明,区别在于可以暴露给蓝图在蓝图中进行事件的绑定。
//DECLARE_MULTICAST_One
//动态多播代理类型声明,区别在于可以暴露给蓝图在蓝图中进行事件的绑定.
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDynamicMultiDelegate, FString, param);
2.动态多播代理变量的反射声明 //动态多播代理,UPROPERTY(BlueprintAssignable)FDynamicMultiDelegate DynamicMultiDelegate;
3.编译后在蓝图里绑定。 4.执行动态多播代理 //执行动态多播代理绑定在我们的蓝图中进行实现DynamicMultiDelegate.Broadcast(DynamicMultiDelegate);
5.效果如下