Unity接入人工智能

在Unity接入人工智能中,本篇实现了接入百度智能云ai进行npc智能对话,通过http方式,并非插件,适合于所有支持Http链接的Unity版本。对于Chartgpt可以参考本篇内容的实现过程。

1-4节讲解测试,第5节讲解Unity中的实现,建议从头开始阅读。

一、创建应用

1.1注册百度智能云账号

按照图片顺序依次点击

1.2开始创建应用

1.2.1搜索并打开图中产品

1.2.2打开应用接入

 1.2.3创建应用

 

 这里全部选择,输入对应信息,然后创建,点击创建好的应用的详情,找到

API Key与Secret Key,后续用于获取access_token。

注意:这俩都是私密内容,避免泄露!

二、开通应用

找到计费管理并进入,点击开通付费,找到ERNIE-Speed-128K并开通,本篇使用ERNIE-Speed-128K是因为这个免费,也有其他免费的,有需要自行开通,后文以ERNIE-Speed-128K直接讲解,不再赘述。

三、获取access_token

3.1打开access_token获取文档

按照图片内容依次点击就好

 

 

 

3.2测试接口

重点内容已经使用红色框框出

我个人喜欢使用apipost,测试接口有很多软件,大家自行解决,这里使用apipost作为案例

 

 在对应的地方输入对应的参数就可以了,这里用到了上面保存的API Key和Secret Key,输入完后发送等待响应。

四、发送对话

4.1测试对话接口

 

 

 响应中的result就是回复的内容了

现在已经测试完毕,证明此方法可以,现在将他写入Unity中

五、将测试正确内容写入Unity

5.1创建需要的ui

Scroll View用于放文本,避免一些回复文本过长导致看不到或其他效果

在content添加组件,按照图片设置

5.2创建c#脚本,附在物体上(任意物体)

5.3编写脚本

public Text OutPutText;
public Button btn;
public InputField inputField;
private string GetToken_Url;
private string SendHttp_Url= "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-speed-128k";
private string grant_type = "client_credentials";
private string client_id = "你的API Key:";
private string client_secret = "你的Secret Key:";
private string access_token;
// Start is called before the first frame update
void Start()
{GetToken_Url = "https://aip.baidubce.com/oauth/2.0/token?grant_type="+ grant_type + "&client_id=" + client_id + "&client_secret=" + client_secret;StartCoroutine(GetToken(GetToken_Url));btn.onClick.AddListener(() => {StartSend();});
}
void Update()
{if (Input.GetKeyDown(KeyCode.Return)){StartSend();}
}
IEnumerator GetToken(string GetToken_Url)
{UnityWebRequest request = new UnityWebRequest(GetToken_Url, "POST");request.downloadHandler = new DownloadHandlerBuffer();request.SetRequestHeader("Content-Type", "application/json"); yield return request.SendWebRequest();if (request.result != UnityWebRequest.Result.ConnectionError && request.result != UnityWebRequest.Result.ProtocolError){string pattern = "\"access_token\":\"(.*?)\"";Match match = Regex.Match(request.downloadHandler.text, pattern);access_token = match.Groups[1].Value;SendHttp_Url += "?access_token=" + access_token;}else{Debug.LogError(request.error);}request.Dispose();
}
IEnumerator SendHttp(string SendHttp_Url)
{UnityWebRequest sendrequest = new UnityWebRequest(SendHttp_Url,"POST");string Sessagejson = "{" +"\"" + "messages" + "\"" + ":" + "[" +"{" +"\"" + "role" + "\"" + ":" + "\"" + "user" + "\"" + "," +"\"" + "content" + "\"" + ":" + "\"" + inputField.text + "\"" +"}" +"]" +"}";byte[] SendJson = new UTF8Encoding().GetBytes(Sessagejson);sendrequest.uploadHandler = new UploadHandlerRaw(SendJson);sendrequest.downloadHandler = new DownloadHandlerBuffer();sendrequest.SetRequestHeader("Content-Type", "application/json");yield return sendrequest.SendWebRequest();if (sendrequest.result != UnityWebRequest.Result.ConnectionError && sendrequest.result != UnityWebRequest.Result.ProtocolError){string pattern2 = "\"result\":\"(.*?)\"";Match match2 = Regex.Match(sendrequest.downloadHandler.text, pattern2);OutPutText.text = match2.Groups[1].Value;}else{Debug.LogError(sendrequest.error);}sendrequest.Dispose();
}
private void StartSend()
{OutPutText.text = "正在回复中,请稍等...";StartCoroutine(SendHttp(SendHttp_Url));
}

5.3.1GetToken_Url是获取access_token的链接

5.3.2SendHttp_Url是发送消息的链接

5.3.3grant_type与client_id与client_secret时链接的一部分,其中client_id是你保存的API Key,client_secret是你保存的Secret Key

5.3.4access_token是获取到的

5.3.5在Start中获取access_token,并给发送按钮添加事件

5.3.6Sessagejson是发送的json文件

如果对于Unity发送Http不了解的可以查看我下一篇文章:Unity发送Http-CSDN博客

 结尾:有任何错误请指出,补充请评论,看到会第一时间回复,谢谢。

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

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

相关文章

15分钟学Go 第5天:数据类型

第5天:数据类型 在Go语言中,数据类型是构成程序的重要基础,它们定义了可以在程序中使用的数据特征。了解不同的数据类型及其用途将帮助我们更有效地编写Go代码。在本章节中,我们将详细探讨Go语言的基本数据类型。 1. 数据类型的…

