0. 背景

语音聊天是游戏中重要的功能,它能便捷用户的聊天,增强用户的粘性。本文会讲述如何在Unity5.x中,使用素材[github地址]中的Unity5.x工程项目如何实现在windows中的简单语音聊天。

1. 聊天服务

本节实现的聊天服务非常简单,有服务端和客户端组成,功能要求如下:

  • 客户端通过设备麦克风输入,服务端立即广播给其他所有客户端;
  • 在网络状况良好的情况下,无论语音输入时间长短,接收端不允许较长的延迟(>2s)
  • 发送端可通过“按住某键录音,松开停止录音”或“按某键一次开始录音,再次按某键停止录音”或“自动检测”发送录音。

2. 使用步骤

a). 下载项目工程。点击run.bat三次,即打开三个voicechat.exe,其中一个作为server,另两个作为client, 如图1。


图1. 点击run.bat

b). server填入PORT,点击start server,如图2,server启动后,则会显示server running,如图3;


图2. 填入PORT
图3. server启动后

c). 两个client分别填入server的IP_ADDRESSPORT,点击connect,如图4;此时server的PLAYERS数为2,如图3红框部分;


图4. 填入IP_ADDRESSPORT

d). 两个客户端均选择default microphone(recommanded) 作为麦克风输入,如图5;


图5. 选择麦克风输入

e). 在某个发送客户端中按住P键,此时在状态由slient变为transmit,如图6。此时在接收客户端中即可听到语音。


图6. 客户端状态由slient变为transmit

3. Unity构建

本节简单叙述下如何在Unity中从零还原上述的voicechat.exe

a). 准备材料

1. Unity5.x
2. 四个文件夹,可从github下载到:Base,Behaviour,Networking,UI,其主要功能如下所示:

Base:三个dll链接库,其中Ionic.Zlib.dllNSpeex.dll为语音字节流数据压缩以及解压缩库。voicechat.dll为基础库。它包括存储语音信息的数据结构;压缩、解压缩封装;基础类型数据存储池等。

Behaviour:三个csharp文件,均为Unity GameObject的组件。 其中VoiceChatPlayer.cs播放语音信息;VoiceChatRecorder.cs记录语音信息;VoiceChatSettings.cs语音相关设置。

Networking: :三个csharp文件,均为Unity GameObject的组件。VoiceChatExtensions.cs(反)序列化已压缩的语音数据;VoiceChatNetworkProxy.cs客户端代理组件,发送序列化后语音数据至网络,接收网络语音数据;VoiceChatNetworkUtils.cs动态加载客户端代理gameobject。

UI: :五个csharp文件,均为Unity GameObject的组件。其中VoiceChatPickUi.cs为图1;VoiceChatUnityServer.cs为图2;VoiceChatServerUi.cs为图3;VoiceChatUnityClient.cs位图4;VoiceChatUi.cs为图5。

b). 制作客户端代理prefab

a)步骤 中,VoiceChatNetworkUtils.cs动态加载客户端代理gameobject,所以首先制作代理的prefab

1. 新建Unity 2D Project;
2. 打开项目文件夹拷贝materialBase,Behaviour,Networking,UI文件夹至Assets文件夹;
3. 打开项目后,Create Empty,以VoiceChat_NetworkProxy命名;
4. 在VoiceChat_NetworkProxy物体中挂载VoiceChatNetworkProxy.cs组件,VoiceChatPlayer.cs组件和Network View组件
5. 在VoiceChat_NetworkProxy物体中的Network View组件,选择属性StateSynchronizationReliableDeltaCompressed或为1;将组件VoiceChatNetworkProxy拖至NetworkView的属性Observed,如图7.


图7. VoiceChat_NetworkProxy物体属性

6. 在Assets新建Resources文件夹,将VoiceChat_NetworkProxy物体拖至Resources中。如图8,并删除在Hierarchy中的物体。


图8. Hierarchy中的物体

至此客户端代理prefab制作完毕。

c). 新建Behaviour与UI的gameobject

VoiceChat_Beh物体的Inspector如下图:


图9. VoiceChat_Beh物体的Inspector

VoiceChat_UI物体的Inspector如下图:


图10.VoiceChat_UI物体的Inspector

注意,组件属性均使用默认值;VoiceChat_UI中的VoiceCHatUnityClientVoiceCHatUnityServerdisable的;VoiceChatPlayer.cs是在VoiceChat_NetworkProxy.prefab之中,而不是在VoiceChat_Beh中,因为每个客户端程序中都会有所有的客户端的代理(包括自己的),因而其他的客户端程序传输过来的语音信息都会依靠对应的客户端代理的VoiceChatPlayer.cs进行播放。

最后File/BuildSetting/PlayerSetting中,将Run In Background勾选上,如图11。


图11. Run In Background勾选

如果未勾选,那么将server由当前运行移出至背景,则不会相应客户端的请求,因此客户端就不会触发void OnConnectedToServer(),直到将server切换为当前进程。

3. 总结

