Actor通信

介绍Actor通信的不同方法。

Choose your operating system:

Windows

macOS

Linux

本页面的内容

选择实现方法:

Blueprints

C++

蓝图和C++提供了多种供不同Actor通信和共享信息的方法。本页面概述各种可用的Actor通信方法,以及每种方法的要求和常见用例。

此外,你还可以通过文中链接查看各种Actor通信类型的快速入门指南,获取详细信息。

直接通信

直接Actor(Direct Actor)通信是关卡中各Actor间最常用的通信方法。

这种方法需要你引用目标Actor(target actor),以便当前Actor(working actor)获取目标Actor的信息。采用这类通信时,当前Actor和目标Actor之间是一对一的关系。

使用时机

如果你引用了关卡中的某个Actor,并且需要共享信息或触发该Actor的函数,则可以使用此通信方法。

示例

  • 在Actor上触发事件。

  • 从关卡中的Actor中获取信息。

类型转换

类型转换是一种常用的通信方法,方法是获取Actor的引用,并尝试将其转换为其他类型。如果转换成功,则可以通过 直接通信 来访问其信息和功能。

此方法要求引用关卡中的Actor,以便使用 Cast 节点来将它转换成特定的类。采用此通信方法时,当前Actor和目标Actor之间是一对一关系。

使用时机

如果你已经引用了某个Actor,并且希望在访问其信息之前检查该Actor是否属于某个类型,请使用此通信方法。

示例

  • 用一个体积覆盖住Pawn,然后将Pawn的引用类型转换为子类(例如Character类),访问其信息。

  • 将一个Actor的引用转换为一个通用的父类,然后访问其信息。

接口

接口会定义一组常用行为或功能,这些行为或功能可以由不同的Actor类实现。此通信方法简化了在不同Actor类上实现同类型函数的过程。

此方法要求每个Actor都实现接口,以便访问它们共有的函数。此外,你还需要拥有Actor的引用,以便通过引用来调用接口函数。采用这种通信方法时,当前Actor和目标Actor之间是一对一关系。

使用时机

当你希望为不同类型的Actor创建通用功能时,请使用此方法。

示例

  • 创建一个交互系统,其中,每个与玩家交互的Actor都会做出不同响应。例如,当玩家与门Actor交互时,门Actor会打开;而当玩家交互光源Actor时,光源Actor会点亮。

  • 将破坏应用至关卡中的不同Actor。每个Actor都会对发生的破坏做出不同的响应。例如,墙Actor在受到破坏时将会破裂,而门Actor在受到破坏时将会打开。

事件分发器

采用事件分发器时,当某个Actor触发事件后,所有其他监听该事件的Actor都会收到通知。

此方法要求在当前Actor上创建事件分发器(Event Dispatche),并将目标Actor绑定给这些分发器。此通信方法使用一对多关系,其中单个Actor负责触发多个监听Actor的事件分发器。

使用时机

如果想要让单个事件影响多个不同Actor,可以使用此通信方法。

示例

  • 在游戏中创建BossDied事件。当有敌人Boss死掉时,此事件将会触发,导致门Actor打开,HUD Actor会显示一条消息,且宝箱Actor打开。

  • 创建一个日夜循环,其中的DayStarted事件负责通知NPC开始每天的例行活动。

Actor通信参考表

通信类型

使用时机

要求

示例

直接通信

在与关卡中Actor的特定实例通信时。

需要引用关卡中的Actor。

在关卡中的特定Actor上触发事件。

类型转换

希望验证Actor是否属于特定类,以便访问其属性。

需要引用关卡中的Actor以类型转换到所需的Actor类。

访问属于同一父类的子Actor的特定功能。

接口

当你需要为不同Actor添加相同功能时。

需要引用关卡中的Actor,并且该Actor需要实现接口。

为不同类型的Actor添加交互行为。

事件分发器

通过一个Actor来触发到多个Actor的事件。

Actor需要订阅事件,以便对事件作出响应。

