找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 470|回复: 0

【AI私房菜】Unity 接入 DeepSeek AI 并实现语音交互

[复制链接]
发表于 2025-6-18 20:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

×
作者:微信文章
本教程将带你完整实现 Unity 集成 DeepSeek AI,并添加语音输入(麦克风识别)和语音输出(TTS 朗读)功能,打造一个完整的 AI 语音助手应用。

## **📝 教程目录**
1. **准备工作**  2. **Unity 接入 DeepSeek API(HTTP 请求)**  3. **添加语音输入(麦克风识别)**  4. **添加语音输出(TTS 朗读)**  5. **构建 UI 交互界面**  6. **进阶优化(多语言、离线识别、错误处理)**  7. **测试与发布**  

## **1️⃣ 准备工作**

### **1.1 获取 DeepSeek API Key**

1. 访问 [DeepSeek 官网](https://deepseek.com) 并注册账号

2. 进入 **API 管理** 页面,获取你的 `API Key`

### **1.2 创建 Unity 项目**

- **Unity 版本**: 2020 或更高

- **项目模板**: 3D 或 2D 均可

- **推荐包安装**(Window > Package Manager):

  - `TextMeshPro`(更好的 UI 文本显示)

  - `Newtonsoft.Json`(可选,更强大的 JSON 解析)

### **1.3 项目结构**
```Assets/├─ Scripts/│   ├─ DeepSeekManager.cs       // API 交互│   ├─ VoiceRecognition.cs      // 语音输入│   ├─ TextToSpeechManager.cs   // 语音输出│   └─ UIController.cs          // UI 控制├─ Scenes/│   └─ Main.unity               // 主场景└─ Resources/    └─ ...                      // 音频、字体等资源```

## **2️⃣ Unity 接入 DeepSeek API**

### **2.1 创建 `DeepSeekManager.cs`**
```csharpusing UnityEngine;using UnityEngine.Networking;using System.Collections;using System.Text;public class DeepSeekManager : MonoBehaviour{    private const string API_URL = "https://api.deepseek.com/v1/chat/completions";    private string apiKey = "YOUR_API_KEY"; // 替换成你的 API Key    public static DeepSeekManager Instance { get; private set; }    private void Awake()    {        if (Instance == null)        {            Instance = this;            DontDestroyOnLoad(gameObject);        }        else        {            Destroy(gameObject);        }    }    public void SendMessageToDeepSeek(string message, System.Action<string> callback)    {        StartCoroutine(PostRequest(message, callback));    }    private IEnumerator PostRequest(string message, System.Action<string> callback)    {        var requestData = new        {            model = "deepseek-chat",            messages = new[]            {                new { role = "user", content = message }            },            temperature = 0.7        };        string jsonData = JsonUtility.ToJson(requestData);        byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonData);        using (UnityWebRequest request = new UnityWebRequest(API_URL, "POST"))        {            request.uploadHandler = new UploadHandlerRaw(bodyRaw);            request.downloadHandler = new DownloadHandlerBuffer();            request.SetRequestHeader("Content-Type", "application/json");            request.SetRequestHeader("Authorization", $"Bearer {apiKey}");            yield return request.SendWebRequest();            if (request.result == UnityWebRequest.Result.Success)            {                string responseJson = request.downloadHandler.text;                var response = JsonUtility.FromJson<DeepSeekResponse>(responseJson);                callback?.Invoke(response.choices[0].message.content);            }            else            {                Debug.LogError($"Error: {request.error}");                callback?.Invoke($"Error: {request.error}");            }        }    }    [System.Serializable]    private class DeepSeekResponse    {        public Choice[] choices;    }    [System.Serializable]    private class Choice    {        public Message message;    }    [System.Serializable]    private class Message    {        public string content;    }}```
### **2.2 测试 API 调用**
```csharp// 在某个脚本里测试:DeepSeekManager.Instance.SendMessageToDeepSeek("你好,DeepSeek!", (response) => {    Debug.Log("AI 回复:" + response);});```
✅ **运行测试**:确保能在 Console 看到 DeepSeek 的回复。

## **3️⃣ 添加语音输入(麦克风识别)**

### **3.1 创建 `VoiceRecognition.cs`**
```csharpusing UnityEngine;using UnityEngine.Windows.Speech;public class VoiceRecognition : MonoBehaviour{    private DictationRecognizer dictationRecognizer;    public bool IsListening { get; private set; }    private void Start()    {        dictationRecognizer = new DictationRecognizer();        dictationRecognizer.DictationResult += OnDictationResult;        dictationRecognizer.DictationError += OnDictationError;    }    public void StartListening()    {        if (!IsListening)        {            dictationRecognizer.Start();            IsListening = true;            Debug.Log("开始语音识别...");        }    }    public void StopListening()    {        if (IsListening)        {            dictationRecognizer.Stop();            IsListening = false;            Debug.Log("停止语音识别");        }    }    private void OnDictationResult(string text, ConfidenceLevel confidence)    {        Debug.Log("识别结果: " + text);        DeepSeekManager.Instance.SendMessageToDeepSeek(text, (response) =>        {            Debug.Log("AI 回复: " + response);            TextToSpeechManager.Instance.Speak(response); // 语音播报回复        });    }    private void OnDictationError(string error, int result)    {        Debug.LogError("语音识别错误: " + error);        IsListening = false;    }    private void OnDestroy()    {        if (dictationRecognizer != null)        {            dictationRecognizer.Stop();            dictationRecognizer.Dispose();        }    }}```### **3.2 测试语音识别**```csharp// 测试代码:VoiceRecognition voiceRecognition = GetComponent<VoiceRecognition>();voiceRecognition.StartListening(); // 开始录音voiceRecognition.StopListening();  // 停止录音```
✅ **运行测试**:对着麦克风说话,检查 Unity Console 是否显示识别结果。

## **4️⃣ 添加语音输出(TTS 朗读)**

### **4.1 创建 `TextToSpeechManager.cs`**
```csharpusing UnityEngine;using UnityEngine.Windows.Speech;public class TextToSpeechManager : MonoBehaviour{    public static TextToSpeechManager Instance { get; private set; }    private SpeechSynthesizer synthesizer;    private AudioSource audioSource;    private void Awake()    {        if (Instance == null)        {            Instance = this;            DontDestroyOnLoad(gameObject);            audioSource = gameObject.AddComponent<AudioSource>();            synthesizer = new SpeechSynthesizer();        }        else        {            Destroy(gameObject);        }    }    public void Speak(string text)    {        if (string.IsNullOrEmpty(text)) return;        synthesizer.Speak(text, OnSpeechSynthesized);    }    private void OnSpeechSynthesized(AudioClip clip)    {        if (clip != null)        {            audioSource.clip = clip;            audioSource.Play();        }    }    private void OnDestroy()    {        if (synthesizer != null)            synthesizer.Dispose();    }}```

### **4.2 测试 TTS**
```csharpTextToSpeechManager.Instance.Speak("你好,我是 DeepSeek AI!");```
✅ **运行测试**:应该能听到 AI 的语音回复。

## **5️⃣ 构建 UI 交互界面**

### **5.1 创建 UI 元素**
1. **Canvas**(UI 主画布)   - **ChatPanel**(ScrollView,显示对话)   - **InputField**(文本输入框)   - **SendButton**(发送按钮)   - **MicButton**(麦克风按钮)   - **ListeningIndicator**("正在聆听..." 提示)

### **5.2 创建 `UIController.cs`**
```csharpusing UnityEngine;using UnityEngine.UI;using TMPro;public class UIController : MonoBehaviour{    public TMP_InputField inputField;    public Button sendButton;    public Button micButton;    public TextMeshProUGUI chatDisplay;    public GameObject listeningIndicator;    private void Start()    {        sendButton.onClick.AddListener(OnSendButtonClick);        micButton.onClick.AddListener(OnMicButtonClick);    }    private void OnSendButtonClick()    {        string message = inputField.text;        if (!string.IsNullOrEmpty(message))        {            AddMessage("You: " + message);            inputField.text = "";            DeepSeekManager.Instance.SendMessageToDeepSeek(message, (response) =>            {                AddMessage("AI: " + response);                TextToSpeechManager.Instance.Speak(response);            });        }    }    private void OnMicButtonClick()    {        if (!VoiceRecognition.Instance.IsListening)        {            listeningIndicator.SetActive(true);            VoiceRecognition.Instance.StartListening();        }        else        {            listeningIndicator.SetActive(false);            VoiceRecognition.Instance.StopListening();        }    }    public void AddMessage(string message)    {        chatDisplay.text += "\n" + message;        // 自动滚动到底部        Canvas.ForceUpdateCanvases();        chatDisplay.GetComponentInParent<ScrollRect>().verticalNormalizedPosition = 0;    }}```
✅ **运行测试**:现在可以 **打字发送** 或 **语音输入**,AI 会 **文字+语音回复**!

## **6️⃣ 进阶优化**

### **6.1 多语言支持**
```csharp// 在 TextToSpeechManager 添加:public void SetLanguage(string languageCode){    synthesizer.SetOutputToDefaultAudioDevice(languageCode);}// 在 DeepSeekManager 检测语言:if (message.Contains("你好"))     TextToSpeechManager.Instance.SetLanguage("zh-CN");else     TextToSpeechManager.Instance.SetLanguage("en-US");```### **6.2 离线语音识别(备用方案)**```csharpusing UnityEngine.Windows.Speech;public class OfflineKeywordDetector : MonoBehaviour{    private KeywordRecognizer keywordRecognizer;    private string[] keywords = { "Hey AI", "Start Listening" };    void Start()    {        keywordRecognizer = new KeywordRecognizer(keywords);        keywordRecognizer.OnPhraseRecognized += OnKeywordRecognized;        keywordRecognizer.Start();    }    private void OnKeywordRecognized(PhraseRecognizedEventArgs args)    {        Debug.Log("唤醒词识别: " + args.text);        VoiceRecognition.Instance.StartListening();    }    void OnDestroy()    {        keywordRecognizer?.Dispose();    }}```

### **6.3 错误处理**
```csharp// 在 DeepSeekManager 的 PostRequest 添加:if (request.result == UnityWebRequest.Result.ConnectionError){    UIController.Instance.AddMessage("网络错误,请检查连接!");}else if (request.responseCode == 401){    UIController.Instance.AddMessage("API Key 无效!");}```

## **7️⃣ 测试与发布**

### **7.1 测试功能**
- **文本聊天** ✅  - **语音输入** ✅  - **语音输出** ✅  - **多语言切换** ✅  

### **7.2 发布设置**

- **PC 端**:直接 Build(Windows/macOS)

- **Android/iOS**:需额外配置麦克风权限:
  ```xml  <!-- AndroidManifest.xml -->  <uses-permission android:name="android.permission.RECORD_AUDIO" />  ```
- **WebGL**:需使用 `WebMicrophone` 替代 `UnityEngine.Windows.Speech`

## **🎉 完成!**

现在你的 Unity 应用已经集成了 DeepSeek AI + 语音交互,可以扩展成:

- **智能语音助手**

- **AI 客服系统**

- **语音交互游戏 NPC**

如果有问题,欢迎在评论区交流! 🚀
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

Archiver|手机版|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网

GMT+2, 2025-7-8 13:43 , Processed in 0.085547 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表