添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
留胡子的电影票  ·  Install and Set Up ...·  4 天前    · 
淡定的松鼠  ·  Kubernetes ...·  2 天前    · 
踏实的冲锋衣  ·  Excessive ANR rate ...·  1 月前    · 
留胡子的电影票  ·  psycopg2 使用 ...·  2 月前    · 
强悍的牛排  ·  maptalks - ...·  2 月前    · 

使用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中也能运行了, 如下图所示.

目前, 这虽然是一个解决方案, 但是本人才疏学浅, 尚未能分析出其报错的具体原因, 还请各位大佬能够帮助我找出原因, 不胜感激.