使用Go语言编写一个简单的静态资源服务器, 在assets目录下有一个1.txt文件. 我们希望利用Unity通过GET请求访问
http://127.0.0.1:8089/static/1.txt
并下载这个1.txt文件. 为了方便测试, 我们在游戏场景中放置了一个正方体, 如果Unity成功访问到这个文件, 正方体将会被销毁.
Unity Editor Version 2021.3.6f1c1
Go Version go1.19.1 Windows/AMD64
Curl 7.83.1 (Windows) libcurl/7.83.1 Schannel
GO后端静态资源服务器的实现与测试
这是后端静态资源服务器的代码实现.
package main
import (
"net/http"
// 解决跨域问题
func cors(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Access-Control-Allow-Origin", "*")
next.ServeHTTP(w, r)
// 静态文件服务器
func main() {
fs := http.FileServer(http.Dir("assets/"))
http.Handle("/static/", cors(http.StripPrefix("/static/", fs)))
http.ListenAndServe(":8089", nil)
使用浏览器访问这个URL, 可以直接读取1.txt的内容, 证明后端静态资源服务器已经成功实现.
Unity端对静态资源服务器进行访问
这是Unity端访问静态资源服务器的代码实现.
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class DynamicModelLoader : MonoBehaviour
string URL = "http://127.0.0.1:8089/static/1.txt";
// Start is called before the first frame update
void Start()
StartCoroutine(Down(URL));
IEnumerator Down(string downloadingUrl)
UnityWebRequest www = UnityWebRequest.Get(downloadingUrl);
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
Debug.Log(www.error);
// 以文本形式显示结果
Debug.Log(www.downloadHandler.text);
// 或者获取二进制数据形式的结果
byte[] results = www.downloadHandler.data;
// 为了可以在游戏界面中观察是否成功请求, 如果成功, 游戏内的正方体将会被销毁
var go = GameObject.Find("Cube");
Destroy(go);
然而, 在Editor中运行Unity却发生了如下的错误报告.
Curl error 1: Received HTTP/0.9 when not allowed
在网上寻找了诸多的解决方案也未能解决这一问题.
更令人困惑的是, 如果我们将项目打包到WebGL, 用Live Server运行, 会惊奇地发现运行居然成功了, Unity确实访问到了这个URL, 如下图所示.
同时, 我们可以观察到游戏场景中的正方体消失了, 这与我们之前的假设相符, Unity确实成功完成了GET请求.
之后经过了无比漫长的调试和资料搜索, 但是均不能解决. 最后抱着试试看的态度将URL中的IP字段由原来的127.0.0.1改为了[::1], 结果惊奇地发现在Editor中也能运行了, 如下图所示.
目前, 这虽然是一个解决方案, 但是本人才疏学浅, 尚未能分析出其报错的具体原因, 还请各位大佬能够帮助我找出原因, 不胜感激.