jmeter发送post请求

在jmeter中,有两种常用的请求方式,get和post.它们两者的区别在于get请求的参数一般是放在路径中,可以使用用户自定义变量和函数助手等方式进行参数化,而post请求的参数不能随url发送,而是作为请求体提交给服务器。而在…

Linux 手撕线程池

前言 线程池 是 池化技术 中很典型的一个,它旨在高效的管理和复用线程资源!在现在的计算机体系中,线程是执行任务(调度)的基本单位。然而,频繁的创建和销毁线程也会带来较大的开销,包括系统资源…

Unity之XR Interaction Toolkit 射线拖拽3DUI

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、想实现的功能二、实现原理1.UI挂在XRGrabInteractable、刚体、BoxCollder2.修改刚体属性3.加BoxCollder 总结 前言 VR项目里正常情况有放置两种3DUI的方式…

音视频基础知识分享

音视频基础知识分享 RKMedia的各个组件及其交互 首先上图: 考虑到公司业务主要是相机,所以,主要去关注图像数据流,对于音频数据流直接忽略。 图像数据流向: Camera Sensor将光信号转换成电信号(Raw数据&…

指针——函数指针数组

(一)前文回顾 1、前篇代码分析 void(*signal(int , void(*)(int)))(int) ; 那么这串代码究竟是什么呢? 别慌,让我们来一步一步拆解,首先我们通过之前的学习,已经明白了什么是函数指针(如果有…

基于Python实现“气象家园”自动签到

一、安装库 pip install OAFuncs 二、导入库 from OAFuncs.oa_sign.meteorological import sign_in_meteorological_home as sign三、签到 email your_email # 16031215qq.com password your_pwd sign(email, password…

VS Code开发qt项目

没整明白,尴尬 安装扩展 设置cmake路径 前提是已经安装了QT 报错 用msvc选windows启动,用mingw则选gdb启动

基于语音识别的停车共享小程序(lw+演示+源码+运行)

目 录 1 绪论1 1.1 课题研究背景1 1.2 研究现状1 1.3 论文结构安排1 2 系统关键技术2 2.1 微信小程序2 2.2 微信Web开发者工具2 2.3 JavaScript简介2 2.4 微信小程序API接口2 2.5 MYSQL数据库2 3 系统分析1 3.1 可行性分析1 3.1.1 技术可行性1 3.1.2 经济可行性1…

飞腾X100适配Ubuntu说明

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

[Linux#67][IP] 报头详解 | 网络划分 | CIDR无类别 | DHCP动态分配 | NAT转发 | 路由器

目录 一. IP协议头格式 学习任何协议前的两个关键问题 IP 报头与有效载荷分离 分离方法 为什么需要16位总长度 如何交付 二. 网络通信 1.IP地址的划分理念 2. 子网管理 3.网络划分 CIDR(无类别域间路由) 目的IP & 当前路由器的子网掩码 …

不做邮箱投稿的奴隶,要做单位信息宣传考核计分投稿的主人

在我刚开始承担单位的信息宣传考核任务时,心中充满了激情与期待。作为一名普通员工,我深知信息宣传的重要性,它不仅关乎单位的形象,更是我们对外沟通的桥梁。然而,现实的残酷让我逐渐体会到了压力的沉重。 最初,我选择了通过邮箱进行投稿。这种方式听起来似乎是最优雅的选择,毕…

页面请求快速迁移至接口工具(apifox、postman) 进行针对性调试

文章目录 需求背景实操 需求背景 自动携带参数,仅进行少量更改 在功能模块开发前期,难免会有让后端协助造数据,对通业务流程的场景 不确定造的数据或者后端的改动是否满足自己的需求,改一次有问题又等着改了再看很浪费时间 调用接…

Redis可视化软件安装

Anther Redis Desktop Manager 软件链接: https://pan.baidu.com/s/1YxCxwoy12G_p8IR5KcPgmQ?pwd1111

CSS 设置网页的背景图片

背景 最近正好在写一个个人博客网站“小石潭记”,需要一张有水,有鱼的图片。正好玩原神遇到了类似场景,于是截图保存,添加到网站里面。以下是效果图: css 写个class,加到整个网页的body上 .bodyBg {ba…

C++ 中的友元(Friend)用法详解

什么是友元(Friend)?👭 友元 (C) | Microsoft Learn 在C中,友元(Friend)是一种机制,允许外部函数或类访问某个类的私有(private)或保护(protecte…

IDEA使用Alibaba Cloud Toolkit插件自动化部署jar包

一、下载插件 二、添加服务器主机 三、填写自己服务器配置 四、添加配置 五、配置说明 六、选择maven打包模块 七、maven打包后的jar包位置配一下 八、点击运行发现成功

重学SpringBoot3-Spring WebFlux简介

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-Spring WebFlux简介 1. 什么是 WebFlux?2. WebFlux 与 Spring MVC 的区别3. WebFlux 的用处3.1 非阻塞 I/O 操作3.2 响应式编程模型3.3 更高…

Thread类的介绍

线程是操作系统中的概念,操作系统中的内核实现了线程这种机制,同时,操作系统也提供了一些关于线程的API让程序员来创建和使用线程。 在JAVA中,Thread类就可以被视为是对操作系统中提供一些关于线程的API的的进一步的封装。 多线…

PHP(一)从入门到放弃

参考文献:https://www.php.net/manual/zh/introduction.php PHP 是什么? PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML…