UE4 蓝图编程学习之路2----常规脚本编写之蓝图中的转换

蓝图中的转换

不同转换节点的示例和使用案例。

在 蓝图 中使用 Cast To 节点时,简单而言,就是在尝试检查发出转换的对象是否为被转换的特定对象。换言之,您创建了一个特殊的角色蓝图(如名为 MyCharacter),其中包含变量或其他自定义功能,并将其作为默认 Pawn 类(或所有玩家角色默认使用的角色蓝图)指定。

如需从另一个蓝图访问玩家角色的属性,可使用 Get Player Character 节点以常规方式(设置/获取其位置、旋转灯)对玩家角色产生影响,但无法访问已添加到 MyCharacter 蓝图的自定义功能,因为您获取的是玩家角色而非特定类型的角色。

使用 Get Player Character 节点,再使用 Cast To MyCharacter 节点(特殊的角色蓝图),即可确认玩家角色是否为 MyCharacter,以便访问该蓝图中所包含的变量、函数、事件或其他特殊功能。

在此页面中您可了解到转换的部分使用情况、查看 Cast To 节点的使用范例、了解关于目标蓝图转换的内容以及其他类型的转换。

范例使用情况

以下是几个 蓝图转换 使用范例:

  • 需要访问另一个蓝图的特殊版本。

    • 角色走进火焰中,导致体力值耗尽。

      • 投射到特殊的角色蓝图,以便访问并变更体力值。

    • 角色死亡,需要重新生成。

      • 投射到特殊的游戏模式蓝图,执行重新生成脚本。

  • 需要访问相同类的多个蓝图,并以相同方法进行修改。

    • 场景中拥有数盏灯,事件发生时需将它们开启或关闭。

      • 投射到灯蓝图并执行函数将灯关闭。

  • 需要访问一个特殊的子蓝图。

    • 存在基于一个动物蓝图(猫、狗、鸟)的数个蓝图,需要访问其中一个动物。

      • 投射到猫、狗和鸟,访问其相应的蓝图和特有功能。

设置一个 Cast To 范例

下例说明如何使用 Cast To 节点从一个蓝图中访问另一个蓝图。

在此示例中,关卡中包含火焰效果蓝图(它是Actor),我们希望让它与玩家使用的可操作角色蓝图通信。当玩家进入火焰时,我们希望向角色蓝图发送信号,通知它玩家已进入火焰,它们现在应该受到伤害。通过使用OverlapEvent的返回值,我们可以转换到角色蓝图并访问它里面的事件、函数或变量。

 

3_0a.png

  • 上面的火焰效果是 Blueprint_Effect_Fire 资源(初学者内容包中随附的)。

  • 我们向蓝图添加了 触发器(Trigger) 球体组件并将它的碰撞设置为 OverlapOnlyPawn。

使用蓝图转换,我们需要执行以下操作:

  1. 指定给 默认Pawn类(Default Pawn Class)(可操作角色)的角色蓝图是我们要访问的"目标蓝图(Target Blueprint)。

     

    3_0b.png

    你可以从 编辑(Edit) 菜单中的 项目设置(Project Settings) 下的 地图和模式(Maps & Modes) 部分中查看 默认Pawn类(Default Pawn Class)。

  2. 现在我们已经知道我们的目标是 MyCharacter 蓝图,可以在其中创建 布尔(Bool) 变量,声明玩家是否 着火了(Is on Fire)。

     

    3_0c.png

    在 Event Tick 上面输入一个 分支(Branch),如果为 True,我们向屏幕输出 应用伤害(Apply Damage)(与True相连接的是应用伤害脚本)。

  3. 在 Blueprint_Effect_Fire 蓝图中,我们为 触发器(Trigger) 添加两个事件:OnComponentBeginOverlap 和 OnComponentEndOverlap。

     

    3_1.png
  4. 添加好事件之后,我们从 其他Actor(Other Actor) 引脚拖出引线并在搜索字段中输入 Cast To My。

     

    3_2.png

    在此处我们可以确定/指定要触发事件的Actor(MyCharacter蓝图)并 转换到(Cast To) 它,以便我们能够在火焰蓝图中访问它。

  5. 选择 转换到MyCharacter(Cast To MyCharacter) 选项。

  6. 添加好节点之后,我们可以从 作为我的角色C(As My Character C) 引脚拖出引线并访问它里面的事件、变量、函数等(在本示例中为 Set Is on Fire)。

     

    3_3.png
  7. 然后,在 Blueprint_Effect_Fire 蓝图中,这两个事件将如下图中所示。

     

    3_4.png

    当与火焰重叠时,我们将 MyCharacter 蓝图中的 IsOnFire 变量设置为 True,当不与火焰重叠时,我们将该变量设置为 False。 在 MyCharacter 蓝图中,当 IsOnFire 设置为 True 时(借助火焰蓝图),我们向屏幕输出 应用伤害(Apply Damage)(如果你创建了生命值/伤害系统,可以在此处应用伤害并减小玩家的生命值)。

目标蓝图转换

在某些情况下,你也可以使用变量来 转换到(Cast To) 特定类型的蓝图来访问它。

 

CreateCasting.png

在上图的1部分中,我们创建了 保存游戏对象(Save Game Object) 并将它指定给 SaveGameObject 变量。然后我们使用该变量来 转换到(Cast To)MySaveGame 保存游戏蓝图(我们可以使用它来传递或检索高分、最短用时等保存游戏信息)。

在上图的2部分中,我们创建了 控件(Widget)蓝图 并将它指定给 UserWidget 变量。然后我们使用该变量来 转换到(Cast To) MyWidgetBlueprint 控件蓝图(我们可以使用它从控件蓝图(可以为要访问的HUD或其他UI元素)更新或检索信息)。

其他类型的转换

存在一些可用于 转换到(Cast To) 不同类别的 蓝图 的特殊函数。

 

OtherCasting.png

在上面的示例图中,我们给出了以下示例:

 

蓝图

说明

角色(Character)(1)

在此处使用了 获取玩家角色(Get Player Character) 节点,我们转换到的角色蓝图是 MyCharacter。

玩家控制器(PlayerController)(2)

在此处使用了 获取玩家控制器(Get Player Controller) 节点,我们转换到的玩家控制器蓝图是 MyController。

游戏模式(Game Mode)(3)

在此处使用了 获取游戏模式(Get Game Mode) 节点,我们转换到的游戏模式蓝图是 MyGame。

Pawn(4)

此处使用 获取受控Pawn(Get Controlled Pawn) 和 获取玩家控制器(Get Player Controller) 节点转换到 MyPawn Pawn蓝图。

HUD(5)

此处使用 获取HUD(Get HUD) 和 获取玩家控制器(Get Player Controller) 节点转换到 MyHUD HUD蓝图。

在上面的各个示例中,从 作为我的X(As My X)(X是蓝图类型)节点拖出引线之后,你将能够访问相应蓝图中的事件、变量、函数等。

另外需要注意的是,可以使用 获取玩家角色(Get Player Character) 和 获取玩家控制器(Get Player Controller) 节点中的 玩家索引(Player Index) 值来指定多玩家场景中的不同玩家。对于单人玩家场景,将这些值保留为0即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值