Unity调用智谱API(简单操作 文本实时翻译)

代码展示: 
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;public class ZhiPuAi : MonoBehaviour
{// API的端点URLpublic string apiEndpoint = "https://open.bigmodel.cn/api/paas/v4/chat/completions";// API密钥,用于身份验证public string apiKey = "API_Key"; // 替换为您的API密钥public Text textToTranslate;public Text translatedTextDisplay;//翻译为的语种public string YuYan = "英语";// 游戏启动时自动调用翻译功能void Start(){string textToTranslateContent = textToTranslate.text;StartCoroutine(CallTranslateAPI(textToTranslateContent));}// 协程方法,用于发送翻译API请求IEnumerator CallTranslateAPI(string text){string jsonData = BuildJsonData(text);using (UnityWebRequest request = new UnityWebRequest(apiEndpoint, "POST")){byte[] postData = System.Text.Encoding.UTF8.GetBytes(jsonData);request.uploadHandler = (UploadHandler)new UploadHandlerRaw(postData);request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();request.SetRequestHeader("Authorization", "Bearer " + apiKey);request.SetRequestHeader("Content-Type", "application/json");yield return request.SendWebRequest();if (request.result != UnityWebRequest.Result.Success){Debug.LogError($"Error: {request.error}");}else{Debug.Log($"Successfully accessed API endpoint. Response: {request.downloadHandler.text}");// 处理响应数据Response response = JsonConvert.DeserializeObject<Response>(request.downloadHandler.text);if (response.choices != null && response.choices.Length > 0){Choice choice = response.choices[0];Debug.Log($"Translation found: {choice.message.content}");translatedTextDisplay.text = choice.message.content;}else{Debug.LogError("No translations found in the response.");}}}}// 根据API的要求构建JSON数据string BuildJsonData(string text){// 这里需要根据智谱清言API的要求构建JSON数据// 假设API要求如下格式:{"model": "glm-4", "messages": [{"role": "user", "content": "你好"}]}return "{\"model\": \"glm-4\",\"messages\": [{\"role\": \"user\",\"content\": \""+"请把," + text +",翻译为"+ YuYan+"\"}]}";}// 定义用于解析JSON响应的序列化类[System.Serializable]public class Response{public Choice[] choices;}// 定义翻译结果的序列化类[System.Serializable]public class Choice{public Message message;}// 定义消息的序列化类[System.Serializable]public class Message{public string content;}
}

让我们逐步分析每个部分:

1. 导入必要的命名空间

using Newtonsoft.Json; // 导入用于序列化和反序列化JSON数据的库
using System; // 导入System命名空间,包含常用的基础类型和类
using System.Collections; // 导入System.Collections命名空间,包含IEnumerator接口
using System.Collections.Generic; // 导入System.Collections.Generic命名空间,包含泛型集合类
using UnityEngine; // 导入Unity引擎的基本功能
using UnityEngine.Networking; // 导入Unity的网络请求相关功能
using UnityEngine.UI; // 导入Unity UI相关功能

这些导入语句允许我们使用脚本中定义的类和方法。

2. 定义公开的Unity组件引用

public Text textToTranslate; // Unity场景中的Text组件,用于显示要翻译的文本
public Text translatedTextDisplay; // Unity场景中的Text组件,用于显示翻译后的文本
// 翻译为的语种
public string YuYan = "英语";

这些变量引用Unity场景中的Text组件,用于显示要翻译的文本和翻译后的文本。

3. 游戏启动时自动调用翻译功能

void Start()
{string textToTranslateContent = textToTranslate.text;StartCoroutine(CallTranslateAPI(textToTranslateContent));
}

在游戏启动时,脚本会自动调用CallTranslateAPI协程,以便在游戏启动时翻译文本。

4. 协程方法,用于发送翻译API请求

