首页 > 其他分享 >UE4利用委托实现观察者模式

UE4利用委托实现观察者模式

时间:2024-08-15 17:38:35浏览次数:4  
标签:委托 object 观察者 模式 MainActor UI UE4 敌人

应用场景

当游戏运行过程中,当一个MainActor某个行为的发生会对其他多个object产生影响时可以采用观察者模式,这样可以避免MainActor与其他object发生强耦合关系。如果不采用观察者模式,可能的做法是将object加入到MainActor的行为方法中,如果有多个object那么该方法将显得非常复杂。

观察者模式

使用观察者模式,使得观察者(object)和主题(mainactor)之间解耦,使得主题只需要处理自己的逻辑,然后object的反应也只需要在Object内部实现

实现

目标:UI显示当前Level中敌人个数,然后随着敌人的死亡,UI更新
方法:利用委托

MainActor -- 敌人类

在敌人的类中声明一个委托,然后在敌人死亡时进行广播。开始通知其他object执行逻辑

//.h
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnDeath);

FOnDeath OnDeath;

//.cpp
void AXActor::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpilse, const FHitResult& Hit)
{
	OnDeath.Broadcast();
	Destroy();
}

Object -- UI界面

标签:委托,object,观察者,模式,MainActor,UI,UE4,敌人
From: https://www.cnblogs.com/XTG111/p/18360368

相关文章

  • 事件和委托的区别
    在C#中,事件(Event)和委托(Delegate)是紧密相关但具有不同含义的概念。以下是它们的主要区别:委托(Delegate):委托是一种类型,它表示一个方法的签名(即方法的参数列表和返回类型)。委托可以持有对一个或多个方法的引用,并且可以像普通方法一样被调用。委托是多播的,意味着一个委托......
  • 【软件设计模式】 观察者模式详解
    观察者模式观察者模式是一种行为设计模式,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式特别适合于实现分布式系统中的事件处理系统,以及在需要在应用中实现广播通信时使用。组成发布者(Subject)会......
  • 掌握JavaScript中的观察者模式:构建响应式编程的基石
    标题:掌握JavaScript中的观察者模式:构建响应式编程的基石在软件开发中,设计模式是解决特定问题的模板。其中,观察者模式是一种非常重要的设计模式,它允许多个对象监听另一个对象的状态变化,并在该对象状态变化时得到通知。这种模式在JavaScript中尤为有用,尤其是在构建响应式应用......
  • Observer(观察者)
    1.意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。2.动机在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这......
  • JavaScript 中的闭包和事件委托
    包(Closures)闭包是JavaScript中一个非常强大的特性,它允许函数访问其外部作用域中的变量,即使在该函数被调用时,外部作用域已经执行完毕。闭包可以帮助我们实现数据的私有化、封装和模块化,使代码更简洁、易读和可维护。闭包的定义简单来说,闭包是指有权访问另一个函数作......
  • [UnrealCircle]腾讯 罗谦 | UnLua-UE4下的Lua脚本插件
    传送门:[UnrealCircle]腾讯罗谦|UnLua-UE4下的Lua脚本插件_哔哩哔哩_bilibili参考PPT:UnrealCircle921北京PPT_免费高速下载|百度网盘-分享无限制一.UnLua基础1.1概念UnLua是一个脚本插件UnLua不是蓝图的替代,而是一种补充没有Asset预览不支持nativization......
  • springBoot中的观察者模式实现
    pringBoot中的观察者模式实现什么是观察者模式?假设你要打一局酣畅淋漓的游戏,那么你可能需要进行以下操作->1.解锁手机屏幕2.找到你要进行游戏的位置3.单机启动游戏现在我们将启动游戏设计为一个api接口控制器类->三个业务方法均为控制台打印日志访问接口-......
  • JavaScript 中的闭包和事件委托
    闭包(Closures)闭包是JavaScript中一个非常强大的特性,它允许函数访问其外部作用域中的变量,即使在该函数被调用时,外部作用域已经执行完毕。闭包可以帮助我们实现数据的私有化、封装和模块化,使代码更简洁、易读和可维护。闭包的定义简单来说,闭包是指有权访问另一个函数作用域......
  • UE4 Dash功能实现
    主要实现主要是两点一个是Dash的实现效果,一种是直接Dash到目的地,第二种则是在Dash过程中实现动画的播放显示第二点则是障碍物的检测,对Dash的一个阻挡效果的实现Dash实现效果为了实现Dash过程中的动画显示,可以利用时间轴组件实现Location的移动,从而避免直接对角色的Location的......
  • JavaScript 中的闭包和事件委托
    包(Closures)闭包是JavaScript中一个非常强大的特性,它允许函数访问其外部作用域中的变量,即使在该函数被调用时,外部作用域已经执行完毕。闭包可以帮助我们实现数据的私有化、封装和模块化,使代码更简洁、易读和可维护。闭包的定义简单来说,闭包是指有权访问另一个函数作用域中......