蓝图通信

121 阅读3分钟

蓝图通信

    蓝图通信指的是蓝图间的信息传递、数据分享、数据引用等一系列数据交互的操作。
    

蓝图通信的类型

    关卡蓝图或蓝图类各自在蓝图之内的信息交互;
    关卡蓝图和蓝图类与场景内部的对象的通信;
    蓝图类之间的信息交互;
    通过中间变量进行信息的交互;
    蓝图类与关卡蓝图之间的信息交互;
    遍历搜索
    引用蓝图类
     

1.关卡蓝图或蓝图类各自在蓝图之内的信息交互

    蓝图内部的信息交互主要使用的是自定义事件节点----AddCustomEvent

image.png

2.关卡蓝图和蓝图类与场景内部对象的通信

2.1关卡蓝图与场景内部对象的通信

    视口中选择对象,可以在关卡蓝图中获取对象的引用,从而GetSet对象行为。

蓝图实例为:

image.png

2.2 蓝图类与场景内部对象的通信

    创建蓝图类,在蓝图类中添加变量,类型为StaticMeshActor,并将其变量设置为公有的。
    将创建的蓝图类放置在视口中,在细节面板,可以使用吸管为变量代理场景中的对象。只能拾取静态模型。
    如果要代理场景中的所有对象,需要将变量设置为Actor
    在事件图表中可以操作代理的场景对象。

通信蓝图为:

image.png

3.蓝图类之间的信息交互

3.1 创建蓝图类BP_TextA,并添加组件TextRender。

3.2创建蓝图类BP_TextB,并添加组件TextRender,添加变量Text,类型设置为Text

3.3 BP_TextA访问BP_TextB的变量Text和组件TextRender

3.4 在蓝图类BP_TextA中添加变量,类型设置为BP_TextB,并将其设置为public

3.5 将两个蓝图放置在关卡中,可以在BP_TextA的细节面板中,利用吸管,设置代理BP_TetxB

3.6 蓝图实现类之间的信息交互

image.png

4.通过中间变量进行信息的交互

获取第三人称对游戏场景的操纵权限的设置如下图: image.png

蓝图类之间的信息交互是有一定局限性的,它需要通信的蓝图类都在关卡中,才会进行通信。

编辑ThirdPersonCharacter蓝图,添加变量BP_TextA和BP_TextB,设置其为public
GetPlayerPawn可以获取场景中的第一个玩家
利用类型转换节点CastToThirdPersonCharacter,获取场景中的第三人称。
该节点有转换成功和转换失败两种情况。
注意:通过中间变量一般用于两个蓝图类不在同一个游戏场景的情况。

蓝图实例如下:

image.png

不足之处,每次使用BPTextB都需要进行类型转换。这时可以将转换后的BP_TextB转换为变量。

image.png

5.蓝图类与关卡蓝图之间的通信

5.1 通过蓝图类控制关卡蓝图自定义事件的方法。

在关卡蓝图中利用AddCustomEvent定义自定义事件。
在蓝图类中利用Execute Console Command,在该节点中的Command,输入ce 时间名。

蓝图类:

image.png

关卡蓝图类:

image.png

6.遍历搜索 引用蓝图类

应用场景:一个蓝图类可能会被复制很多次,且玩家操纵的角色要与每个蓝图类产生不同的信息交互。

在玩家蓝图编辑器中,GetAllActorsOfClass 获取场景中的所有蓝图类。

image.png