之前没考虑过这方面的问题,毕竟搭web服务的话就会选择 Nginx 或者其他的工具了,但是在这个项目中一些条件限制,不会再额外搭建web服务。所以就萌生了一个想法可不可以在Unity 中搭建一个web服务呢?

       从理论角度讲,这么简单的需求应该是很好实现的,然而本着不造轮子的思想,看看有没有这方面的插件,或者现成的代码可以使用。但是在Unity的官网和一些论坛转了一圈发现还真没什么可适用的工具。于是我采用迂回策略能不能在c# 中搭建web服务,作为插件在Unity 中使用呢?答案是肯定的。于是找了下C# 中的搭建方案,果然找到了。再次奉上某位大神的思路,引用了人家的文档就得给人家推广一下()。这位老哥文章里写的很详细,而且在github中可以下载完整的源码,很开心我已经看到胜利的曙光了。他的主要思路就是搭建websocket 改造成http 服务。感兴趣就转到他的文章详细查看。

       在他的基础上我把HTTPServerLib这一块稍加改动 ,生成了dll 。具体在Unity 中的使用方法很简单:1 在Unity中创建Plugins文件夹,将 此dll 拖入其中。然后引用就可以了。这里我附上了我使用的例子,里面对每行代码做了详细的解释。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HTTPServerLib;
using System.Threading;

public class Tpsv : MonoBehaviour
{
    private string path ; //html文件路径
    public string fileName;//html文件名称

    Thread thread;//声明一个线程
    // Start is called before the first frame update
    void Start()
    {
        path = Application.streamingAssetsPath + "/" + fileName + ".html";  //服务器路径  也就是你的html 路径  我这里将我的文件放到了 StreamingAssetsPath 文件夹下
        thread = new Thread(new ThreadStart(sv)); //新建了一个线程
        thread.IsBackground = true;  //程序关闭则自动死亡
        thread.Start();  //线程开启

        print(path);
    }

    MyServer myServer;
    /// <summary>
    /// 开启服务器函数
    /// </summary>
    void sv()
    {
        myServer = new MyServer("0.0.0.0", 8080);  //新建了一个服务对象,传入ip地址和端口号 ,
        myServer.SetRoot(path);//传入服务器文件地址,以后都从这里寻找
        myServer.Start(); //服务器开启
        print("开始");
    }

    private void OnDestroy()
    {
        myServer.Stop(); //程序关闭时,服务关闭
        thread.Abort();//线程结束
        print("关闭");
    }
}