Unity3d Unity WebGL可编辑配置文件

Unity3d Unity WebGL可编辑配置文件,unity3d,unity-webgl,Unity3d,Unity Webgl,如何使Unity WebGL项目读取一种配置文件(任何格式),该文件在从Unity workspace“构建”后可编辑 下面是构建目录的示例,其中包含打包的文件 用例是让这个WebGL项目使用的后端API在托管服务器上可配置,这样当播放器/用户浏览它时,它知道在哪里连接到后端API 我目前可以探索的最接近的部分是实现定制。Unity可以提供任何建议或任何现有API?此问题所选解决方案的更新。采用该方法 总共要创建3个文件: WebConfigurationManager.cs 将其放置在资产

如何使Unity WebGL项目读取一种配置文件(任何格式),该文件在从Unity workspace“构建”后可编辑

下面是构建目录的示例,其中包含打包的文件

用例是让这个WebGL项目使用的后端API在托管服务器上可配置,这样当播放器/用户浏览它时,它知道在哪里连接到后端API


我目前可以探索的最接近的部分是实现定制。Unity可以提供任何建议或任何现有API?

此问题所选解决方案的更新。采用该方法

总共要创建3个文件:

  • WebConfigurationManager.cs
    • 将其放置在资产文件夹中。此文件是C#代码的主要条目,它决定从何处获取web配置,通过另一个C#类的默认值(使用unity编辑器时)或使用浏览器脚本方法检索(通过浏览器浏览分发版本时)
  • WebConfigurationManager.jslib
    • 将其放置在与
      WebConfigurationManager.cs
      相同的文件夹中。该文件是javascript代码,由浏览器加载
  • web config.json
    • 您的JSON配置。web配置文件可以托管在任何地方,例如下面的分发版本文件夹的根目录下,您必须知道在哪里加载该文件,例如
      https:///web-config.json

  • //WebConfigurationManager.cs
    使用制度;
    使用UnityEngine;
    使用System.Runtime.InteropServices;
    使用AOT;
    公共类配置管理器:MonoBehavior
    {
    #如果UNITY\u WEBGL&!UNITY\u编辑器
    //从浏览器加载web-config.json,结果将通过EnvironmentConfigurationCallback传递
    公共委托无效环境配置回调(System.IntPtr ptr);
    [DllImport(“内部”)]
    私有静态外部无效GetEnvironmentConfiguration(EnvironmentConfigurationCallback);
    void Start()
    {
    GetEnvironmentConfiguration(回调);
    }
    [MonoPInvokeCallback(typeof(EnvironmentConfigurationCallback))]
    公共静态无效回调(System.IntPtr)
    {
    字符串值=Marshal.PtrToStringAuto(ptr);
    尝试
    {
    var webConfig=JsonUtility.FromJson(值);
    //webConfig包含从web-config.json加载的值。MainConfig是配置的数据模型类。
    }
    捕获(例外e)
    {
    Debug.LogError($“未能读取配置。{e.Message}”);
    }
    }
    #否则
    void Start()
    {
    GetEnvironmentConfiguration();
    }
    私有void GetEnvironmentConfiguration()
    {
    //在unity editor上不执行任何操作,只触发初始化事件
    //模拟配置以使用Unity editor
    var testConfig=JsonUtility.FromJson(“{\n”+
    “\“apiEndpoint\”:\“ws://1.1.1.1:30080/events\”,\n”+
    “\“updateInterval\”:5\n”+
    "}");
    Log(testConfig.apidendpoint);
    Log(testConfig.updateInterval);
    }
    #恩迪夫
    }
    
    //WebConfigurationManager.jslib
    合并到(LibraryManager.library{
    GetEnvironmentConfiguration:函数(obj){
    函数getPtrFromString(str){
    var缓冲区=_malloc(lengthBytesUTF8(str)+1);
    写入内存(str,缓冲区);
    返回缓冲区;
    }
    var request=new XMLHttpRequest();
    //通过web请求加载web-config.json
    open(“GET”,“/web config.json”,true);
    request.onreadystatechange=函数(){
    if(request.readyState==4&&request.status==200){
    var buffer=getPtrFromString(request.responseText);
    dynCall('vi',obj,[buffer]);
    }
    };
    request.send();
    }
    });