类型转换通信方法的快速入门介绍。
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:某事件已经触发。 |