using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; using LuaInterface; using GameCore; using System; namespace GameLogic { /// /// 集成自LuaFileUtils,重写里面的ReadFile, /// public class LuaLoader : LuaFileUtils { // Use this for initialization const string ConfigsName = "InitLuas"; /// /// 平台的配置,这些文件默认都会到平台里头去加载。 /// List list = new List(); public LuaLoader() { instance = this; beZip = AppConst.luaBundleMode; InitConfigs(); } public void InitConfigs() { string configs = App.ResMgr.LoadAsset(ConfigsName).text; App.ResMgr.UnLoadAsset(ConfigsName); string[] configss = configs.Replace("\r\n", "\n").Replace("\n","|").Split('|'); for (int i = 0; i < configss.Length; i++) { if (string.IsNullOrEmpty(configss[i])) continue; if (configss[i].Contains("@")) continue; list.Add(configss[i]); } } /// /// 添加打入Lua代码的AssetBundle /// /// public void AddBundle(string bundleName) { string url = Util.DataPath + bundleName.ToLower(); if (File.Exists(url)) { AssetBundle bundle = AssetBundle.LoadFromFile(url, 0, GameLogic.AppConst.EncyptBytesLength); if (bundle != null) { bundleName = bundleName.Replace("lua/", "").Replace(".unity3d", ""); base.AddSearchBundle(bundleName.ToLower(), bundle); } } } /// /// 当LuaVM加载Lua文件的时候,这里就会被调用, /// 用户可以自定义加载行为,只要返回byte[]即可。 /// /// /// public override byte[] ReadFile(string fileName) { fileName = fileName.Replace(".lua", string.Empty); if (AppConst.luaBundleMode) { return LoadFromAssetBundle(fileName); } else { return base.ReadFile(fileName); } } byte[] LoadFromAssetBundle(string fileName) { string assetName = fileName.Replace("/", "%"); #if UNITY_ANDROID if (IntPtr.Size == 8) { assetName += "%64"; } #endif byte[] bytes = App.ResMgr.LoadAsset(assetName).bytes; //App.ResMgr.UnLoadAsset(game, assetName); return bytes; } } }