如何基于 Blueprint 在游戏中创建实时音视频功能

近日,Epic 公布了他们为次时代游戏准备的 Unreal 5 游戏引擎,以及一份效果惊艳的 Demo。据称,游戏中的每个资源有一百万个绘制三角面,每一帧有超过十亿个绘制三角面。也就是说,开发者构建的游戏场景,能获得电影特效场景般的视觉体验。

事实上,声网也有许多采用 Unreal 的开发者。为了能让开发者可以在游戏中快速实现实时音视频对话,声网 Agora Unreal SDK Beta 版也已上线。

由于 Unreal 为开发者提供了两种开发方式,一种是 Blueprint,即可视化编程,另一种是基于 C++开发。所以 Agora Unreal SDK 也提供了两个版本—— Blueprint 和 C++,两个版本均已上传至 Agora Community 的 Github :

Blueprint版本:https://github.com/AgoraIO-Community/Agora-Unreal-SDK-Blueprint

C++版本:https://github.com/AgoraIO-Community/Agora-Unreal-SDK-CPP

大家可以在 Github 中 fork,并集成到 Unreal 项目中。如果遇到问题可在 Github 提 issue ,或在 RTC 开发者社区发帖 的反馈。

可以实现什么场景呢?

许多 3A 游戏大作都是基于 Unreal 引擎开发的,比如堡垒之夜、战争机器、火箭联盟等。在一些游戏中,队友之间需要通过语音交流配合。而这种游戏中的实时语音对话,就可以通过 Agora Unreal SDK 来快速实现。

在类似于吃鸡的游戏中,玩家不仅要能听到队友的语音,还要能凭借声音来辨别队友所在的方位。声网Agora SDK 就支持该功能,它可以将玩家与其在声场中的位置和方向对应,来提供听声辨位的能力。

Agora SDK 优势

超低延时

游戏中的语音对话要求实时音视频技术的延时要小于400甚至300毫秒以内,玩家之间才能达到无障碍沟通的效果。声网提供的软件定义实时网SD-RTN™拥有超低延时特性,可做到全球端到端延时小于400ms,延时中位数76ms,处于行业领先水平。

抗弱网

不论是在 4G 或者 Wi-Fi 网络情况下,玩家随时会面临比较复杂的网络情况。而且,在弱网、非常高丢包情况下,要保证能进行良好的音视频互动。声网具备优秀的弱网传输和抗丢包算法,可以在 60% 的丢包环境下保障音视频流畅,70% 的网络丢包环境下保障语音的流畅。

易于集成

还有一点非常重要的,就是需要将实时音视频与游戏进行简单、快速的结合。声网的SDK非常简单易用,一个音视频通话或直播应用,只需要几行代码,30分钟就能轻松搞定。

那么如何实现呢?我们在本文先来讲讲如何在 Unreal 中用 Blueprint 快速实现。稍后会分享基于 C++的实现步骤。

Agora Unreal SDK - Blueprint 实现

开发前的准备

  • Unreal 4.23 以上版本
  • Visual Studio 或 Xcode(版本根据 Unreal 配置要求而定)
  • 运行 Windows 7 以上系统的 PC 或 一台 Mac
  • Agora 注册账号一枚(免费注册,见官网 Agora.io)
  • 如果你的企业网络存在防火墙,请在声网文档中心搜索「应用企业防火墙限制」,进行配置。

新建项目

首先我们要创建一个 Unreal 项目,然后将 Agora SDK 集成到项目中。

现在,让我们先从草图开始,创建一个项目。如果已经创建了项目,那么可以直接跳过这一步。

1.打开 Unreal Engine Editor,选择 New project。

2.在新项目面板上,在项目类型中选择 C++,然后给项目起个名,选择项目保存路径,完成创建。

3.确保在[your_project]/Source/[project_name]/[project_name].Build.cs文件的PrivateDependencyModuleNames一行,去掉注释。Unreal 默认是将它注释掉的,这会导致在编译的时候报错。

// Uncomment if you are using Slate UI
PrivateDependencyModuleNames.AddRange(new string[]
 { "UMG", "Slate", "SlateCore" });

集成Agora SDK

接下来我们在项目中集成 Agora SDK

1.将 SDK 复制到这个路径下 [your_project]/Plugins

2.把插件依赖添加到:

[your_project]/Source/[project_name]/[project_name].Build.cs 文件

的私有依赖(Private Dependencies)部分

PrivateDependencyModuleNames.AddRange(new string[]
{ "AgoraPlugin", "AgoraBlueprintable" });

3.重启 Unreal

4.点击 Edit->Plugin,在分类中找到 Project->Other,确定插件已经生效

创建游戏实例

在项目的 Content 界面中,点击右键,选择 Blueprint Class

在All Classes中输入“Game Instance”并选择 Game Instance

把新的 Game Instance 命名为“AgoraGameInstance_BP”

由于Game Instance会在其它类之前进行初始化,所以我们要先创建 AgoraGameIntance。双击进入 AgoraGameInstance_BP 的 Blueprint,在Blueprint的工作区域点击右键会显示出菜单,输入“Event Init”,并选择它。

