欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何基于 Blueprint 在游戲中創(chuàng)建實(shí)時(shí)音視頻功能

 更新時(shí)間:2020年05月29日 09:32:02   作者:聲網(wǎng)Agora  
我們?cè)诒疚南葋?lái)講講如何在 Unreal 中用 Blueprint 快速實(shí)現(xiàn)。稍后會(huì)分享基于 C++的實(shí)現(xiàn)步驟。感興趣的朋友跟隨小編一起看看吧

近日,Epic 公布了他們?yōu)榇螘r(shí)代游戲準(zhǔn)備的 Unreal 5 游戲引擎,以及一份效果驚艷的 Demo。據(jù)稱,游戲中的每個(gè)資源有一百萬(wàn)個(gè)繪制三角面,每一幀有超過(guò)十億個(gè)繪制三角面。也就是說(shuō),開發(fā)者構(gòu)建的游戲場(chǎng)景,能獲得電影特效場(chǎng)景般的視覺體驗(yàn)。

事實(shí)上,聲網(wǎng)也有許多采用 Unreal 的開發(fā)者。為了能讓開發(fā)者可以在游戲中快速實(shí)現(xiàn)實(shí)時(shí)音視頻對(duì)話,聲網(wǎng) Agora Unreal SDK Beta 版也已上線。

由于 Unreal 為開發(fā)者提供了兩種開發(fā)方式,一種是 Blueprint,即可視化編程,另一種是基于 C++開發(fā)。所以 Agora Unreal SDK 也提供了兩個(gè)版本—— Blueprint 和 C++,兩個(gè)版本均已上傳至 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 項(xiàng)目中。如果遇到問題可在 Github 提 issue ,或在 RTC 開發(fā)者社區(qū)發(fā)帖 的反饋。

可以實(shí)現(xiàn)什么場(chǎng)景呢?

許多 3A 游戲大作都是基于 Unreal 引擎開發(fā)的,比如堡壘之夜、戰(zhàn)爭(zhēng)機(jī)器、火箭聯(lián)盟等。在一些游戲中,隊(duì)友之間需要通過(guò)語(yǔ)音交流配合。而這種游戲中的實(shí)時(shí)語(yǔ)音對(duì)話,就可以通過(guò) Agora Unreal SDK 來(lái)快速實(shí)現(xiàn)。

在類似于吃雞的游戲中,玩家不僅要能聽到隊(duì)友的語(yǔ)音,還要能憑借聲音來(lái)辨別隊(duì)友所在的方位。聲網(wǎng)Agora SDK 就支持該功能,它可以將玩家與其在聲場(chǎng)中的位置和方向?qū)?yīng),來(lái)提供聽聲辨位的能力。

Agora SDK 優(yōu)勢(shì)

超低延時(shí)

游戲中的語(yǔ)音對(duì)話要求實(shí)時(shí)音視頻技術(shù)的延時(shí)要小于400甚至300毫秒以內(nèi),玩家之間才能達(dá)到無(wú)障礙溝通的效果。聲網(wǎng)提供的軟件定義實(shí)時(shí)網(wǎng)SD-RTN™擁有超低延時(shí)特性,可做到全球端到端延時(shí)小于400ms,延時(shí)中位數(shù)76ms,處于行業(yè)領(lǐng)先水平。

抗弱網(wǎng)

不論是在 4G 或者 Wi-Fi 網(wǎng)絡(luò)情況下,玩家隨時(shí)會(huì)面臨比較復(fù)雜的網(wǎng)絡(luò)情況。而且,在弱網(wǎng)、非常高丟包情況下,要保證能進(jìn)行良好的音視頻互動(dòng)。聲網(wǎng)具備優(yōu)秀的弱網(wǎng)傳輸和抗丟包算法,可以在 60% 的丟包環(huán)境下保障音視頻流暢,70% 的網(wǎng)絡(luò)丟包環(huán)境下保障語(yǔ)音的流暢。

易于集成

還有一點(diǎn)非常重要的,就是需要將實(shí)時(shí)音視頻與游戲進(jìn)行簡(jiǎn)單、快速的結(jié)合。聲網(wǎng)的SDK非常簡(jiǎn)單易用,一個(gè)音視頻通話或直播應(yīng)用,只需要幾行代碼,30分鐘就能輕松搞定。

那么如何實(shí)現(xiàn)呢?我們?cè)诒疚南葋?lái)講講如何在 Unreal 中用 Blueprint 快速實(shí)現(xiàn)。稍后會(huì)分享基于 C++的實(shí)現(xiàn)步驟。

Agora Unreal SDK - Blueprint 實(shí)現(xiàn)

