public override string FindFileError(string fileName) { if (Path.IsPathRooted(fileName)) { return(fileName); } if (Path.GetExtension(fileName) == ".lua") { fileName = fileName.Substring(0, fileName.Length - 4); } using (CString.Block()) { CString sb = CString.Alloc(512); for (int i = 0; i < searchPaths.Count; i++) { sb.Append("\n\tno file '").Append(searchPaths[i]).Append('\''); } sb.Append("\n\tno file './Resources/").Append(fileName).Append(".lua'") .Append("\n\tno file '").Append(LuaConst.luaResDir).Append('/') .Append(fileName).Append(".lua'"); sb = sb.Replace("?", fileName); return(sb.ToString()); } }
// public virtual string FindFileError(string fileName) { if (Path.IsPathRooted(fileName)) { return(fileName); } if (fileName.EndsWith(".lua")) { fileName = fileName.Substring(0, fileName.Length - 4); } using (CString.Block()) { CString sb = CString.Alloc(512); for (int i = 0; i < searchPaths.Count; i++) { sb.Append("\n\tno file '").Append(searchPaths[i]).Append('\''); } sb = sb.Replace("?", fileName); return(sb.ToString()); } }
public string FindFileError(string _fileName) { if (Path.IsPathRooted(_fileName)) { return(_fileName); } if (_fileName.EndsWith(".lua")) { _fileName = _fileName.Substring(0, _fileName.Length - 4); } using (CString.Block()) { CString tempStr = CString.Alloc(512); int tempPos = _fileName.LastIndexOf('/'); if (tempPos > 0) { int tempIndex = tempPos + 1; tempStr.Append("\n\tno file '").Append(_fileName, tempIndex, _fileName.Length - tempIndex).Append(".lua' in ").Append("lua_"); tempIndex = tempStr.Length; tempStr.Append(_fileName, 0, tempPos).Replace('/', '_', tempIndex, tempPos).Append(".unity3d"); } else { tempStr.Append("\n\tno file '").Append(_fileName).Append(".lua' in ").Append("lua.unity3d"); } return(tempStr.ToString()); } }
byte[] ReadZipFile(string fileName) { AssetBundle zipFile = null; byte[] buffer = null; string zipName = null; string newFileName = null; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("lua.unity3d"); newFileName = string.Format("assets/luatemp/{0}", fileName.ToLower()); //int pos = fileName.LastIndexOf('/'); //if (pos > 0) //{ // sb.Append("_"); // sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); // fileName = fileName.Substring(pos + 1); //} //if (!fileName.EndsWith(".lua")) //{ // fileName += ".lua"; //} if (!newFileName.EndsWith(".lua")) { newFileName += ".lua"; } #if UNITY_5 || UNITY_5_3_OR_NEWER // fileName += ".bytes"; newFileName += ".bytes"; #endif zipName = sb.ToString(); zipMap.TryGetValue(zipName, out zipFile); } if (zipFile != null) { #if UNITY_4_6 || UNITY_4_7 TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #else //TextAsset luaCode = zipFile.LoadAsset<TextAsset>(fileName); TextAsset luaCode = zipFile.LoadAsset <TextAsset>(newFileName); #endif if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } } return(buffer); }
string TestBlock(string str) { using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("hello"); sb.CopyToString(str); return(str); } }
byte[] ReadZipFile(string fileName) { AssetBundle zipFile = null; byte[] buffer = null; string zipName = null; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("lua"); int pos = fileName.LastIndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); //我这里只有一个ab包可以加载 lua sb = "lua"; fileName = fileName.Replace(".", "/"); //fileName = fileName.Substring(pos + 1); } if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 || UNITY_5_3_OR_NEWER fileName += ".bytes"; #endif zipName = sb.ToString(); zipMap.TryGetValue(zipName, out zipFile); } if (zipFile != null) { #if UNITY_4_6 || UNITY_4_7 TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #else //需要优化 我这里 写死了 拼接ab包的路径 LuaABTemp是ab包内的lua文件的名字 fileName = "Assets/LuaABTemp/" + fileName; TextAsset luaCode = zipFile.LoadAsset <TextAsset>(fileName); #endif if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } } return(buffer); }
byte[] ReadZipFile(string fileName) { AssetBundle zipFile = null; byte[] buffer = null; string zipName = null; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("lua"); int pos = fileName.IndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName.Substring(0, pos).ToLower()); //shit, unity5 assetbund'name must lower sb.Replace('/', '_'); int luaPos = fileName.LastIndexOf('/'); if (luaPos > 0) { fileName = fileName.Substring(luaPos + 1); } } if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 || UNITY_2017 fileName += ".bytes"; #endif zipName = sb.ToString(); zipMap.TryGetValue(zipName, out zipFile); } if (zipFile != null) { #if UNITY_5 || UNITY_2017 TextAsset luaCode = zipFile.LoadAsset <TextAsset>(fileName); #else TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #endif if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } } return(buffer); }
byte[] ReadZipFile(string fileName) { AssetBundle zipFile = null; byte[] buffer = null; string zipName = null; using (CString.Block()) { //注意这里的操作,如果在lua脚本里面使用require引用模块 //一定要加上路径,这个路径相对于AppConst里面的LuaTempDir目录 //例如require "3rd/pbc/protobuf" CString sb = CString.Alloc(256); sb.Append("lua"); int pos = fileName.LastIndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); fileName = fileName.Substring(pos + 1); } if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 || UNITY_5_3_OR_NEWER fileName += ".bytes"; #endif zipName = sb.ToString(); zipMap.TryGetValue(zipName, out zipFile); } if (zipFile != null) { #if UNITY_4_6 || UNITY_4_7 TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #else TextAsset luaCode = zipFile.LoadAsset <TextAsset>(fileName); #endif if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } } return(buffer); }
byte[] ReadZipFile(string fileName) { AssetBundle zipFile = null; byte[] buffer = null; string zipName = null; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("lua"); int pos = fileName.LastIndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); fileName = fileName.Substring(pos + 1); } if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 || UNITY_2017 fileName += ".bytes"; #endif zipName = sb.ToString(); zipName = "lua"; //本工程所有lua文件都打包到lua.lua.assetbundle中,与LuaFramework打包方式不同; zipMap.TryGetValue(zipName, out zipFile); } if (zipFile != null) { #if UNITY_5 || UNITY_2017 TextAsset luaCode = zipFile.LoadAsset <TextAsset>(fileName); #else TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #endif if (luaCode != null) { Debug.Log(string.Format("[LuaFileUtils]=====>Loa Lua Code:{0} success.", fileName)); buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } } return(buffer); }
byte[] ReadZipFile(string fileName) { byte[] buffer = null; string zipName = null; AssetBundle zipFile; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("lua"); int pos = fileName.LastIndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); fileName = fileName.Substring(pos + 1); } if (!fileName.EndsWith(".lua", System.StringComparison.Ordinal)) { fileName += ".lua"; } #if UNITY_5 || UNITY_5_3_OR_NEWER fileName += ".bytes"; #endif zipName = sb.ToString(); zipMap.TryGetValue(zipName, out zipFile); } if (zipFile != null) { #if UNITY_4_6 || UNITY_4_7 TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #else TextAsset luaCode = zipFile.LoadAsset <TextAsset>(fileName); #endif if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } } return(buffer); }
byte[] ReadZipFile(string fileName) { byte[] buffer = null; string zipName = null; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("lua"); int pos = fileName.LastIndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); fileName = fileName.Substring(pos + 1); } sb.Append("_"); if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 || UNITY_5_3_OR_NEWER //fileName += ".bytes"; #endif zipName = sb.ToString(); Debug.LogWarning(string.Format("lua zip name:{0} file:{1}", zipName, fileName.ToLower())); } foreach (var zipFile in zipMap.Values) { //string key = zipName + fileName.ToLower(); //Debug.Log("key:" + key); //string luaName = luaNameMap[key]; //Debug.Log("luaName:" + luaName); TextAsset luaCode = zipFile.LoadAsset <TextAsset>(luaNameMap[zipName + fileName.ToLower()]); if (luaCode != null) { //Debug.Log(luaCode.text); buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); break; } } return(buffer); }
public virtual string FindFileError(string fileName) { Debug.LogError("不应该走到这里了"); if (Path.IsPathRooted(fileName)) { return(fileName); } if (fileName.EndsWith(".lua")) { fileName = fileName.Substring(0, fileName.Length - 4); } using (CString.Block()) { CString sb = CString.Alloc(512); for (int i = 0; i < searchPaths.Count; i++) { sb.Append("\n\tno Other file '").Append(searchPaths[i]).Append('\''); } sb = sb.Replace("?", fileName); if (beZip) { int pos = fileName.LastIndexOf('/'); if (pos > 0) { int tmp = pos + 1; sb.Append("\n\tno file '").Append(fileName, tmp, fileName.Length - tmp).Append(".lua' in ").Append("lua_"); tmp = sb.Length; sb.Append(fileName, 0, pos).Replace('/', '_', tmp, pos).Append(".unity3d"); } else { sb.Append("\n\tno file '").Append(fileName).Append(".lua' in ").Append("lua.unity3d"); } } return(sb.ToString()); } }
/// <summary> /// 错误日志 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public string FindFileError(string fileName) { if (Path.IsPathRooted(fileName)) { return(fileName); } if (fileName.EndsWith(".lua")) { fileName = fileName.Substring(0, fileName.Length - 4); } using (CString.Block()) { CString sb = CString.Alloc(512); for (int i = 0; i < luaSearchPath.Count; i++) { sb.Append("\n\tMoon no file '").Append(luaSearchPath[i]).Append('\''); } sb = sb.Replace("?", fileName); if (AppConst.LuaBundleMode) { int pos = fileName.LastIndexOf('/'); if (pos > 0) { int tmp = pos + 1; sb.Append("\n\tMoon no file '").Append(fileName, tmp, fileName.Length - tmp).Append(".lua' in ").Append("lua_"); tmp = sb.Length; sb.Append(fileName, 0, pos).Replace('/', '_', tmp, pos).Append(".unity3d"); } else { sb.Append("\n\tMoon no file '").Append(fileName).Append(" in ").Append("lua.unity3d"); } } return(sb.ToString()); } }
private byte[] ReadBundleFile(string fileName) { AssetBundle zipFile = null; byte[] buffer = null; string zipName = "lua"; using (CString.Block()) { fileName = fileName.Replace('/', '_'); fileName = fileName.Replace('\\', '_'); if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 || UNITY_2017 fileName += ".bytes"; #endif zipMap.TryGetValue(zipName, out zipFile); } if (zipFile != null) { #if UNITY_5 || UNITY_2017 || UNITY_2018 TextAsset luaCode = zipFile.LoadAsset <TextAsset>(fileName); #else TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #endif if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } } return(buffer); }
public static string GetArrayRank(Type t) { int count = t.GetArrayRank(); if (count == 1) { return("[]"); } using (CString.Block()) { CString sb = CString.Alloc(64); sb.Append('['); for (int i = 1; i < count; i++) { sb.Append(','); } sb.Append(']'); return(sb.ToString()); } }
public string where () { int n = LuaDLL.lua_gettop(L); using (CString.Block()) { CString sb = CString.Alloc(256); int line = LuaDLL.tolua_where(L, 1); string filename = LuaDLL.lua_tostring(L, -1); LuaDLL.lua_settop(L, n); int offset = filename[0] == '@' ? 1 : 0; if (!filename.Contains(".")) { sb.Append('[').Append(filename, offset, filename.Length - offset).Append(".lua:").Append(line).Append("]:"); } else { sb.Append('[').Append(filename, offset, filename.Length - offset).Append(':').Append(line).Append("]:"); } return(sb.ToString()); } }
byte[] ReadZipFile(string fileName) { AssetBundle zipFile = null; byte[] buffer = null; string zipName = null; string temp = fileName; using (CString.Block()) { CString sb = CString.Alloc(256); string dir = "lua"; if (dirIndex == 1) { dir = "game_src"; } sb.Append(dir); int pos = fileName.LastIndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); fileName = fileName.Substring(pos + 1); } if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 fileName += ".bytes"; #endif zipName = sb.ToString(); zipMap.TryGetValue(zipName, out zipFile); } if (zipFile != null) { #if UNITY_5 TextAsset luaCode = zipFile.LoadAsset <TextAsset>(fileName); #else TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #endif if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } else { if (dirIndex != 1) { dirIndex = 1; buffer = ReadZipFile(temp); } } } else { if (dirIndex != 1) { dirIndex = 1; buffer = ReadZipFile(temp); } } dirIndex = 0; return(buffer); }
byte[] ReadZipFile(string fileName) { AssetBundle zipFile = null; byte[] buffer = null; string zipName = null; using (CString.Block()) { //CString sb = CString.Alloc(256); //sb.Append("lua"); //int pos = fileName.LastIndexOf('/'); //if (pos > 0) //{ // sb.Append("_"); // sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); // fileName = fileName.Substring(pos + 1); //} //if (!fileName.EndsWith(".lua")) //{ // fileName += ".lua"; //} CString sb = CString.Alloc(256); sb.Append("lua_"); if (fileName.IndexOf("message/") != -1) { sb.Append("message"); } else if (fileName.IndexOf("Template/") != -1) { sb.Append("template"); } else { sb.Append("script"); } int pos = fileName.LastIndexOf('/'); if (pos > 0) { fileName = fileName.Substring(pos + 1); } if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 || UNITY_2017 fileName += ".bytes"; #endif zipName = sb.ToString(); zipMap.TryGetValue(zipName, out zipFile); } if (zipFile != null) { #if UNITY_5 || UNITY_2017 TextAsset luaCode = zipFile.LoadAsset <TextAsset>(fileName); #else TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #endif if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } } return(buffer); }
byte[] ReadZipFile(string fileName) { AssetBundle zipFile = null; byte[] buffer = null; string zipName = null; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("lua"); int startPos = fileName.IndexOf('/'); int pos = fileName.LastIndexOf('/'); if (startPos > 0) //封装出包名 { sb.Append("_"); sb.Append(LuaMgr.Inst.cpuTypeStr); sb.Append(fileName, 0, startPos).ToLower().Replace('/', '_'); } if (pos > 0) //文件名 { fileName = fileName.Substring(pos + 1); } if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 || UNITY_5_3_OR_NEWER fileName += ".bytes"; #endif zipName = sb.ToString(); zipMap.TryGetValue(zipName, out zipFile); //[0] 添加补丁 如果常规下找不到,就在默认的ab包中找lua文件 if (zipFile == null) { zipFile = zipMap["lua_" + LuaMgr.Inst.cpuTypeStr + "tolua"]; } //[0] } if (zipFile != null) { #if UNITY_4_6 || UNITY_4_7 TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #else TextAsset luaCode = zipFile.LoadAsset <TextAsset>(fileName); #endif if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } } return(buffer); }
byte[] ReadZipFile(string fileName) { //AssetBundle zipFile = null; byte[] buffer = null; //string zipName = null; // using (CString.Block()) // { // CString sb = CString.Alloc(256); // sb.Append("lua"); // int pos = fileName.LastIndexOf('/'); // if (pos > 0) // { // sb.Append("_"); // sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); // fileName = fileName.Substring(pos + 1); // } // if (!fileName.EndsWith(".lua")) // { // fileName += ".lua"; // } //#if UNITY_5 || UNITY_5_3_OR_NEWER // fileName += ".bytes"; //#endif // zipName = sb.ToString(); // zipMap.TryGetValue(zipName, out zipFile); // } // if (zipFile != null) // { //#if UNITY_4_6 || UNITY_4_7 // TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; //#else // TextAsset luaCode = zipFile.LoadAsset<TextAsset>(fileName); //#endif // if (luaCode != null) // { // buffer = luaCode.bytes; // Resources.UnloadAsset(luaCode); // } // } using (CString.Block()) { fileName = fileName.Replace("/", "."); if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 || UNITY_5_3_OR_NEWER fileName += ".bytes"; #endif } foreach (var bundleName in AppConst.LuaBundles) { AssetBundle bundle = null; if (zipMap.TryGetValue(bundleName, out bundle)) { #if UNITY_4_6 || UNITY_4_7 TextAsset luaCode = bundle.Load(fileName, typeof(TextAsset)) as TextAsset; #else TextAsset luaCode = bundle.LoadAsset <TextAsset>(fileName); #endif if (null == luaCode) { continue; } if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); break; } } } if (null == buffer) { Debug.LogError("Load lua file from bundle error! luafile name is:" + fileName); } return(buffer); }
//加载lua文件 public static byte[] GetLuaScript(string fileName) { #if UNITY_EDITOR && !ASSETBUNDLE_ENABLE string path = LuaFileUtils.Instance.FindFile(fileName); byte[] str = null; if (!string.IsNullOrEmpty(path) && File.Exists(path)) { str = File.ReadAllBytes(path); } if (str != null) { return(str); } #endif AssetBundle assetBundle = null; byte[] buffer = null; using (CString.Block()) { string strBundleName = ""; if (fileName.IndexOf("message/") != -1) { strBundleName = "lua/lua_message.unity3d"; } else if (fileName.IndexOf("Template/") != -1) { strBundleName = "lua/lua_template.unity3d"; } else { strBundleName = "lua/lua_script.unity3d"; } int pos = fileName.LastIndexOf('/'); if (pos > 0) { fileName = fileName.Substring(pos + 1); } if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 || UNITY_2017 fileName += ".bytes"; #endif AssetBundleData assetBundleData = null; if (m_dicAssetBundle.TryGetValue(strBundleName, out assetBundleData)) { string keyName = "assets/" + fileName.ToLower(); if (assetBundleData != null) { if (assetBundleData.assetBundle == null) { assetBundleData.assetBundle = AssetBundle.LoadFromFile(assetBundleData.strAssetPath); } assetBundle = assetBundleData.assetBundle; } } } if (assetBundle != null) { #if UNITY_5 || UNITY_2017 TextAsset luaCode = assetBundle.LoadAsset <TextAsset>(fileName); #else TextAsset luaCode = assetBundle.Load(fileName, typeof(TextAsset)) as TextAsset; #endif if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } } return(buffer); }
/// <summary> /// TODO:打印的简易版本,还需要lua的文件名位置等信息 /// </summary> /// <param name="L"></param> public static int Print(IntPtr L) { try { int n = LuaDLL.lua_gettop(L); // CString可以喝String互转 using (CString.Block()) { CString sb = CString.Alloc(256); #if UNITY_EDITOR int line = LuaDLL.tolua_where(L, 1); string filename = LuaDLL.lua_tostring(L, -1); LuaDLL.lua_settop(L, n); int offset = filename[0] == '@' ? 1 : 0; if (!filename.Contains(".")) { sb.Append('[').Append(filename, offset, filename.Length - offset).Append(".lua:").Append(line).Append("]:"); } else { sb.Append('[').Append(filename, offset, filename.Length - offset).Append(':').Append(line).Append("]:"); } #endif for (int i = 1; i <= n; i++) { if (i > 1) { sb.Append(" "); } if (LuaDLL.lua_isstring(L, i) == 1) { sb.Append(LuaDLL.lua_tostring(L, i)); } else if (LuaDLL.lua_isnil(L, i)) { sb.Append("nil"); } else if (LuaDLL.lua_isboolean(L, i)) { sb.Append(LuaDLL.lua_toboolean(L, i) ? "true" : "false"); } else { IntPtr p = LuaDLL.lua_topointer(L, i); if (p == IntPtr.Zero) { sb.Append("nil"); } else { sb.Append(LuaDLL.luaL_typename(L, i)).Append(":0x").Append(p.ToString("X")); } } } Debugger.Log(sb.ToString()); //203行与_line一致 } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
private IEnumerator AsynReadFile(string fileName, bool isCacheBundle) { AssetBundle zipFile = null; string content = string.Empty; byte[] buffer = null; string zipName = null; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("config"); int pos = fileName.LastIndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); fileName = fileName.Substring(pos + 1); } zipName = sb.ToString(); configMap.TryGetValue(zipName, out zipFile); } var isHaveCache = false; if (zipFile == null) { isHaveCache = false; AssetBundleCreateRequest assetBundleRequest; assetBundleRequest = AssetBundle.LoadFromFileAsync(ConfigConst.configResDir + "/" + zipName + Platform.AssetBundleExt); yield return(assetBundleRequest); if (assetBundleRequest.isDone) { zipFile = assetBundleRequest.assetBundle; if (isCacheBundle) { configMap[zipName] = zipFile; } } } else { isHaveCache = true; } if (zipFile != null) { TextAsset configCode = null; #if UNITY_5 || UNITY_2017 || UNITY_2018 AssetBundleRequest assetBundleRequest; assetBundleRequest = zipFile.LoadAssetAsync <TextAsset>(fileName); yield return(assetBundleRequest); if (assetBundleRequest.isDone) { configCode = (TextAsset)assetBundleRequest.asset; } #else configCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #endif if (configCode != null) { buffer = configCode.bytes; Resources.UnloadAsset(configCode); byte[] decrypt = ConfigEncrypt.Decrypt(buffer); content = System.Text.Encoding.UTF8.GetString(decrypt); } if (!isCacheBundle && !isHaveCache) { zipFile.Unload(true); } //回调 if (CallBacks.ContainsKey(fileName)) { Action <string> action = CallBacks[fileName]; if (action != null) { Delegate[] actions = action.GetInvocationList(); foreach (var dele in actions) { var act = (Action <string>)dele; try { act(content); } catch (Exception e) { Debuger.LogError("异步加载config文件出错 " + fileName + " " + e.Message); } } } CallBacks.Remove(fileName); } yield return(null); } }
/// <summary> /// 这里重写了 </summary> private byte[] ReadZipFile(string fileName) { AssetBundle zipFile; byte[] buffer = null; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("lua"); int pos = fileName.LastIndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); fileName = fileName.Substring(pos + 1); } if (!fileName.EndsWith(".lua")) { fileName += ".lua"; } #if UNITY_5 || UNITY_5_3_OR_NEWER fileName += ".bytes"; #endif var zipName = sb.ToString(); //重写部分,如果没查找到,则去文件夹查找 zipMap.TryGetValue(zipName, out zipFile); if (!zipMap.TryGetValue(zipName, out zipFile)) { string path; if (AllLuaBundlesPathColl.TryGetValue(zipName, out path)) { var bytes = File.ReadAllBytes(path); AssetBundle bundle = AssetBundle.LoadFromMemory(bytes); if (bundle != null) { base.AddSearchBundle(zipName, bundle); zipFile = bundle; } } } } if (zipFile != null) { #if UNITY_4_6 || UNITY_4_7 TextAsset luaCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #else TextAsset luaCode = zipFile.LoadAsset <TextAsset>(fileName); #endif if (luaCode != null) { buffer = luaCode.bytes; Resources.UnloadAsset(luaCode); } } return(buffer); }
string ReadZipFile(string fileName, bool isCacheBundle) { AssetBundle zipFile = null; string content = string.Empty; byte[] buffer = null; string zipName = null; using (CString.Block()) { CString sb = CString.Alloc(256); sb.Append("config"); int pos = fileName.LastIndexOf('/'); if (pos > 0) { sb.Append("_"); sb.Append(fileName, 0, pos).ToLower().Replace('/', '_'); fileName = fileName.Substring(pos + 1); } zipName = sb.ToString(); configMap.TryGetValue(zipName, out zipFile); } var isHaveCache = false; if (zipFile == null) { isHaveCache = false; zipFile = AssetBundle.LoadFromFile(ConfigConst.configResDir + "/" + zipName + Platform.AssetBundleExt); if (isCacheBundle) { configMap[zipName] = zipFile; } } else { isHaveCache = true; } if (zipFile != null) { #if UNITY_5 || UNITY_2017 || UNITY_2018 TextAsset configCode = zipFile.LoadAsset <TextAsset>(fileName); #else TextAsset configCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset; #endif if (configCode != null) { buffer = configCode.bytes; Resources.UnloadAsset(configCode); byte[] decrypt = ConfigEncrypt.Decrypt(buffer); content = System.Text.Encoding.UTF8.GetString(decrypt); } if (!isCacheBundle && !isHaveCache) { zipFile.Unload(true); } } return(content); }