Lua笔记四——加载AB包和Lua补丁脚本

      这里主要介绍两种加载途径,一个是从本地加载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(resName);                                                                                                                            Instantiate(go);
    }

        当一款游戏发布后,后续需要不断更新完善,游戏内容发生变化,当然不会让玩家重新下载新版游戏,而是让玩家加载更新后的补丁文件,所以需要玩家在原来版本游戏中下载补丁,因此需要实现从服务器端加载ab包和补丁脚本

       1. 从服务器端加载预设体:这里用到了NetBox服务器,在NetBox同等目录下可以创建一个index.html,在其里面简单写一行代码

Lua笔记四——加载AB包和Lua补丁脚本_第1张图片

然后将所需要加载的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(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包和补丁脚本放到已经部署好的网站的物理地址下面即可。所以最终可以外网访问。

你可能感兴趣的:(Lua笔记四——加载AB包和Lua补丁脚本)