開發(fā)前的準(zhǔn)備

  • Unreal 4.23 以上版本
  • Visual Studio 或 Xcode(版本根據(jù) Unreal 配置要求而定)
  • 運(yùn)行 Windows 7 以上系統(tǒng)的 PC 或 一臺(tái) Mac
  • Agora 注冊(cè)賬號(hào)一枚(免費(fèi)注冊(cè),見官網(wǎng) Agora.io)
  • 如果你的企業(yè)網(wǎng)絡(luò)存在防火墻,請(qǐng)?jiān)诼暰W(wǎng)文檔中心搜索「應(yīng)用企業(yè)防火墻限制」,進(jìn)行配置。

新建項(xiàng)目

首先我們要?jiǎng)?chuàng)建一個(gè) Unreal 項(xiàng)目,然后將 Agora SDK 集成到項(xiàng)目中。

現(xiàn)在,讓我們先從草圖開始,創(chuàng)建一個(gè)項(xiàng)目。如果已經(jīng)創(chuàng)建了項(xiàng)目,那么可以直接跳過(guò)這一步。

1.打開 Unreal Engine Editor,選擇 New project。

2.在新項(xiàng)目面板上,在項(xiàng)目類型中選擇 C++,然后給項(xiàng)目起個(gè)名,選擇項(xiàng)目保存路徑,完成創(chuàng)建。

3.確保在[your_project]/Source/[project_name]/[project_name].Build.cs文件的PrivateDependencyModuleNames一行,去掉注釋。Unreal 默認(rèn)是將它注釋掉的,這會(huì)導(dǎo)致在編譯的時(shí)候報(bào)錯(cuò)。

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

集成Agora SDK

接下來(lái)我們?cè)陧?xiàng)目中集成 Agora SDK

1.將 SDK 復(fù)制到這個(gè)路徑下 [your_project]/Plugins

2.把插件依賴添加到:

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

的私有依賴(Private Dependencies)部分

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

3.重啟 Unreal

4.點(diǎn)擊 Edit->Plugin,在分類中找到 Project->Other,確定插件已經(jīng)生效

創(chuàng)建游戲?qū)嵗?/strong>

在項(xiàng)目的 Content 界面中,點(diǎn)擊右鍵,選擇 Blueprint Class

在All Classes中輸入“Game Instance”并選擇 Game Instance

把新的 Game Instance 命名為“AgoraGameInstance_BP”

由于Game Instance會(huì)在其它類之前進(jìn)行初始化,所以我們要先創(chuàng)建 AgoraGameIntance。雙擊進(jìn)入 AgoraGameInstance_BP 的 Blueprint,在Blueprint的工作區(qū)域點(diǎn)擊右鍵會(huì)顯示出菜單,輸入“Event Init”,并選擇它。

拖拽出 Event Init,點(diǎn)擊輸出接口后,輸入“Construct”,選擇Construct Object from Class function。

在 Class 的下拉菜單中選擇 Agora,然后將 Outer 的設(shè)定為從 Self 獲取參數(shù)。

通過(guò)拖拽,將 Construct Agora 輸出 Return Value 引腳設(shè)定為 Promote to variable。把新的變量名設(shè)定為“Agora”,點(diǎn)擊“????”圖標(biāo),把它設(shè)定為 public。

“Agora”的輸出,我們找到并選定為“Initialize”

創(chuàng)建 Game Mode(游戲模式)

Game Mode 將被用于切換 widgets。就像創(chuàng)建 Game Instance 一樣,在 Blueprint 中創(chuàng)建新的 Game Mode:

命名為“GameMode_BP”

創(chuàng)建 Widgets(控件)

在項(xiàng)目的 Content 中創(chuàng)建新的目錄 Widgets_BP。在這個(gè)目錄下添加兩個(gè) Widgets:右鍵點(diǎn)擊目錄內(nèi)容,然后選擇 User Interface -> Widget Blueprint:

將它們分別命名為“IntroductionWidget_BP”和“VideoCallWidget_BP”

Game Mode

回到 GameMode_BP,點(diǎn)擊“+”添加兩個(gè) function,并分別命名為“SetInctoductionView”和“SetVideoCallView”。

添加兩個(gè)變量,“IntroductionWidget_BP”和“VideoCallWidget_BP”,把他們的類型分別改為 Introduction Widget BP 和 Video Call Widget BP。

然后如下圖所示來(lái)設(shè)置

Introduction Widget(介紹控件)

進(jìn)入 InctoductionWidget_BP,創(chuàng)建控件的界面,就像圖中所示的:

在EncriptionTypeComboBox中添加以下變量:

回到繪制模式中,找到 Event Construct 并執(zhí)行,如圖所示:

InctoductionWidget_BP 會(huì)從 AgoraGameInstance_BP 獲得對(duì)象 Agora,在控件底部的 Text Block 中設(shè)定 Agora SDK 版本?;氐皆O(shè)計(jì)界面,選擇 Join 按鈕,在右側(cè)的 Event 中添加 On Clicked 事件

像圖中一樣,來(lái)設(shè)定事件執(zhí)行邏輯:

