InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

一招解决在 Unity 中实时聊天

  • 2020-02-26
  • 本文字数:0 字

    阅读完需:约 1 分钟

一招解决在 Unity 中实时聊天

近期,声网发布了基于 Native SDK 2.9.1 全平台接口的第一个全功能版 Agora Unity SDK,可用于基于 Unity 环境开发的游戏(不在意包体大小)、教育、AR、VR 项目。我们将讲解如何使用 Agora Video SDK for Untiy 在 Unity 中构建跨平台的实时视频聊天场景。


在此之前,要说明一下,我们在这篇教程中要用的 Agora Video SDK for Untiy ,与之前已经发布的 Agora 互动游戏 Unity SDK 有很多差别,具体如下:


准备工作

  • Unity Editor

  • 了解 Unity Editor、GameObjects、Unity 脚本,以及如何将 Unity 应用发布到移动设备上

  • 对 C#的基本了解

  • Agora.io 开发人员帐户

概述

在进入主题之前,让我们花点时间概览一下我们将要完成的所有步骤


1.设立新项目并导入 Agora Video SDK for Untiy


2.创建场景


3.处理按钮的事件


4.集成 Agora SDK


5.在设备上构建和测试(iOS/Android/Windows/macOS)

创建新项目

首先,让我们打开 Unity 并创建一个空白的新项目,将其命名为 Agora Video Demo。完成 Unity 的项目设置后,我们导航到 Unity Asset Store,然后搜索“Agora Video SDK”。接下来,我们将 Agora Video SDK for Unity 导入到我们的项目中。当出现提示时,请确保选中列表中的所有 Assets。


创建 Scene

现在,我们创建一个新 Scene,将其命名为 WelcomeScene,然后双击该场景在 Editor 视图中将其打开。应用被加载后,WelcomeScene 将是用户看到的首个画面。我们首先从场景中删除现有的 Camera 和 Lights,然后我们添加一个 Canvas GameObject。接下来我们把“Camera”添加为“Canvas”的子对象。由于屏幕是以 2D 模式显示的,因此我们将 Editor 切换为 2D 模式。我们还需要把 Editor 视图切换到 Game 模式,以便我们能够可视化与 Camera 视角相关的位置。


我们需要一个按钮来触发应用执行“加入频道”的动作,为此我们添加一个按钮并将其命名为 JoinChannel,并为其添加标签。我们还需要让用户能够输入其频道的名称,为此我们创建一个文本输入(InputFiled),将其命名为 ChannelName。



接下来,我们将创建一个新场景并将其命名为 ChatScene,它是播放本地和远程视频流的屏幕。为了测试 Agora Video SDK 的某些功能,我们为场景添加一些 3D 的 GameObject。首先,向场景添加一个 Cube。由于我们的场景包含 3D,所以在编辑器中退出 2D 模式。


我们希望 Cube 将本地的摄像头视频流渲染为纹理,因此我们需要添加 VideoSurface.cs 作为 Cube 的组件。我们添加一个 Cylinder GameObject,将其移动到上方,使其不被 Cube 遮挡。接下来我们给 Cylinder 调整一下 position,并添加 VideoSurface.cs 组件。


最后,我们把 Canvas 添加到场景中,这样我们就可以添加 2D 按钮以便退出聊天,我们将其命名为 LeaveButton 并为其指定适当的标签。在此过程中,我们需要添加一个文本框,将其命名为 VersionText。我们把 VersionText 放置在右上角使其不会遮挡画面,然后将颜色设置为白色以便易于查看。

处理按钮事件

在设置场景的过程中,我们创建了两个按钮(JoinButton 和 LeaveButton),现在我们需要创建一个脚本,将一些 On Click Event 映射到这两个按钮上。


首先在 Assets 中创建一个新的 C#脚本,将其命名为 ButtonHandler.cs,然后双击它,在 Visual Studio 中打开文件。然后我们添加一个函数 OnButtonClick(),为简化起见,我们给函数主体中添加一个 Debug Log。


我们回到 Unity 中的 WelcomeScene 并将脚本和函数 attach 到按钮上。首先选择 JoinButton 并将 ButtonHandler.cs 添加为组件。接下来添加一个 On Click event,并将按钮单击映射到 OnButtonClick()。然后我们在 ChatScene 的 LeaveButton 上重复此过程。