拖拽出 Event Init,点击输出接口后,输入“Construct”,选择Construct Object from Class function。

在 Class 的下拉菜单中选择 Agora,然后将 Outer 的设定为从 Self 获取参数。

通过拖拽,将 Construct Agora 输出 Return Value 引脚设定为 Promote to variable。把新的变量名设定为“Agora”,点击“????”图标,把它设定为 public。

“Agora”的输出,我们找到并选定为“Initialize”

创建 Game Mode(游戏模式)

Game Mode 将被用于切换 widgets。就像创建 Game Instance 一样,在 Blueprint 中创建新的 Game Mode:

命名为“GameMode_BP”

创建 Widgets(控件)

在项目的 Content 中创建新的目录 Widgets_BP。在这个目录下添加两个 Widgets:右键点击目录内容,然后选择 User Interface -> Widget Blueprint:

将它们分别命名为“IntroductionWidget_BP”和“VideoCallWidget_BP”

Game Mode

回到 GameMode_BP,点击“+”添加两个 function,并分别命名为“SetInctoductionView”和“SetVideoCallView”。

添加两个变量,“IntroductionWidget_BP”和“VideoCallWidget_BP”,把他们的类型分别改为 Introduction Widget BP 和 Video Call Widget BP。

然后如下图所示来设置

Introduction Widget(介绍控件)

进入 InctoductionWidget_BP,创建控件的界面,就像图中所示的:

在EncriptionTypeComboBox中添加以下变量:

回到绘制模式中,找到 Event Construct 并执行,如图所示:

InctoductionWidget_BP 会从 AgoraGameInstance_BP 获得对象 Agora,在控件底部的 Text Block 中设定 Agora SDK 版本。回到设计界面,选择 Join 按钮,在右侧的 Event 中添加 On Clicked 事件

像图中一样,来设定事件执行逻辑:

Video Call Widgets(视频通话控件)

在 Demo 中找到 Content/ButtonTextures 目录(你不用打开这个项目,只需要在文件中找到它就行)。所有的按钮 texture 都保存在这里。在你项目的 content 中创建一个新的目录“ButtonTextures”,把这里所有的 texture 都拖拽放到里面。

进入 VideoCallLevel_BP,创建 widget 界面:

打开可视化视图,增加 isLocalAudioMuted、isLocalVideoMute 布尔变量,(Graph),增加 CurrentUserId 64 位整数变量。添加功能与执行逻辑如下图所示:

进入 Event Graph,然后按照以下步骤执行

创建新的 Level

进入 project Content,创建 Level 目录(如果之前没有创建)。右键单击目录,选择新 Level:

将 Level 重命名为“VideoCallLevel_BP”

选择这个 Leve,点击顶部的 Blueprint 图标,选择 Open Level Blueprint 选项:

如图中所示执行Event Begin Play

修改 World 与项目设置

进入 Window->World设置,把 GameMode 设为 GameMode_BP。

进入 Edit->Project设置,选择 Map&Modes,按照下图所示设定值。

好了,现在可以运行游戏了

下周我们将分享基于 Unreal C++ 与 Agora Unreal SDK 如何实现游戏中的实时音视频。

同时,我们还想邀请体验 Agora Unreal SDK Beta 版的开发者们填写一个有奖问卷,希望大家可以深度参与SDK 的功能规划。

总结