IEnumerator CallTranslateAPI(string text)
{string jsonData = BuildJsonData(text);using (UnityWebRequest request = new UnityWebRequest(apiEndpoint, "POST")){byte[] postData = System.Text.Encoding.UTF8.GetBytes(jsonData);request.uploadHandler = (UploadHandler)new UploadHandlerRaw(postData);request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();request.SetRequestHeader("Authorization", "Bearer " + apiKey);request.SetRequestHeader("Content-Type", "application/json");yield return request.SendWebRequest();if (request.result != UnityWebRequest.Result.Success){Debug.LogError($"Error: {request.error}");}else{Debug.Log($"Successfully accessed API endpoint. Response: {request.downloadHandler.text}");// 处理响应数据Response response = JsonConvert.DeserializeObject<Response>(request.downloadHandler.text);if (response.choices != null && response.choices.Length > 0){Choice choice = response.choices[0];Debug.Log($"Translation found: {choice.message.content}");translatedTextDisplay.text = choice.message.content;}else{Debug.LogError("No translations found in the response.");}}}
}

CallTranslateAPI方法是一个协程,它负责构建JSON格式的请求数据,创建一个UnityWebRequest对象,发送POST请求到API,并处理响应。如果响应成功,它将解析JSON数据,提取翻译结果,并将其显示在Unity UI中的translatedTextDisplay组件上。

5. 根据API的要求构建JSON数据

string BuildJsonData(string text)
{// 这里需要根据智谱清言API的要求构建JSON数据// 假设API要求如下格式:{"model": "glm-4", "messages": [{"role": "user", "content": "你好"}]}return "{\"model\": \"glm-4\",\"messages\": [{\"role\": \"user\",\"content\": \""+"请把," + text +",翻译为"+ YuYan+"\"}]}";
}

BuildJsonData方法根据API的要求构建JSON格式的请求数据。在这个例子中,它假设API要求包含一个名为model的字段和一个名为messages的数组,其中包含一个包含rolecontent字段的对象。

6. 定义用于解析JSON响应的序列化类

[System.Serializable]
public class Response
{public Choice[] choices;
}[System.Serializable]
public class Choice
{public Message message;
}[System.Serializable]
public class Message
{public string content;
}

这三个类定义了API响应数据的结构。Response类包含一个名为choices的数组,其中包含Choice对象的数组。Choice类包含一个名为messageMessage对象。Message类包含一个名为content的字段,用于存储翻译后的文本。

这些类使用了Unity的[Serializable]特性,这意味着Unity编辑器可以显示和编辑这些类的属性。 

总结 :

脚本的主要功能是使用Unity的UnityWebRequest与智谱清言的API进行交互,以实现文本翻译功能。当用户在游戏运行时输入文本时,它会发送一个POST请求到API进行翻译,并将翻译结果显示在Unity UI中的translatedTextDisplay组件上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/7618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux复习

与"区别 在Linux中&#xff0c;单引号&#xff08;&#xff09;和双引号&#xff08;"&#xff09;用于定义字符串&#xff0c;但它们在处理变量扩展和转义字符时有所不同。以下是具体分析&#xff1a; 1. **变量扩展**&#xff1a;在双引号内&#xff0c;变量可以…

阿里巴巴1688商品详情API返回值深度剖析:精准获取商品信息的关键

在电子商务日益繁荣的今天&#xff0c;阿里巴巴1688作为中国领先的B2B平台&#xff0c;汇聚了海量的供应商和商品信息。对于商家、开发者以及希望深入了解商品数据的用户来说&#xff0c;如何通过有效的方式获取这些商品信息成为了一个重要议题。阿里巴巴1688商品详情API的出现…

Semi-decentralized Federated Ego Graph Learning for Recommendation

论文概况 本文是2023年WWW的一篇联邦推荐论文&#xff0c;提出了一个半去中心化的联合自我图学习框架。 Introduction 作者提出问题 现有的推荐方法收集所有用户的自我图来组成一个全局图&#xff0c;导致隐私风险。联合推荐系统已被提出来缓解隐私问题&#xff0c;但在客户…

zabbix监控方式(zabbix-trapper)

中文&#xff1a;zabbix采集器&#xff0c;即zabbix sender 。 Zabbix-Trapper 监控方式可以一次批量发送数据给Zabbix Server&#xff0c;与主动模式不同&#xff0c;Zabbix-Trapper 可以让用户控制数据的发送&#xff0c;而不用Zabbix-Agent进程控制&#xff0c;这意味着可以…

PE文件(四)FileBuffer-ImageBuffer

文件执行的总过程 当文件从硬盘中读入虚拟内存&#xff08;FileBuffer&#xff09;中时&#xff0c;文件数据会被原封不动的复制一份到虚拟内存中&#xff0c;然后进行拉伸对齐。此时虚拟内存中文件数据叫做文件印象或者内存印象&#xff0c;即ImageBuffer。此时ImageBuffer中…

42.乐理基础-拍号-看懂拍号的意义

到这必然是已经知道 X、Y的意思了&#xff1a; 然后带入数字&#xff1a; 然后念拍号的时候&#xff0c;在国内&#xff0c;百分之九十的地方是从下往上念&#xff0c;念作四二拍&#xff0c;还有百分之十的地方是和国外一样&#xff0c;从上往下念&#xff0c;念作二四拍&…

使用vant组件库

官方文档&#xff1a;Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. vue2对应vant2&#xff0c;vue3对应vant3/vant4 1.安装 官网的快速上手里都有介绍。 # Vue 3 项目&#xff0c;安装最新版 Vant&#xff1a; npm i vant -S# Vue 2 项目&am…

跨境支付行业研究

1. 行业基本情况 随着全球人均购买力增强、互联网普及率提升、支付渠道的进一步成熟、物流等配套设施的完善&#xff0c;网络购物已经成为全球兴起的消费习惯。另一方面&#xff0c;跨境电商对传统贸易的替代已经成为趋势。跨境电商在交易成本和便利程度上都有明显的优势 图1 …

【问题记录】ORA-31603 对象 ““ 属于类型 , 在方案 ““ 中未找到,存储过程procedure执行报错

文章目录 问题&#xff1a;解决方法 问题&#xff1a; ORA-31603: 对象 “V_RST_UTC01390” 属于类型 VIEW, 在方案 “RISKCONFIG_BAK” 中未找到 ORA-06512: 在 “SYS.DBMS_METADATA”, line 5805 ORA-06512: 在 “SYS.DBMS_METADATA”, line 8344 ORA-06512: 在 line 1&…

大数据API技术分享:使用API接口采集淘宝数据(商品详情丨关键词搜索丨店铺所有商品)

使用API接口采集淘宝数据&#xff08;商品详情、关键词搜索、店铺所有商品&#xff09;是大数据领域常见的应用场景。以下是一些关于如何使用API接口进行这些操作的技术分享&#xff1a; 1. 获取API权限 首先&#xff0c;你需要在淘宝开放平台注册成为开发者&#xff0c;并创建…

想做视频号小店,为何不建议开通个体店?开店步骤+做店思路如下

我是王路飞。 如果你想在视频号开通店铺的话&#xff0c;那么一定不要使用个体执照开通个体店&#xff1f; 这是为什么呢&#xff1f; 原因很简单&#xff0c;视频号个体店是无法入驻优选联盟的&#xff0c;只能企业店可以入驻。 因为现阶段视频号小店的自然流量很少&#…

五一 作业

#include <iostream>using namespace std; class Num { private:int a; public:Num() {}Num(int a):a(a){}//设置a的值void set(int a){this->aa;}//1-a的和void Sum(){if(a<1){cout<<"a<1"<<endl;return;}int sum0;for(int i1;i<a;i)…

开源模型应用落地-CodeQwen模型小试-探索更多使用场景(三)

一、前言 代码专家模型是基于人工智能的先进技术&#xff0c;它能够自动分析和理解大量的代码库&#xff0c;并从中学习常见的编码模式和最佳实践。这种模型可以提供准确而高效的代码建议&#xff0c;帮助开发人员在编写代码时避免常见的错误和陷阱。 通过学习代码专家模型&…

使用QT开发ROS可视化界面

Q&#xff1a; undefined reference to non-virtual thunk to MyViz A&#xff1a; 该问题主要由于QT中的MOC File没有正确生成&#xff0c;导致虚函数列表出现问题。另外&#xff0c;需要注意虚函数的virtual关键字需要放在类的声明&#xff0c;不能放在类的定义。 qt5_wrap…

获取Android Native堆栈

文章目录 工具和方法获取当前线程的堆栈信息获取任意线程的堆栈信息GCC生成符号的规律总结 在Android系统中&#xff0c;我们有时需要获取Native层的堆栈信息&#xff0c;例如在进行性能分析、问题定位和调试等场景。本文将介绍如何在Android Native层获取堆栈信息&#xff0c;…

计算机视觉——OpenCV Otsu阈值法原理及实现

算法简介 Otsu阈值法&#xff0c;也被称为大津算法&#xff0c;是一种在图像处理中广泛使用的自动阈值分割技术。这种方法由日本学者大津展之于1979年提出&#xff0c;旨在根据图像的灰度直方图来自动选择最佳全局阈值。Otsu阈值法的核心思想是最小化类内方差或最大化类间方差…

《设计一款蓝牙热敏打印机》

主控芯片用易兆威蓝牙ic&#xff0c;通讯接口&#xff1a;蓝牙、串口、usb 安卓apk用java kotlin编写、上位机用Qt编写。

【微磁学】对于现阶段微磁学仿真发展的思考1-理论篇

系列文章目录 对于现阶段微磁学仿真发展的思考1-理论篇 对于现阶段微磁学仿真发展的思考2-工具篇 文章目录 系列文章目录前言一、微磁学的数学区二、微磁学的物理区三、微磁学仿真现存的一些问题四、微磁学代码区&#xff1a;上手操作&#xff0c;理解更深入栗子1: 能量最小化…

【代码随想录】day50

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、123买卖股票的最佳时机III二、188买卖股票的最佳时机IV 一、123买卖股票的最佳时机III 超时了。。。 class Solution { public:int helper(vector<int>…

lsof 查看进程是被哪个文件占用

要查看进程被哪个文件占用&#xff0c;可以使用lsof命令&#xff08;list open files&#xff09;。可以使用以下命令来查看指定进程的打开文件&#xff1a; lsof -p <PID>其中&#xff0c;<PID>是要查询的进程的进程ID。这将列出指定进程打开的所有文件。如果想查…