Unity3d Unity WebGL可编辑配置文件
如何使Unity WebGL项目读取一种配置文件(任何格式),该文件在从Unity workspace“构建”后可编辑 下面是构建目录的示例,其中包含打包的文件 用例是让这个WebGL项目使用的后端API在托管服务器上可配置,这样当播放器/用户浏览它时,它知道在哪里连接到后端APIUnity3d Unity WebGL可编辑配置文件,unity3d,unity-webgl,Unity3d,Unity Webgl,如何使Unity WebGL项目读取一种配置文件(任何格式),该文件在从Unity workspace“构建”后可编辑 下面是构建目录的示例,其中包含打包的文件 用例是让这个WebGL项目使用的后端API在托管服务器上可配置,这样当播放器/用户浏览它时,它知道在哪里连接到后端API 我目前可以探索的最接近的部分是实现定制。Unity可以提供任何建议或任何现有API?此问题所选解决方案的更新。采用该方法 总共要创建3个文件: WebConfigurationManager.cs 将其放置在资产
我目前可以探索的最接近的部分是实现定制。Unity可以提供任何建议或任何现有API?此问题所选解决方案的更新。采用该方法 总共要创建3个文件:
WebConfigurationManager.cs
- 将其放置在资产文件夹中。此文件是C#代码的主要条目,它决定从何处获取web配置,通过另一个C#类的默认值(使用unity编辑器时)或使用浏览器脚本方法检索(通过浏览器浏览分发版本时)
WebConfigurationManager.jslib
- 将其放置在与
相同的文件夹中。该文件是javascript代码,由浏览器加载WebConfigurationManager.cs
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();
}
});