通知不同类型的Actor:某事件已经触发。

蓝图和C++提供了多种供不同Actor通信和共享信息的方法。本页面概述各种可用的Actor通信方法,以及每种方法的要求和常见用例。

此外,你还可以通过文中链接查看各种Actor通信类型的快速入门指南,获取详细信息。

直接通信

直接Actor(Direct Actor)通信是关卡中各Actor间最常用的通信方法。

这种方法需要你引用目标Actor(target actor),以便当前Actor(working actor)获取目标Actor的信息。采用这类通信时,当前Actor和目标Actor之间是一对一的关系。

使用时机

如果你引用了关卡中的某个Actor,并且需要共享信息或触发该Actor的函数,则可以使用此通信方法。

示例

  • 在Actor上触发事件。

  • 从关卡中的Actor中获取信息。

使用蓝图类进行类型转换

类型转换是一种常用的通信方法,方法是获取一个Actor类的蓝图的引用,并尝试将其转换为其他类型。如果转换成功,则可以通过 直接通信 来访问其信息和功能。

此方法要求引用关卡中的Actor,以便使用 Cast 节点来将它转换成特定的类。采用此通信方法时,当前Actor和目标Actor之间是一对一关系。

使用时机

如果你已经引用了某个Actor,并且希望在访问其信息之前检查该Actor是否属于某个类型,请使用此通信方法。

示例

  • 用AVolume覆盖住APawn,然后将Pawn的引用类型转换为子类(例如ACharacter),访问其信息。

  • 将一个Actor类的蓝图的引用转换为一个通用的父类,然后访问其信息。

接口

接口(UInterface)会定义一组常用行为或功能,这些行为或功能可以由不同的Actor类实现。此通信方法简化了在不同Actor类蓝图上实现同类型函数的过程。

此方法要求每个Actor都实现接口,以便访问它们共有的函数。此外,你还需要拥有Actor类蓝图的引用,以便通过引用来调用接口函数。采用这种通信方法时,当前Actor和目标Actor之间是一对一关系。

注:请参见 接口 了解详情。

使用时机

当你希望为不同类型的蓝图Actor创建通用功能时,请使用此方法。

示例

  • 创建一个交互系统,其中,每个与玩家交互的Actor都会做出不同响应。例如,当玩家与门Actor交互时,门Actor会打开;而当玩家交互光源Actor时,光源Actor会点亮。

  • 将破坏应用至关卡中的不同Actor。每个Actor类蓝图都会对发生的破坏做出不同响应。例如,墙Actor在受到破坏时会破裂,而门Actor在受到破坏时将会打开。

委托

委托能以一种类型安全的方式在Actor类蓝图中调用函数。委托可以动态绑定,以便某个Actor触发事件后,所有"监听"该事件的其他Actor会响应事件。

注意:如需更多文档,请参见 委托

使用时机

如果想要让单个事件影响多个不同的Actor类蓝图,可以使用此通信类型。

示例

  • 在游戏中创建BossDied事件。当有敌人Boss死掉时,此事件将会触发,导致门Actor打开,HUD Actor会显示一条消息,且宝箱Actor打开。

  • 创建一个日夜循环,其中的DayStarted事件负责通知NPC开始每天的例行活动。

使用蓝图类引用表进行通信

通信类型

使用时机

要求

示例

直接通信

在与关卡中Actor的特定实例通信时。

需要引用关卡中的Actor。

在关卡中的特定Actor上触发事件。

类型转换

希望验证Actor是否属于特定类,以便访问其属性。

需要引用关卡中的Actor以类型转换到所需的Actor类。

访问属于同一父类的子Actor的特定功能。

接口

当你需要为不同Actor添加相同功能时。

需要引用关卡中的Actor,并且该Actor需要实现接口。

为不同类型的Actor添加交互行为。

事件分发器

通过一个Actor来触发到多个Actor的事件。

Actor需要订阅事件,以便对事件作出响应。

通知不同类型的Actor:某事件已经触发。

快速入门指南

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消