当前位置: 首页 > news >正文

和服务器建立联系——6.10山大软院项目实训1

下面介绍我如何在自己的项目中,根据aigc组的接口(如下图),在Unity中和服务器建立联系并发出接受请求的:

这是一个通过HTTP POST方法调用的接口,需要发送JSON格式的数据。在Unity中实现这样的功能,您可以使用Unity的UnityWebRequest类来发送HTTP请求。以下演示如何在Unity中构造并发送这个API请求:

using UnityEngine;
using UnityEngine.Networking;
using System.Text;
using System.Collections;public class APIClient : MonoBehaviour
{private string apiUrl = "https://your-server-url/generate_response"; // 替换为实际的API端点URLvoid Start(){StartCoroutine(SendRequest("You are a helpful assistant.", "Can you help me with my homework?"));}IEnumerator SendRequest(string system, string user){// 创建一个新的JSON对象string jsonPayload = JsonUtility.ToJson(new APIRequestData{system = system,user = user});// 创建一个新的UnityWebRequest,并设置方法和上传的JSON数据using (UnityWebRequest webRequest = new UnityWebRequest(apiUrl, "POST")){byte[] jsonToSend = new UTF8Encoding().GetBytes(jsonPayload);webRequest.uploadHandler = new UploadHandlerRaw(jsonToSend);webRequest.downloadHandler = new DownloadHandlerBuffer();webRequest.SetRequestHeader("Content-Type", "application/json");// 等待请求发送并接收响应yield return webRequest.SendWebRequest();if (webRequest.result == UnityWebRequest.Result.ConnectionError || webRequest.result == UnityWebRequest.Result.ProtocolError){Debug.LogError("Error: " + webRequest.error);}else{Debug.Log("Received: " + webRequest.downloadHandler.text);}}}// 用于序列化JSON的类[System.Serializable]public class APIRequestData{public string system;public string user;}
}
  1. APIRequestData 类:这是一个用于序列化JSON数据的辅助类。这个类的结构根据API所需的字段进行设计,包含systemuser两个字段。

  2. SendRequest 方法:这个协程方法构建JSON字符串,发送HTTP POST请求,并接收响应。它使用UnityWebRequest来发送请求,并设置Content-Typeapplication/json

  3. 错误处理:如果连接或协议出错,它会在控制台输出错误信息。

  4. 响应输出:如果请求成功,它会输出服务器的响应文本。

使用说明:

  • 确保将这个脚本附加到Unity场景中的一个活动GameObject上。
  • 替换apiUrl变量的值为您的实际API端点URL。
  • 运行Unity场景,观察控制台输出以验证API调用的响应。

这样就可以在Unity中使用这个API了。确保服务器端点可访问,并正确处理请求。

相关文章:

  • Linux开机自启/etc/init.d和/etc/rc.d/rc.local
  • LDO电容选型指南
  • mysql 字符串字段判断是否包含某个字符串的方法
  • 为企业提供动力:用于大型组织的WordPress
  • React中Hooks--useEffect | useState | useCallback | useMemo
  • 架构师工作报告
  • 一篇讲清楚怎么选算力租赁平台!
  • 什么情况下需要使用接地电阻柜
  • AI + 3D:用单个图像和文本提示创建可交互的3D世界
  • 产品经理经验分享:电商类项目开发需要了解常用的电商API接口
  • 记录一下 Chrome浏览器打印时崩溃问题
  • ifconfig eth0 hw ether
  • 单链表的创建及排序
  • 【Python】Redis数据库
  • SQL优化选对执行计划,查询速度提升1000倍 | OceanBase 应用实践
  • 【译】JS基础算法脚本:字符串结尾
  • JavaScript-如何实现克隆(clone)函数
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 30秒的PHP代码片段(1)数组 - Array
  • Hibernate最全面试题
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript创建对象的四种方式
  • Linux下的乱码问题
  • MySQL的数据类型
  • Redis字符串类型内部编码剖析
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vuex 笔记整理
  • 阿里研究院入选中国企业智库系统影响力榜
  • 产品三维模型在线预览
  • 从输入URL到页面加载发生了什么
  • 高度不固定时垂直居中
  • 记一次和乔布斯合作最难忘的经历
  • 悄悄地说一个bug
  • 微信小程序设置上一页数据
  • 小程序开发之路(一)
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 国内开源镜像站点
  • ### RabbitMQ五种工作模式:
  • #Linux(帮助手册)
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $nextTick的使用场景介绍
  • (4.10~4.16)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (八)c52学习之旅-中断实验
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (一)基于IDEA的JAVA基础1
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)菜鸟学数据库(三)——存储过程
  • .NET 4.0中的泛型协变和反变
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Core 中的路径问题
  • .net 后台导出excel ,word
  • .net(C#)中String.Format如何使用