UE4 -----------关于多播的用法

**

UE4 中 多播的用法

**

一,目的

想象一个场景, 一个 King 和一堆 peasant(农民) 站在一起参加活动。 突然, king 死掉了, 周围的农民 吓得立即四散。

以上场景实现 用到了 多播的概念。

二,实现步骤

1,创建King 的类

King.h

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnKingDeathSignature, AKing*, DeadKing); //委托签名;


以上是一个 动态多播的声明,并且带有一个参数
FOnKingDeathSignature :可以理解为一个委托的对象。 这个只是一个对象,名字可以按照规则随便起,前提是首字母必须是F 。 比如: 你可以定义为 Fmydeltate, FTestDelegate; 都可以。

AKing*: 是参数的类型。 此处 我们直接将当前对象作为参数传递出去,我们采用 对象 指针的行驶。
DeadKing: 是AKing* 对应的变量的名字。是我们传递的参数起的 名字。

比如:
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FTestDynamicDelagate, float, Value);

这是别人定义的一个 动态多播的例子。 这个地方的 传递参数 是float 类型, 传递参数 命名为 : Value


UFUNCTION(BlueprintCallable, category = “king”)
void Die(); // 这个函数会被蓝图里面调用。 里面只有一个功能就是 进行广播

	UPROPERTY(BlueprintAssignable)                 // 蓝图ke动态委托为委托赋予事件, 就是在蓝图里面可以实现 bind event 
    FOnKingDeathSignature  OnKingDeath;         // 多播委托实例, 在  brocast  之后 调用该委托上的方法,    OnkingDeath 就委托对象的 实例化 之后对应的名字。就是 蓝图中 bind event  to  (OnKingDeath)


King.cpp

void AKing::Die()
{
OnKingDeath.Broadcast(this);

}

// 该事件,调用委托,进行广播。

2,创建Peasant的类
创建农民的类。

农民的类, 主要是创建一个逃跑的函数。

peasant.h 中

UFUNCTION(BlueprintCallable, Category = "Peasant")
	void Flee(AKing*  DeadKing);       // 该函数有一个传递参数, 代表的是 king 的对象。


peasant.cpp

void APeasant::Flee(AKing * DeadKing)
{
GEngine->AddOnScreenDebugMessage(-1, 2, FColor::Red, TEXT(“Go awaY”));
FVector FleeVector = GetActorLocation() - DeadKing->GetActorLocation(); // 注意向减的顺利, 这个代笔的是 从国王朝向农民。
FleeVector.Normalize();
FleeVector *= 500;
SetActorLocation(GetActorLocation() + FleeVector);
}
// 以上函数, 传递参数代表的是 将 king对象 传递过来。整体思路是: (1)农民的对象 首先大喊“快跑” (2)判断国王和当前农民之间的距离。 然后 让 沿着 和 国王相反的方向,向外跳出500cm 的距离。

以上可以看出 为什么传递参数要 使用 king 对象指针的原因。 实际上 很多情况,我们范围更喜欢直接传递一个特定的值 比如 :float 或者 Fstring 之类的。 不过 传递一个对象 对我来说,用的少,需要牢记。

3, 蓝图中进行演示

(1)使用peasant类, 创建 蓝图类 BP_Peasant 。 人为加一个 staticmesh 黑色的球。
在这里插入图片描述
这是农民(peasant) 中 实现 绑定委托的 过程。 绑定国王的死掉事件, 执行自己的逃跑事件。

(3)同理, 创建一个 king 的蓝图类。 人为加一个蓝色的立方体。蓝图里面不需要任何处理。

(4)在关卡蓝图中,做一个延时,进行一个事件触发。
在这里插入图片描述
延时5s 后, 国王执行 die 事件,事件会自动进行广播。

默认状态

在这里插入图片描述

国王挂掉,后 广播的状态
在这里插入图片描述

以上就是今天的一点小小的学习进度。 估计后续会在故障检测中 大量的用到此相关的功能,以此进行记录备份。(文章是在看完别人的文章后自己整理的, 若涉侵权,必须删)
这世上没有白走的路,每一步都算数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值