此外需要注意的是,我们需要引入 UnityEngine.UI,然后才能从 ChannelNameGameObject 获取 InputFiled 组件。


public void OnButtonClick(){    Debug.Log("Button Clicked: " + name);
// determin which button if (name.CompareTo("JoinButton") == 0) { // join chat OnJoinButtonClicked(); } else if (name.CompareTo("LeaveButton") == 0) { // leave chat OnLeaveButtonClicked(); }}
private void OnJoinButtonClicked(){ Debug.Log("Join button clicked");
// get channel name from text input GameObject go = GameObject.Find("ChannelName"); InputField input = go.GetComponent<InputField>();}
private void OnLeaveButtonClicked(){ Debug.Log("Leave button clicked");}
复制代码

集成 Agora SDK

首先,我们在 Assets 中创建一个新的 C#脚本,将其命名为 AgoraInterface.cs,然后在 Visual Studio 中打开该文件。我们创建的第一个变量是 appId,用来保存我们的 Agora AppID。复制你的 AppID 并将其粘贴到 appId 的值中。我们还需要创建一个变量来保存远端视屏流的 uid。


private static string appId = "Agora App ID";public IRtcEngine mRtcEngine;public uint mRemotePeer;
复制代码


让我们创建一个函数来初始化 Agora mRtcEngine,我们将其称为 LoadEngine()。我们确保引擎仅被初始化一次。我们使用 if 语句来检查 mRtcEngine 引用是否为 null。如果结果为 true,我们使用 IRtcEngine.getEngine 传入我们的 Agora 的 AppID 来初始化引擎。


接下来,我们将声明 JoinChannel() 函数。首先检查 mRtcEngine 是否存在,然后我们调用 EnableVideo 和 EnableVideoObserver,最后我们调用 JoinChannel。


到目前为止,我们已经初始化了 Agora mRtcEngine,并用它来支持“加入频道”功能。现在我们需要为用户提供一种“离开频道”并“卸载”引擎的方法。我们从 LeaveChannel() 开始,再次检查引擎是否存在,然后用引擎调用 LeaveChannel() 和 DisabelVideoObserver()。最后,我们调用 IRtcEngine.Destroy(),并将本地引用设置为 null 来卸载引擎。



我们准备添加一些回调函数,以便可以基于各种预定义事件进行调用。我们重点关注三个回调:OnChannelJoinSuccess、OnUserJoined 和 OnUserOffline。只要本地设备成功加入频道,就会调用 OnChannelJoinSuccess;每当远程流加入频道时,就会调用 OnUserJoined;每当远端流离开频道时,就会调用 OnUserOffline。


在调用 JoinChannel 之后,我们在 OnJoinButtonClicked 中向 SceneManager 的 SceneLoaded 监听器添加一个回调,然后将函数命名为 OnSceneFinishedLoading。由于每次加载场景时都会调用回调,因此我们需要一个中间函数。



在设备上测试我们的工作成果之前,我们需要为 Android 添加一些权限请求。从 Unity 2018_3 开始,权限不再自动添加,因此我们需要添加一些 if-else 语句来检查并请求麦克风和摄像头的权限。


在设备上构建和测试

终于可以测试我们的应用了!让我们回到 Unity 并打开“Build Settings”。首先,我们将 WelcomeScene 和 ChatScene 拖到“Build Settings”对话框的 Scene 列表中。


在构建和部署我们的应用之前,我们需要对每个平台的播放器设置进行一些调整。我们需要更新 Bundle ID,并提供一些有关摄像头和麦克风使用情况的描述文本(启用权限提示)。



现在我们准备构建我们的应用!在“BuildSettings ”对话框中,单击“Build ”按钮,Unity 将提示你输入保存构建的位置。Unity 完成构建 iOS 应用后,将出现包含 Unity-iPhone.xcodeproj 的 Finder 窗口,双击该文件打开 XCode。打开 XCode 后,选择项目(从左侧的文件导航器中),启用“AutomaticSigning ”并选择你的签名证书。最后,确保已连接测试设备,然后单击“播放”按钮。



同样的,我们这个版本也支持 Windows 和 macOS,如图所示:



图:Windows 中的操作



图:macOS 中的操作


你可以看到 WelcomeScene 先被加载,当我们加入频道时,我们进入 ChatScene,而当我们单击“Leave ”按钮时,将返回 WelcomeScene。唯一缺少的是远程流,为了实现远端视频流,我们需要第二个设备。此外,我们也支持 Android。从“Platform ”列表中选择“Android”,打开“Player Settings”并提供一个 Package Name。确保已连接你的 Android 设备,然后单击“BuildAnd Run”。!



本文转载自 声网 Agora 公众号。


原文链接:https://mp.weixin.qq.com/s/KxE1iHLFKy9qcMZBzueidQ


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2020-02-26 15:46785

评论

发布
暂无评论
发现更多内容

基于微信小程序的幼儿园招生报名系统开发笔记

CC同学

如何选择ui设计机构

小谷哥

秋招冲刺版!奉上[Java一线大厂高岗面试题解析合集]

冉然学Java

面试 面试题 大厂 java; 秋招

LED显示屏在会议室如何应用

Dylan

LED显示屏 led显示屏厂家

什么是低代码开发?大家都真的看好低代码开发吗?

优秀

低代码开发

兆骑科创创业赛事活动举办平台,投融资对接,线上直播路演

兆骑科创凤阁

零基础培训学习大数据课程

小谷哥

开源一夏 | Spring事务传播机制

六月的雨在InfoQ

开源 Spring事务 8月月更

面向云时代的龙蜥操作系统 是 CentOS 替代的最佳选择

OpenAnolis小助手

龙蜥操作系统 开放原子全球开源峰会 OpenAnolis 分论坛 CentOS 停服 CentOS 迁移最佳选择

带你玩转“超大杯”ECS特性及实验踩坑【华为云至简致远】

科技怪咖

开源一夏 | 自己画一块ESP32-C3 的开发板(PCB到手)

矜辰所致

开源 硬件设计 8月月更 ESP32-C3

兆骑科创赛事服务平台对接,海内外高层次人才引进

兆骑科创凤阁

大数据培训课程哪个好呢?

小谷哥

阿里巴巴最新分享Spring Cloud核心笔记,全程实例讲解,通俗易懂

Java工程师

Java spring spring-cloud

优雅地实时检测和更新 Web 应用

领创集团Advance Intelligence Group

Web Web应用

有了国产 DevOps 工具 ,还怕数字化转型成本高?

SoFlu软件机器人

湖北钠斯网络数字藏品交易系统

开源直播系统源码

NFT 数字藏品

前端培训机构课程怎么样

小谷哥

携手数字创新 共筑国产生态 7月份AntDB与5款产品完成互认证

亚信AntDB数据库

AntDB 国产数据库 AISWare AIDB

赶紧收藏!!!我直接上瘾!百万人都在学的Docker

指剑

签约计划第三季 8月月更

有了这个开源工具后,我五点就下班了!

IT学习日记

EasyExcel 签约计划第三季 seaweedfs文件系统 java excel导出导入 java csv导出导入

国产数据库的红利还能“吃”多久?

墨天轮

数据库 国产数据库

web前端培训班哪个好选择

小谷哥

「Gitee篇」如何用Git平台账号登录建木CI

Jianmu

git 开源 DevOps 低代码 gitee

干货:从零设计高并发架构

C++后台开发

高并发 架构师 C/C++后台开发 C/C++开发 高并发架构

基于DevCloud进行黑白棋实时对战游戏开发实践【华为云至简致远】

科技怪咖

【有奖征文 第13期】至简致远,“云”响世界,大胆秀出你的华为云技术主张,高额激励等你拿

科技怪咖

JavaScript 里三个点 ...,可不是省略号啊···

华为云开发者联盟

JavaScript 前端 运算符 函数

Java面试项目推荐,15个项目吃透两个offer拿到手软

冉然学Java

offer java; 技术栈 MAll java项目实战分享

原来如此!谷歌架构师10年呕心沥血汇成的《23种设计模式》,这才是正解

冉然学Java

架构 23种设计模式 java; 编程、

一文读懂字节跳动“埋点验证平台”

字节跳动数据平台

字节跳动 数据治理 埋点治理 数据研发 埋点验证

  • 扫码添加小助手
    领取最新资料包
一招解决在 Unity 中实时聊天_文化 & 方法_声网_InfoQ精选文章