本文讲述了如何使用既有材料和Unity,构建一个简单的语音聊天客户端,服务端程序。下一节会详细讲述语音聊天的框架流程和相关组件代码。

Unity5.x实现简易语音聊天(一) 使用步骤相关推荐

  1. 一套代码,快速实现一个语音聊天室

    前言:本文将简要分享几个语音聊天室的应用场景,并讲述基于声网SDK,实现语音聊天室的步骤. 语音聊天在泛娱乐社交行业中有着重要的地位,行业中很多佼佼者也都为用户提供了语音聊天室,甚至有些平台最初就是依 ...

  2. 漫步VR——Unity语音聊天室开发小结

    一.背景介绍 VR是什么 虚拟现实Virtual Reality的英语缩写.VR 主要有手机盒子.头盔和一体机三种. 虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统它利用计算机生成一种模拟环 ...

  3. 树莓派语音聊天机器人

    树莓派语音聊天机器人 前期工作 DAY1 DAY2 DAY3 使用代码 带有VAD的录音程序 语音转文字程序 图灵聊天机器人代码 文字转语音程序 注 前期工作 本人拟在树莓派中设计一个GUI,GUI包 ...

  4. 【腾讯TMQ】漫步VR——Unity语音聊天室开发小结

    作者:刘勇 一.背景介绍 VR是什么 虚拟现实Virtual Reality的英语缩写.VR 主要有手机盒子.头盔和一体机三种. 虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统它利用计算机生 ...

  5. web简易视频聊天室+媒体流插入

    语音聊天室是最近非常热门的一款语音类软件,但是编写一个语音聊天室软件是不是很困难呢?没关系,今天为大家带来简易版的,非常简单呦!但是光聊天怎么行,想不想一起在聊天室看视频,一起吐槽.观看呢!不要急哟, ...

  6. 开发最佳实践|集成声网 iOS SDK,实现语音聊天室

    大家好,我是声网 RTE 开发者社区作者 @小曾同学.本次主要分享集成声网SDK实现语音聊天室. 01 前言 在日常生活中经常会看到一些聊天场景,比如在线KTV.连麦开黑.多人相亲.娱乐聊天室等应用场 ...

  7. #实现互联网聊天_局域网内两台电脑如何实时语音聊天通话

    有的人想实现局域网内实时语音通话的功能,如果电脑可以连接互联网的话,可安装QQ,电脑版微信等进行实时语音聊天,如果电脑只连接了内网,并未连接因特网,该怎么实现呢?其实不难,只需要通过局域网声音传输软件 ...

  8. 基于C#局域网语音聊天

    基​于​C​#​局​域​网​语​音​聊​天​室​,​可​实​现​文​本​消​息​的​发​送​.​接​收​及​语​音​聊​天​,​是​一​个​很​不​错​的​,​适​合​初​学​者​的​软​件​开​发​ ...

  9. iOS 版 Skype支持群组语音聊天

    现在,用户只需在群组聊天界面下点击下方的电话图标即可打开一场群组语音电话. 当你是这场群组语音电话主持人的时候,你可以看到群组内的所有成员,而且你能在不需要结束通话的情况下即可移除当中的一些组员. i ...

最新文章

  1. Linux安装git和maven的详细过程
  2. dropbox解决办法
  3. android view知识点 总结
  4. 学习css3中的动画
  5. Oracle数据库中number类型在hibernate的引用
  6. 通过FD耗尽实验谈谈使用HttpClient的正确姿势
  7. [转]如何才能在 IIS 7.5 使用 Windows PowerShell Snap-In 功能
  8. Vue2.0 新手入门 — 从环境搭建到发布
  9. css背景图毛玻璃,css实现背景图片的毛玻璃效果
  10. python播放mp3文件 playsound_播放声音文件 函数playsound()
  11. js距离米转换为千米_千米换算(千米与米之间的换算题)
  12. android11.0 12.0Launcher3禁止拖拽app图标到第一屏
  13. VMware精简系统Win系列|体积更小更稳定
  14. BitComet for Mac(高效好用的BT下载客户端)
  15. Facebook的普惠金融数字货币Libra
  16. 邮件常见异常:javax.mail.MessagingException: Could not connect to SMTP host
  17. python中的pymysql模块
  18. iOS开发系列–打造自己的“美图秀秀”(上)
  19. fdisk和parted磁盘分区工具命令
  20. jQuery是一个非常优秀的js库

热门文章

  1. R 实现分层抽样教程
  2. 国家治理能力现代化的重要标准:“国家大数据中心”
  3. html5坐标原点在哪,文化 _ 你知道上海的城市坐标原点吗
  4. 每天150亿起攻击 这是一个恐怖的企业安全故事!
  5. 申宝股票-市场指数窄幅震荡整理
  6. 骁龙 820 车用处理器
  7. 尼康相机照片怎么恢复
  8. 如何轻松恢复数码相机里面的数据
  9. php nobody 没有写权限,laravel log文件分组nobody问题
  10. 基于Android开发的车牌识别app源码