这里主要介绍两种加载途径,一个是从本地加载AB包,另一个是从服务器端加载AB包和Lua脚本
从本地文件加载:(resName代表预设体的名字,filePath是预设体的名字)
void LoadResource(string resName, string filePath) {
AssetBundle ab = AssetBundle.LoadFromFile(@"D:\A_Plan\Lua_4Lv_Code\XluaProjects\FishingJoy\AssetBundles\" + filePath);
GameObject go = ab.LoadAsset<GameObject>(resName); Instantiate(go);
}
当一款游戏发布后,后续需要不断更新完善,游戏内容发生变化,当然不会让玩家重新下载新版游戏,而是让玩家加载更新后的补丁文件,所以需要玩家在原来版本游戏中下载补丁,因此需要实现从服务器端加载ab包和补丁脚本
1. 从服务器端加载预设体:这里用到了NetBox服务器,在NetBox同等目录下可以创建一个index.html,在其里面简单写一行代码
然后将所需要加载的AssetBundle包和Lua补丁脚本放到和NetBox同等目录下,点击NetBox2.exe开启服务器,会自动跳转到index.html,到此服务器配置完毕,然后在代码中实现从服务器端加载AssetBundle,如下(在普通方法中调用该协程方法,在lua代码中调用普通方法即可加载到ab包):
IEnumerator LoadResourceCoroutine(string resName, string filePath) {
UnityWebRequest request = UnityWebRequest.GetAssetBundle(@"http://localhost/AssetBundles/"+filePath);
yield return request.SendWebRequest();
AssetBundle resAb = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
//AssetBundle ab = AssetBundle.LoadFromFile(@"D:\A_Plan\Lua_4Lv_Code\XluaProjects\FishingJoy\AssetBundles\" + filePath);
AssetBundle ab = resAb;
GameObject go = ab.LoadAsset<GameObject>(resName);
prefabDict.Add(resName, go);
}
[LuaCallCSharp]
public static GameObject GetGo(string resName) {
return prefabDict[resName];
}
2.从服务器端去加载Lua补丁脚本
//从服务器端加载Lua脚本
IEnumerator LoadResCoroutine() {
UnityWebRequest request = UnityWebRequest.Get(@"http://localhost/fish.lua.txt");
yield return request.SendWebRequest();
string str = request.downloadHandler.text;
File.WriteAllText(@"D:\A_Plan\Lua_4Lv_Code\XluaProjects\MyLuaCode\fish.lua.txt", str);
UnityWebRequest request1 = UnityWebRequest.Get(@"http://localhost/fishDispose.lua.txt");
yield return request1.SendWebRequest();
string str1 = request1.downloadHandler.text;
File.WriteAllText(@"D:\A_Plan\Lua_4Lv_Code\XluaProjects\MyLuaCode\fishDispose.lua.txt", str1);
//测试
UnityWebRequest request2 = UnityWebRequest.Get(@"http://47.101.214.253/说明.txt");
yield return request2.SendWebRequest();
string str2 = request2.downloadHandler.text;
File.WriteAllText(@"D:\A_Plan\Lua_4Lv_Code\XluaProjects\MyLuaCode\说明.txt", str2);
}
从服务器端加载总结:第一步先创建一个request,用Get方法中写明要从服务端加载的文件,然后发送请求并得到它,如果得到是资源文件,将其转为AssetBundle类型的对象,并调用相应方法得到对应的GameObject,如果得到的是脚本文件,将其转为text文本,再往硬盘中写入一个新的文件,用从服务器中得到的文本去覆盖硬盘中新建的文件内容。
最后,如果要将自己的项目发布到远程桌面,即在其他的电脑上也可以访问自己的项目,需要自己租一个云服务器ECS,然后在自己的远程桌面部署一个http的网站,在云服务器控制台配置安全组(添加80端口),最后在远程桌面把ab包和补丁脚本放到已经部署好的网站的物理地址下面即可。所以最终可以外网访问。