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的数组,其中包含一个包含role和content字段的对象。
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类包含一个名为message的Message对象。Message类包含一个名为content的字段,用于存储翻译后的文本。
这些类使用了Unity的[Serializable]特性,这意味着Unity编辑器可以显示和编辑这些类的属性。
总结 :
脚本的主要功能是使用Unity的UnityWebRequest与智谱清言的API进行交互,以实现文本翻译功能。当用户在游戏运行时输入文本时,它会发送一个POST请求到API进行翻译,并将翻译结果显示在Unity UI中的translatedTextDisplay组件上。
相关文章:
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…...
Android 开机启动扫描SD卡apk流程源码分析
在开机的时候,装在SD卡的apk和装在系统盘的apk扫描过程不一样,系统盘apk在系统启动过程中扫描,而SD卡上的就不是,等系统启动好了才挂载、扫描,下面就说下SD扫描的流程: 在SystemServer启动MountService&am…...
如何恢复回收站中被删除的文件?3个恢复策略,实测有用!
“刚刚一不小心把回收站清空了,大家有什么好用的方法可以帮我恢复回收站中删除的文件吗?快帮帮我吧!” 在使用电脑的过程中,我们有时可能会不小心将重要的文件或文件夹删除到回收站,并且随后可能进一步从回收站中彻底删…...
Unity---版本控制软件
13.3 版本控制——Git-1_哔哩哔哩_bilibili Git用的比较多 Git 常用Linux命令 pwd:显示当前所在路径 ls:显示当前路径下的所有文件 tab键自动补全 cd:切换路径 mkdir:在当前路径下创建一个文件夹 clear:清屏 vim…...
基于大模型的idea提炼:围绕论文和引用提炼idea之ResearchAgent
前言 对本博客比较熟悉的朋友知道,我司论文项目组正在基于大模型做论文的审稿(含CS英文论文审稿、和金融中文论文审稿)、翻译,且除了审稿翻译之外,我们还将继续做润色/修订、idea提炼(包含论文检索),是一个大的系统,包…...
前端深度扩展
1 为什么要有webpack 模块化管理:构建工具支持Common JS、ES6模块等规范;依赖管理:在大型项目中,手动管理文件依赖关系。webpack可以自动分析项目中的依赖关系,将其打包成1个或多个优化过的文件,减少页面加…...
雷军-2022.8小米创业思考-6-互联网七字诀之专注:有所为,有所不为;克制贪婪,少就是多;一次解决一个最迫切的需求
第六章 互联网七字诀 专注、极致、口碑、快,这就是我总结的互联网七字诀,也是我对互联网思维的高度概括。 专注 从商业角度看,专注就是要“把鸡蛋尽量放在一个篮子里”。这听起来似乎有些不合理,大家的第一反应可能是“风险会不会…...
【禅道客户案例】北大软件携手禅道,开启产品化之路新征程
在项目制项目模式下,软件公司根据客户的需求进行短期项目开发,具有灵活、高效、受众面广的优点,在业界得到了广泛的应用。但这种模式也面临诸多挑战,软件公司需要不断地开发新项目来维持业务增长,由于没有自己的产品也…...
解释泛型(Generics)在Java中的用途
在Java中,泛型(Generics)是一种在编译时期提供类型检查和约束的机制,它使得类和接口可以被参数化,即你可以定义一个类或接口,并通过参数传入具体的类型。泛型增加了代码的复用性和类型安全性,同…...
给网站网页PHP页面设置密码访问代码
将MkEncrypt.php文件上传至你网站根目录下或者同级目录下。 MkEncrypt.php里面添加代码,再将调用代码添加到你需要加密的页进行调用 MkEncrypt(‘123456’);括号里面123456修改成你需要设置的密码。 密码正确才能进去页面,进入后会存下cookies值&…...
124.反转链表(力扣)
题目描述 代码解决(思路1:双指针) class Solution { public:ListNode* reverseList(ListNode* head) {ListNode*temp;//保存cur下一个节点ListNode*curhead;ListNode*preNULL;while(cur){tempcur->next;// 保存一下 cur的下一个节点&#…...
【数据库原理及应用】期末复习汇总高校期末真题试卷06
试卷 一、选择题 1. ________是长期存储在计算机内的有组织,可共享的数据集合. A.数据库管理系统 B.数据库系统 C.数据库 D.文件组织 1. 有12个实体类型,并且它们之间存在15个不同的二元联系,其中4个是1:1联系类型,5…...
Offline:IQL
ICLR 2022 Poster Intro 部分离线强化学习的对价值函数采用的是最小化均方bellman误差。而其中误差源自单步的TD误差。TD误差中对target Q的计算需要选取一个max的动作,这就容易导致采取了OOD的数据。因此,IQL取消max,,通过一个期望回归算子…...
图像涂哪就动哪!Gen-2新功能“神笔马良”爆火,网友:急急急
AI搞视频生成,已经进化到这个程度了?! 对着一张照片随手一刷,就能让被选中的目标动起来! 明明是一辆静止的卡车,一刷就跑了起来,连光影都完美还原: 原本只是一张火灾照片࿰…...
【管理篇】管理三步曲:任务执行(三)
目录标题 多任务并行如何应对?如何确保项目有效的执行项目执行过程中常见的问题1、目标不明确2、责任不明确3、流程不健全4、沟通不到位 如何有效执行任务 如何让流程机制有效的执行 研究任务管理,就是为了把事情做出来,产出实实在在的业绩和成果&#…...
使用idea管理docker
写在前面 其实idea也提供了docker的管理功能,比如查看容器列表,启动容器,停止容器等,本文来看下如何管理本地的docker daemon和远程的dockers daemon。 1:管理本地 双击shift,录入service: …...
【Git】Commit后进行事务回滚
起因 因为一直使用git add .,在学习pytorch中添加了一个较大的数据集后,导致git push失败,而这个大数据集并不是必须要上传到仓库的,但是因为自己在设置.gitignore前已经进行了git comit,所以,需要进行事务…...
一分钟教你学浪app视频怎么缓存
你是否在学浪app上苦苦寻找如何缓存视频的方法?你是否想快速、轻松地观看自己喜欢的视频内容?那么,让我们一起探索一分钟教你如何缓存学浪app视频的技巧吧! 学浪下载工具我已经打包好了,有需要的自己下载一下 学浪下…...
stylus详解与引入
Stylus 是一个基于 Node.js 的 CSS 预处理器,它允许开发者以一种类似于脚本的方式编写 CSS 代码,从而创建出更加健壮、动态和富有表现力的样式表。Stylus 的特点包括: 1. 基于 JavaScript:由于 Node.js 是一个 JavaScript 运行环…...
低功耗数字IC后端设计实现典型案例| UPF Flow如何避免工具乱用Always On Buffer?
下图所示为咱们社区低功耗四核A7 Top Hierarchical Flow后端训练营中的一个案例,设计中存在若干个Power Domain,其中Power Domain2(简称PD2)为default Top Domain,Power Domain1(简称PD1)为一个需要power off的domain&…...
Qwen2.5-VL视觉定位模型效果展示:一句话精准框出图中目标
Qwen2.5-VL视觉定位模型效果展示:一句话精准框出图中目标 1. 视觉定位技术的新突破 想象一下,你正在翻看手机相册寻找一张特定照片——"去年夏天在海边穿红色泳衣的那张"。传统相册需要你一张张翻看,而搭载Qwen2.5-VL视觉定位技术…...
嘎嘎降AI退款申请完整流程:不达标怎么拿回费用的具体步骤
嘎嘎降AI退款申请完整流程:不达标怎么拿回费用的具体步骤 这篇教程来自实操经验。帮三个同学处理过论文AI率,加上自己的,前后操作了十几次。把流程总结成教程,尽量详细。 核心工具推荐嘎嘎降AI(www.aigcleaner.com&a…...
从固定到自适应:手把手教你改进Savitzky-Golay滤波器,告别边界效应和参数调优烦恼
从固定到自适应:手把手教你改进Savitzky-Golay滤波器,告别边界效应和参数调优烦恼 信号处理领域的从业者常常面临一个两难选择:如何在去除噪声的同时,尽可能保留信号的关键特征?传统Savitzky-Golay滤波器虽然在一定程度…...
GTE中文文本嵌入模型部署案例:中小企业文档去重降本提效
GTE中文文本嵌入模型部署案例:中小企业文档去重降本提效 1. 项目背景与价值 中小企业日常运营中会产生大量文档资料,包括合同文件、产品说明、客户沟通记录、内部报告等。这些文档往往存在重复内容,导致存储空间浪费、信息检索困难、管理成…...
OpenClaw多模态扩展:Qwen3.5-4B-Claude分析截图内容
OpenClaw多模态扩展:Qwen3.5-4B-Claude分析截图内容 1. 为什么需要截图分析能力 上周我在整理项目文档时遇到了一个典型问题:客户发来的需求变更截图散落在十几个微信对话中,我需要手动对照图片内容更新PRD文档。这种机械操作不仅耗时&…...
3分钟掌握Magika:AI驱动的文件类型检测终极指南
3分钟掌握Magika:AI驱动的文件类型检测终极指南 【免费下载链接】magika 项目地址: https://gitcode.com/GitHub_Trending/ma/magika Magika是一款基于深度学习的智能文件类型检测工具,由Google开源,能够快速准确地识别各种文件的内容…...
3个实用技巧让你轻松掌握Unity游戏插件框架BepInEx
3个实用技巧让你轻松掌握Unity游戏插件框架BepInEx 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx作为一款功能强大的Unity游戏插件框架,为玩家和开发者提供了…...
小程序原生组件层级穿透实战:cover-view与canvas的深度优化
1. 为什么需要cover-view与canvas层级穿透 在小程序开发中,原生组件的层级问题一直是让开发者头疼的难题。特别是当我们需要在canvas、video等原生组件上叠加按钮、文字提示时,普通的view组件根本无法实现预期效果。这是因为小程序的原生组件采用了特殊的…...
如何让2008-2017年的老款Mac重获新生?OpenCore Legacy Patcher终极指南
如何让2008-2017年的老款Mac重获新生?OpenCore Legacy Patcher终极指南 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为手中的老款Mac无法安装最新macOS…...
ICP算法实战:从Point-to-Plane到VGICP,5种点云配准方法性能对比(附Python代码)
ICP算法实战:从Point-to-Plane到VGICP,5种点云配准方法性能对比(附Python代码) 在三维视觉和机器人领域,点云配准是构建环境地图、实现定位导航的基础技术。当我们需要将多个视角采集的点云数据拼接成一个完整的三维模…...
