您当前的位置: 首页 >  游戏

开发游戏的老王

暂无认证

  • 3浏览

    0关注

    803博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

虚幻引擎图文笔记:用蓝图接口(Blueprint Interface)实现一个游戏事件的分发系统

开发游戏的老王 发布时间:2020-12-10 21:17:51 ,浏览量:3

文章目录
      • 前言
      • 使用过程范例
        • 1. 创建蓝图接口
        • 2. 定义接口函数
        • 3. 定义监听者类
        • 4. 发消息
      • 测试运行

前言

之前写过一篇《UE4基础:用蓝图构建出一个GameMode中的游戏事件通信系统》,当时老王想基于GameMode和传统继承的方式实现一个消息分发系统。这两天看了一些教程发现,之前的方法是挺笨的。实现蓝图间通信的标准办法应该是通过“蓝图接口”。学过C#和Java的同学对这种实现方法应该不陌生。

其实我是想实现一个和Godot一样,可以通过组来分发消息的系统,但是由于UE4的蓝图不能定义泛型函数,也不能使用不定类型参数,也不能用字符串调用函数,所以那种通用的事件分发系统是实现不了的。本例只是我的中多个事件分发系统的中的一个。它的作用是向当前游戏场景中的所有Actor通知一些Gameplay事件,比如:主角发了一个超级必杀,场景中的所有NPC(Actor)都要掉血等等。

网络上很多教程举的例子都是用蓝图通信实现一个“主角开个门儿”什么的,初学者总会疑惑“这个功能不用蓝图接口也能实现啊”。实际上蓝图接口的意义在于:1.可以一对多甚至多对多的消息广播,2.并且实现接收消息的对象和发送消息的对象解耦合(实际上就是观察者模式啦)。

使用过程范例 1. 创建蓝图接口

一个蓝图接口文件就对应C#中一个接口,里面可以定义多个函数。

本例中接口名字为:BI_GameEventListener 在这里插入图片描述

2. 定义接口函数

给接口添加一个名为"OnGameEventReceived"函数,并且定义一个String类型的参数。

在这里插入图片描述

3. 定义监听者类

Actor派生一个NPC类 ,并让其实现BI_GameEventListener

在这里插入图片描述 如果主角发了大招则NPC掉血

接口中的函数可以当作事件使用

在这里插入图片描述

摆了4个NPC到场景中

在这里插入图片描述

4. 发消息

这里是重点了:先通过Get All Actors with Interface方法获取场景中所有实现了BI_GameEventListenerActor,然后通过遍历的方式把消息发送给每个对象。 在这里插入图片描述

测试运行

主角发一个大招,4个NPC都会掉血。 在这里插入图片描述

关注
打赏
1656935939
查看更多评论
立即登录/注册

微信扫码登录

0.0388s