Video Call Widgets(視頻通話控件)

在 Demo 中找到 Content/ButtonTextures 目錄(你不用打開這個(gè)項(xiàng)目,只需要在文件中找到它就行)。所有的按鈕 texture 都保存在這里。在你項(xiàng)目的 content 中創(chuàng)建一個(gè)新的目錄“ButtonTextures”,把這里所有的 texture 都拖拽放到里面。

進(jìn)入 VideoCallLevel_BP,創(chuàng)建 widget 界面:

打開可視化視圖,增加 isLocalAudioMuted、isLocalVideoMute 布爾變量,(Graph),增加 CurrentUserId 64 位整數(shù)變量。添加功能與執(zhí)行邏輯如下圖所示:

進(jìn)入 Event Graph,然后按照以下步驟執(zhí)行

創(chuàng)建新的 Level

進(jìn)入 project Content,創(chuàng)建 Level 目錄(如果之前沒有創(chuàng)建)。右鍵單擊目錄,選擇新 Level:

將 Level 重命名為“VideoCallLevel_BP”

選擇這個(gè) Leve,點(diǎn)擊頂部的 Blueprint 圖標(biāo),選擇 Open Level Blueprint 選項(xiàng):

如圖中所示執(zhí)行Event Begin Play

修改 World 與項(xiàng)目設(shè)置

進(jìn)入 Window->World設(shè)置,把 GameMode 設(shè)為 GameMode_BP。

進(jìn)入 Edit->Project設(shè)置,選擇 Map&Modes,按照下圖所示設(shè)定值。

好了,現(xiàn)在可以運(yùn)行游戲了

下周我們將分享基于 Unreal C++ 與 Agora Unreal SDK 如何實(shí)現(xiàn)游戲中的實(shí)時(shí)音視頻。

同時(shí),我們還想邀請(qǐng)?bào)w驗(yàn) Agora Unreal SDK Beta 版的開發(fā)者們填寫一個(gè)有獎(jiǎng)問卷,希望大家可以深度參與SDK 的功能規(guī)劃。

總結(jié)

到此這篇關(guān)于Unreal 5 公布的同時(shí)Agora Unreal SDK 也已為你準(zhǔn)備好了的文章就介紹到這了,更多相關(guān)Unreal 5 Agora Unreal SDK 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中map和set的使用及示例

    C++中map和set的使用及示例

    map和set是STL容器中的部分,本文主要介紹了C++中map和set的使用小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 基于C++11實(shí)現(xiàn)手寫線程池的示例代碼

    基于C++11實(shí)現(xiàn)手寫線程池的示例代碼

    在實(shí)際的項(xiàng)目中,使用線程池是非常廣泛的,本文主要介紹了基于C++11實(shí)現(xiàn)手寫線程池的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • C++的靜態(tài)類型檢查詳解

    C++的靜態(tài)類型檢查詳解

    這篇文章主要為大家詳細(xì)介紹了C++的靜態(tài)類型檢查,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C++的template模板中class與typename關(guān)鍵字的區(qū)別分析

    C++的template模板中class與typename關(guān)鍵字的區(qū)別分析

    這篇文章中我們來(lái)談一談C++的template模板中class與typename關(guān)鍵字的區(qū)別分析,同時(shí)會(huì)講到嵌套從屬名稱時(shí)的一些注意點(diǎn),需要的朋友可以參考下
    2016-06-06
  • 純C語(yǔ)言:遞歸最大數(shù)源碼分享

    純C語(yǔ)言:遞歸最大數(shù)源碼分享

    這篇文章主要介紹了純C語(yǔ)言:遞歸最大數(shù)源碼,需要的朋友可以參考一下
    2014-01-01
  • C語(yǔ)言 用while循環(huán)求和的平均值操作

    C語(yǔ)言 用while循環(huán)求和的平均值操作

    這篇文章主要介紹了C語(yǔ)言 用while循環(huán)求和的平均值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • C++調(diào)用matlab函數(shù)的實(shí)例

    C++調(diào)用matlab函數(shù)的實(shí)例

    這篇文章主要介紹了C++調(diào)用matlab函數(shù)的方法,包括封裝matlab函數(shù),編譯matlab函數(shù)及C++環(huán)境配置,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    本文詳細(xì)講解了c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C語(yǔ)言數(shù)據(jù)在內(nèi)存中的存儲(chǔ)流程深入分析

    C語(yǔ)言數(shù)據(jù)在內(nèi)存中的存儲(chǔ)流程深入分析

    使用編程語(yǔ)言進(jìn)行編程時(shí),需要用到各種變量來(lái)存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來(lái)分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-10-10
  • C/C++內(nèi)存管理之new與delete的使用及原理解析

    C/C++內(nèi)存管理之new與delete的使用及原理解析

    這篇文章主要介紹了C/C++內(nèi)存管理之new與delete的使用及原理解析,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08

最新評(píng)論