到此这篇关于Unreal 5 公布的同时Agora Unreal SDK 也已为你准备好了的文章就介绍到这了,更多相关Unreal 5 Agora Unreal SDK 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何基于 Blueprint 在游戏中创建实时音视频功能

    近日,Epic 公布了他们为次时代游戏准备的 Unreal 5 游戏引擎,以及一份效果惊艳的 Demo.据称,游戏中的每个资源有一百万个绘制三角面,每一帧有超过十亿个绘制三角面.也就是说,开发者构建的游戏场景,能获得电影特效场景般的视觉体验. 事实上,声网也有许多采用 Unreal 的开发者.为了能让开发者可以在游戏中快速实现实时音视频对话,声网 Agora Unreal SDK Beta 版也已上线. 由于 Unreal 为开发者提供了两种开发方式,一种是 Blueprint,即可视化编程,另

  • C++ 在 Unreal 中为游戏增加实时音视频互动的教程详解

    我们已经上线了 Agora Unreal SDK,提供了支持 Blueprint 和 C++ 的两个版本 SDK.我们分享了 如何基于 Blueprint 在游戏中创建实时音视频功能 .在本文中,我们来分享如何基于声网 Agora Unreal SDK C++版本,在游戏中实现实时音视频功能. 本篇教程较长,建议在 Web 浏览器端浏览,体验更好. 准备工作 需要的开发环境和需要准备的与 Blueprint 一样: Unreal 4.34 以上版本 Visual Studio 或 Xcode(版

  • 基于Docker结合Canal实现MySQL实时增量数据传输功能

    Canal的介绍 Canal的历史由来 在早期的时候,阿里巴巴公司因为杭州和美国两个地方的机房都部署了数据库实例,但因为跨机房同步数据的业务需求 ,便孕育而生出了Canal,主要是基于trigger(触发器)的方式获取增量变更.从2010年开始,阿里巴巴公司开始逐步尝试数据库日志解析,获取增量变更的数据进行同步,由此衍生出了增量订阅和消费业务. 当前的Canal支持的数据源端MySQL版本包括:5.1.x .5.5.x .5.6.x.5.7.x.8.0.x. Canal的应用场景 目前普遍基于日

  • Android基于腾讯云实时音视频仿微信视频通话最小化悬浮

    最近项目中有需要语音.视频通话需求,看到这个像环信.融云等SDK都有具体Demo实现,但咋的领导对腾讯情有独钟啊,IM要用腾讯云IM,不妙的是腾讯云IM并不包含有音视频通话都要自己实现,没办法深入了解腾讯云产品后,决定自己基于腾讯云实时音视频做去语音.视频通话功能.在这里把实现过程记录下为以后用到便于查阅,另一方面也给有需要的人提供一个思路,让大家少走弯路,有可能我的实现的方法不是最好,但是这或许是一个可行的方案,大家不喜勿喷.基于腾讯云实时音视频SDK 6.5.7272版本,腾讯DEMO下载地

  • python基于pygame实现响应游戏中事件的方法(附源码)

    本文实例讲述了python基于pygame实现响应游戏中事件的方法.分享给大家供大家参考,具体如下: 先看一下我做的demo效果: 当玩家按下键盘上的:上,下,左,右键的时候,后台会打印出玩家所按键的数字值,而图形会随之移动 这是客观上面存在的现象. 那么啥是事件呢? 你叫我做出定义,我不知道,我只能举个例子说明,例如接下来的代码中,列出来一些关于游戏中的事件 ''' 事件 产生途径 参数 QUIT 用户按下关闭按钮 none ATIVEEVENT Pygame被激活或者隐藏 gain, sta

  • Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法

    本文实例讲述了Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法.分享给大家供大家参考,具体如下: 1.简介 本扩展包添加了两个视图相关的Artisan命令到Laravel应用,以便我们通过Artisan命令即可创建和管理视图文件,可谓是进一步解放了生产力. 2.安装 还是通过Composer安装: composer require sven/artisan-view 安装完成后到config/app.php中注册服务提供者ArtisanViewServiceProv

  • 五十音小游戏中的前端知识小结

    背景 在日语学习初期阶段,我发现日语五十音的记忆并不是很容易的,片假名的记忆尤其令人费神.这时我想如果有一个应用可以充分利用碎片时间,在午休或地铁上随时可以练习五十音该多好.于是搜索 App Store,确实有很多五十音学习的小软件,但是商店的软件不是含有内购.夹带广告.就是动辄 40M 以上,没找到一个自己满意的应用.于是打算自己写一个,主要介绍自己在开发设计该应用过程中的一些收获. 实现 在线体验地址 https://dragonir.github.io/kanaApp/ 实现效果如下,该应

  • eBay 打造基于 Apache Druid 的大数据实时监控系统

    首先需要注意的是,本文即将提到的 Druid,并非阿里巴巴的 Druid 数据库连接池,而是另一个大数据场景下的解决方案:Apache Druid. Apache Druid 是一个用于大数据实时查询和分析的高容错.高性能开源分布式时序数据库系统,旨在快速处理大规模的数据,并能够实现快速查询和分析.尤其是当发生代码部署.机器故障以及其他产品系统遇到宕机等情况时,Druid 仍能够保持 100% 正常运行.创建 Druid 的最初意图主要是为了解决查询延迟问题,当时试图使用 Hadoop 来实现交

  • Asp.net SignalR创建实时聊天应用程序

    一.概述 使用 ASP.NET 那么 SignalR 2 创建一个实时聊天应用程序.将 SignalR 添加 MVC 5 应用程序中,并创建聊天视图发送并显示消息. 在Demo中,将学习SignalR 开发任务包括 ︰ 向 MVC 5 应用程序添加那么 SignalR 图书馆. 创建集线器和浩然启动类,以将内容推送到客户端. 使用 web 页中的那么 SignalR jQuery 库发送邮件并显示更新从集线器. 下面的屏幕快照显示在浏览器中运行的已完成的聊天应用程序. 二.实现 创建一个 ASP

  • Android中Service实时向Activity传递数据实例分析

    本文实例讲述了Android中Service实时向Activity传递数据的方法.分享给大家供大家参考.具体如下: 这里演示一个案例,需求如下: 在Service组件中创建一个线程,该线程用来生产数值,每隔1秒数值自动加1,然后把更新后的数值在界面上实时显示. 步骤如下: 1.新建一个android项目工程,取名为demo. 2.新建一个Service类,用来实时生产数值,供界面实时显示. package com.ljq.activity; import android.app.Service;

随机推荐