Unity PC端文字转语音的实现
第一种方法
1.首先下载一个dll文件 Interop.SpeechLib.dll
放在unity Plugins文件夹里就可以了
下面上代码 脚本挂在任意地方运行即可
using System.Collections; using System.Collections.Generic; using UnityEngine; using SpeechLib; public class TTS_YuYin : MonoBehaviour { SpVoice voice; // Start is called before the first frame update void Start() { //实例化spvoice 对象 voice = new SpVoice(); //Item(0)中文语音 Item(1)英文语音 voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0); //语音速度 范围-10 到10 默认是0 voice.Rate = 0; //语音音量 范围0到100 默认 100 voice.Volume = 100; } // Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Q)) { //同步朗读(同步朗读时系统会卡在这里,关都关不掉 直到朗读完毕才会往下执行,建议使用异步朗读) //voice.Speak("hello world 是大师级的卡拉胶SD卡圣诞节啊斯柯达SDKask大开杀戒的卡建档立卡"); //异步朗读 voice.Speak("狗是由狼驯化而来的。早在狩猎采集时代,人们就已驯养狗为狩猎时的助手。因此," + "狗算是人类最早驯养的家畜。河北武安磁山、河南新郑裴李岗、浙江余姚河姆渡等遗址,都发现了狗骨骼," + "足证其驯养历史之久远。 山东胶县三里河出土的狗形鬶,造型生动逼真,使我们得见新石器时代家犬的形态特征。" + "陕西西安半坡遗址出土的狗骨,头骨较小,额骨突出,肉裂齿小,下颌骨水平边缘弯曲,与华北狼有很大区别," + "说明人类驯养狗的历史确实很早。", SpeechVoiceSpeakFlags.SVSFlagsAsync); } if (Input.GetKeyDown(KeyCode.W)) { //暂停使用该对象的所有朗读进程,同步朗读下无法使用该方法暂停 voice.Pause(); } if (Input.GetKeyDown(KeyCode.E)) { //恢复该对象所对应的被暂停的朗读进程 voice.Resume(); } } private void OnApplicationQuit() { voice.Pause(); } }
下面是文件地址url:
https://files.cnblogs.com/files/qq2351194611/PC%E7%AB%AF%E8%AF%AD%E9%9F%B3%E8%BD%AC%E6%96%87%E5%AD%97.rar
复制直接下载
打包设置 ! ! ! 分Unity版本 有的版本打包出来没有声音
别人测试的2017.3版本的是不用调的,
我用的是2019.4.5f1版本的, 调到4.x打包出来没法运行,运行就崩溃,具体为什么暂时不清楚,(编辑器里面是好的,)
不调4.x 打包能运行,但是没声音,最后只能用插件了 RTVoice PRO
第二种方法RTVoice PRO插件的使用
下面是插件的地址 ()
链接:https://pan.baidu.com/s/1C6cvofGjQCA0XjUYCzeYzg
提取码:mg6h
下载之后导入unity
右击Hierarchy面板添加两个对象
这个一定要设置这样,要不然没有声音(如下图)
Mode 设置成 Speak Native
添加完成之后创建一个脚本
using Crosstales.RTVoice.Tool; using System.Collections; using System.Collections.Generic; using UnityEngine; public class TTS_Spake : MonoBehaviour { public SpeechText speechText; //把刚创建的SpeechText拖上来创建连接 //public TextFileSpeaker speaker;//阅读文本里面的文字 void Update() { if (Input.GetKeyDown (KeyCode.I )) { speechText.Speak(); } if (Input.GetKeyDown(KeyCode.O)) { speechText.Silence(); } //if (Input.GetKeyDown (KeyCode.K)) //{ // speaker.Speak(); //} } }
运行点击 I 即可听到 SpeechText 里面的text 内容
点击 按键O 静音 上面的静音是关闭当前的说话, 后面写程序的时候 ,要是连着点俩次就会有俩个重叠的声音
解决办法 Speaker.Silence(); (这是RTVoice版本的解决办法) 在脚本里面加上这句,连着点击就不会有重叠的声音了 (具体看自己写的程序使用)
speakr.SilenceOnDisable = false; (关闭所有语音播放)
注意如果你是要用中文,则需要切换到中文语种才能读,要不然报错(切换为ch或者cn都可以)
下面是他的语种
最后添加一个功能脚本

using Crosstales.RTVoice; using Crosstales.RTVoice.Tool; using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 文字转语音脚本 /// </summary> public class TTS_YuYin : MonoBehaviour { public SpeechText speechText; public static TTS_YuYin instance; private void Awake() { instance = this; } //说话 有文字提示的 public void Speaking_speak(string strin) { GameObjecting.instance.NPCtext_panel.SetActive(true); NPC_Text.instance.font_text.text = strin; speechText.Text = NPC_Text.instance.font_text.text; speechText.Speak(); } //光说话没有文字提示的 public void Speaking_meiyouTiShi(string strin) { speechText.Text = strin; speechText.Speak(); } //静音 public void Speaking_silence() { speechText.Silence(); Speaker.Silence(); } public void ShuiBianGuangGuangMoShi() { Speaking_speak(Type1_String()); } public string Type1_String() { string ss = "你已经进入随便逛逛模式,在此模式下可以在厂房内随意走动观察," + "但无法接取任务。点击1号NPC可以打开模式选择进入其他模式。"; return ss; } public string Type1_String(int aa) { string ss= string .Empty; switch (aa) { case 0: ss = "在机械拆装作业中,防护装备是必不可少的。下面我们一起对机器人拆装主要防护装备进行认识。" + "根据箭头指引前往换衣间。"; break; case 1: ss = "在机械拆装作业中,拆装工具是必不可少的。下面我们一起对机器人拆装主要拆装工具进行认识。" + "根据箭头指引前往工具台。"; break; case 2: ss = "机器人在进行拆卸前,需要进行一系列准备工作。准备工作包括清理工作场地、调整机器人位姿和" + "机器人排油。下面,让我们完成机器人拆卸前的准备工作。"; break; case 3: ss = "由于机器人工作后的姿态各异,有些姿态不方便拆卸,所以在拆卸前需要对机器人进行位姿的调整," + "让机器人处于一个合适的拆卸姿态。"; break; case 4: ss = "我们先检查自己的工作装备。进行机器的拆装时,必须穿戴好工作服、劳保鞋和戴好正确的手套。"; break; case 5: ss = "机器人的J5轴包含电机组件、手腕以及减速器三个部分。下面,让我们来学习J5轴的拆卸。"; break; case 6: ss = "机器人的J4轴包含小臂组件、电机组件和减速机组件。下面,让我们来学习J4轴的拆卸。"; break; case 7: ss = "机器人的J3轴包含电机组件和J3轴转座组件。下面,让我们来学习J3轴的拆卸。"; break; case 8: ss = "机器人的J2轴包含机器人的大臂、电机组件和J2轴减速机。下面,让我们来学习J2轴的拆卸。"; break; case 9: ss = "机器人的J1轴拆卸包含底座拆除、底座与J1轴转座分离、减速机拆卸等。下面,让我们来学习1轴的拆卸。"; break; default: break; } return ss; } }
以上就是插件的简单使用.(打包出来亲测可用)
(.NET Standard2.0 4.x都是可以的)
(补充: PC端打包出来只有自己电脑可以播放声音,换一台电脑就不行了,很迷茫 ,有知道是怎么回事的么?评论区可以告诉我,感谢 )
(解决办法PC打包没声音: 电脑系统是阉割版的,所以播放不了。如果不能正常播放,先下载“朗读女”这个软件,安装后,断网测试看能否播放,如果不能,说明系统缺少组件。百度搜索TTS修复工具(最好是官方的)修复即可。)。
Android 端打包出来是可以播放语音的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
2020-02-25 Unity 获取鼠标位置下的UGUI或3D物体
2020-02-25 Unity 移动端(android) 移动 缩放 旋转