| | |
| | | PrebuildCommand.GenerateAll(); |
| | | // 输出到AssetBundles目录 |
| | | var outputPath = Application.dataPath.Replace("Assets", m_UserData.m_OutputPath); |
| | | outputPath = StringUtility.Contact(outputPath, "/logicbytes"); |
| | | outputPath = StringUtility.Contact(outputPath, "/daimazijie"); |
| | | if (Directory.Exists(outputPath)) |
| | | Directory.Delete(outputPath, true); |
| | | //复制新生成的AOT dll到指定路径 |
| | |
| | | } |
| | | // 输出到AssetBundles目录 |
| | | var outputPath = Application.dataPath.Replace("Assets", m_UserData.m_OutputPath); |
| | | outputPath = StringUtility.Contact(outputPath, "/logicbytes"); |
| | | outputPath = StringUtility.Contact(outputPath, "/daimazijie"); |
| | | CopyHotUpdateDll(outputPath); |
| | | MakeBytesVersionFile(); |
| | | AssetDatabase.Refresh(); |
| | |
| | | |
| | | private void MakeBytesVersionFile() |
| | | { |
| | | ChangeBytes(); |
| | | var fileInfos = new List<FileInfo>(); |
| | | FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(m_UserData.m_OutputPath, "/logicbytes"), fileInfos); |
| | | FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(m_UserData.m_OutputPath, "/daimazijie"), fileInfos); |
| | | BytesVersionMaker.WriteAssetsVersionFile(Path.Combine(Directory.GetParent(Application.dataPath).FullName, m_UserData.m_OutputPath), fileInfos); |
| | | Debug.Log("热更新代码更新完毕,生成md5文件"); |
| | | } |
| | |
| | | for (int i = 0; i < AOTGenericReferences.PatchedAOTAssemblyList.Count; i++) |
| | | { |
| | | string dllFile = StringUtility.Contact(aotDir, AOTGenericReferences.PatchedAOTAssemblyList[i]); |
| | | var outDllFile = outputPath + "/" + AOTGenericReferences.PatchedAOTAssemblyList[i] + ".bytes"; |
| | | var outDllFile = outputPath + "/" + AssetVersionUtility.EncodeFileName(AOTGenericReferences.PatchedAOTAssemblyList[i]) + ".bytes"; |
| | | if (!File.Exists(dllFile)) |
| | | { |
| | | DebugEx.LogErrorFormat("错误:{0} 不存在", dllFile); |
| | |
| | | } |
| | | |
| | | FileExtersion.MakeSureDirectory(outDllFile); |
| | | File.Copy(dllFile, outDllFile, true); |
| | | //File.Copy(dllFile, outDllFile, true); |
| | | ChangeBytes(dllFile, outDllFile); |
| | | } |
| | | } |
| | | |
| | |
| | | return; |
| | | } |
| | | FileExtersion.MakeSureDirectory(outDllFile); |
| | | File.Copy(dllFile, outDllFile, true); |
| | | //File.Copy(dllFile, outDllFile, true); |
| | | ChangeBytes(dllFile, outDllFile); |
| | | } |
| | | |
| | | //HybridCLR的Settings面板上设置的要热更的DLL资源 |
| | |
| | | return; |
| | | } |
| | | FileExtersion.MakeSureDirectory(outDllFile); |
| | | File.Copy(dllFile, outDllFile, true); |
| | | //File.Copy(dllFile, outDllFile, true); |
| | | ChangeBytes(dllFile, outDllFile); |
| | | } |
| | | |
| | | //HybridCLR的Settings面板上设置的预留的热更新dlls |
| | |
| | | continue; |
| | | } |
| | | FileExtersion.MakeSureDirectory(outDllFile); |
| | | File.Copy(dllFile, outDllFile, true); |
| | | //File.Copy(dllFile, outDllFile, true); |
| | | ChangeBytes(dllFile, outDllFile); |
| | | } |
| | | } |
| | | |
| | |
| | | FileExtersion.GetAllDirectoryFileInfos(m_UserData.m_OutputPath, fileInfos); |
| | | AssetsVersionMaker.WriteAssetsVersionFile(Path.Combine(Directory.GetParent(Application.dataPath).FullName, m_UserData.m_OutputPath), fileInfos);
|
| | | |
| | | Debug.Log("生成AssetsVersion.txt文件完毕"); |
| | | Debug.Log("AVersion.txt文件完毕"); |
| | | } |
| | | |
| | | void ChangeBytes()
|
| | | void ChangeBytes(string originalDllBytesFilePath, string outDllFile)
|
| | | {
|
| | | string path = StringUtility.Contact(m_UserData.m_OutputPath, "/logicbytes/");
|
| | | // 原始DLL字节内容文件的路径 |
| | | string originalDllBytesFilePath = path + "Assembly-CSharp.dll.bytes";
|
| | | string path = StringUtility.Contact(m_UserData.m_OutputPath, "/daimazijie/");
|
| | |
|
| | | // 临时文件的路径,用于写入"abc"后再追加原始DLL字节内容
|
| | | string tempFilePath = path + "temp_Assembly-CSharp.dll.bytes";
|
| | | string tempFilePath = AssetVersionUtility.EncodeFileName(outDllFile);
|
| | |
|
| | | // 如果目标文件存在,则删除它 |
| | | if (File.Exists(tempFilePath))
|
| | | {
|
| | | File.Delete(tempFilePath);
|
| | | }
|
| | |
|
| | | // 要写入的字符串"abc"
|
| | | string contentToWrite = "abc";
|
| | | string contentToWrite = "cbg";
|
| | |
|
| | | // 将"abc"转换为字节数组
|
| | | byte[] abcBytes = Encoding.ASCII.GetBytes(contentToWrite);
|
| | |
| | | fs.Write(originalDllBytes, 0, originalDllBytes.Length);
|
| | | }
|
| | |
|
| | | ReplaceFile(tempFilePath, originalDllBytesFilePath);
|
| | | }
|
| | |
|
| | | public void ReplaceFile(string sourceFile, string targetFile)
|
| | | {
|
| | | // 确保源文件存在 |
| | | if (!File.Exists(sourceFile))
|
| | | {
|
| | | throw new FileNotFoundException("源文件未找到:" + sourceFile);
|
| | | }
|
| | |
|
| | | // 如果目标文件存在,则删除它 |
| | | if (File.Exists(targetFile))
|
| | | {
|
| | | File.Delete(targetFile);
|
| | | }
|
| | |
|
| | | // 将源文件重命名为目标文件 |
| | | File.Move(sourceFile, targetFile);
|
| | | }
|
| | |
|
| | | |
| | | static int packageIndex |
| | |
| | | using System;
|
| | | using UnityEngine;
|
| | | using LitJson;
|
| | | using System.Linq;
|
| | |
|
| | | public partial class #ClassName#
|
| | | {
|
| | |
| | | try
|
| | | {
|
| | | var line = lines[i];
|
| | | if (!AssetSource.refdataFromEditor)
|
| | | { |
| | | line = new string(line.Reverse().ToArray());
|
| | | }
|
| | | var index = line.IndexOf("\t");
|
| | | if (index == -1)
|
| | | {
|
| | |
| | | try
|
| | | {
|
| | | var line = lines[i];
|
| | | if (!AssetSource.refdataFromEditor)
|
| | | { |
| | | line = new string(line.Reverse().ToArray());
|
| | | }
|
| | | var index = line.IndexOf("\t");
|
| | | if (index == -1)
|
| | | {
|
| | |
| | | using UnityEngine;
|
| | | using UnityEditor;
|
| | | using System.IO;
|
| | | using System.Text;
|
| | | using System.Linq;
|
| | |
|
| | | public class AssetBundleBuildExtersion
|
| | | {
|
| | |
| | | for (int i = 0; i < targetAssetBundles.Count; i++)
|
| | | {
|
| | | var assetBundleBuild = new AssetBundleBuild();
|
| | | assetBundleBuild.assetBundleName = targetAssetBundles[i];
|
| | |
|
| | | assetBundleBuild.assetBundleName = AssetVersionUtility.EncodeFileName(targetAssetBundles[i]);
|
| | | assetBundleBuild.assetNames = AssetDatabase.GetAssetPathsFromAssetBundle(targetAssetBundles[i]);
|
| | | assets.Add(assetBundleBuild);
|
| | | }
|
| | |
|
| | | var rootPath = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, category);
|
| | | var mainFile = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, GetMainFestFileName(buildTarget));//改名字前
|
| | | var mainFileRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, category, "_assetbundle");//改名字后
|
| | | var mainFileRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, AssetVersionUtility.EncodeFileName(category), "_abundle");//改名字后
|
| | | var manifest = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, GetMainFestFileName(buildTarget), ".manifest");
|
| | | var manifestRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, category, "_assetbundle.manifest");
|
| | | var manifestRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, AssetVersionUtility.EncodeFileName(category), "_abundle.manifest");
|
| | |
|
| | | if (rebuild && Directory.Exists(rootPath))
|
| | | Directory.Delete(rootPath, true);
|
| | |
| | | for (int i = 0; i < _fileInfos.Count; i++)
|
| | | {
|
| | | var fileInfo = _fileInfos[i];
|
| | | if (fileInfo.Name == "AssetsVersion.txt")
|
| | | if (fileInfo.Name == "AVersion.txt")
|
| | | {
|
| | | continue;
|
| | | }
|
| | |
|
| | | if (fileInfo.Name == "AssetsVersionCmp.txt")
|
| | | if (fileInfo.Name == "AVersionCmp.txt")
|
| | | {
|
| | | continue;
|
| | | }
|
| | |
| | | {
|
| | | continue;
|
| | | }
|
| | | if (fileInfo.FullName.Contains("logicbytes"))
|
| | | if (fileInfo.FullName.Contains("daimazijie"))
|
| | | {
|
| | | continue;
|
| | | }
|
| | |
| | | lines.Add(StringUtility.Contact(relativePath, "\t", extersion, "\t", fileSize, "\t", md5));
|
| | | }
|
| | |
|
| | | var assetVersionFile = StringUtility.Contact(Application.dataPath, "/Resources/AssetsVersionCmp.txt");
|
| | | var assetVersionFile = StringUtility.Contact(Application.dataPath, "/Resources/AVersionCmp.txt");
|
| | | if (File.Exists(assetVersionFile))
|
| | | {
|
| | | File.Delete(assetVersionFile);
|
| | |
| | | for (int i = 0; i < _fileInfos.Count; i++)
|
| | | {
|
| | | var fileInfo = _fileInfos[i];
|
| | | if (fileInfo.Name == "AssetsVersion.txt")
|
| | | if (fileInfo.Name == "AVersion.txt")
|
| | | {
|
| | | continue;
|
| | | }
|
| | | if (fileInfo.Name == "AssetsVersionCmp.txt")
|
| | | if (fileInfo.Name == "AVersionCmp.txt")
|
| | | {
|
| | | continue;
|
| | | }
|
| | |
| | | {
|
| | | continue;
|
| | | }
|
| | | if (fileInfo.FullName.Contains("logicbytes"))
|
| | | if (fileInfo.FullName.Contains("daimazijie"))
|
| | | {
|
| | | continue;
|
| | | }
|
| | |
| | | lines.Add(StringUtility.Contact(relativePath, "\t", extersion, "\t", fileSize, "\t", md5));
|
| | | }
|
| | |
|
| | | var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar, "AssetsVersion.txt");
|
| | | var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar, "AVersion.txt");
|
| | | if (File.Exists(assetVersionFile))
|
| | | {
|
| | | File.Delete(assetVersionFile);
|
| | | }
|
| | |
|
| | | File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar, "AssetsVersion.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
|
| | | File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar, "AVersion.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
|
| | | } |
| | | |
| | | } |
| | |
| | | for (int i = 0; i < _fileInfos.Count; i++)
|
| | | {
|
| | | var fileInfo = _fileInfos[i];
|
| | | if (fileInfo.Name == "logicbytes.txt")
|
| | | if (fileInfo.Name == "daimazijie.txt")
|
| | | {
|
| | | continue;
|
| | | }
|
| | |
| | | lines.Add(StringUtility.Contact(relativePath, "\t", extersion, "\t", fileSize, "\t", md5));
|
| | | }
|
| | |
|
| | | var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar, "logicbytes.txt");
|
| | | var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar, "daimazijie.txt");
|
| | | if (File.Exists(assetVersionFile))
|
| | | {
|
| | | File.Delete(assetVersionFile);
|
| | | }
|
| | |
|
| | | File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar, "logicbytes.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
|
| | | File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar, "daimazijie.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
|
| | | } |
| | | |
| | | } |
| | |
| | | //该文件在打包时生成 记录随包的所有资源的信息
|
| | | //该文件记录的资源在包中肯定存在,所以不用去取指定的资源文件获得FileInfo 计算MD5
|
| | | //通过文件和AssetsVersion.txt的文件做比较,来判断是否需要下载资源
|
| | | //logicbytes.txt 包含元数据和代码 如果不随包也要处理
|
| | | //daimazijie.txt 包含元数据和代码 如果不随包也要处理
|
| | | static void MakePackageMD5File()
|
| | | {
|
| | | var fileInfos = new List<FileInfo>();
|
| | | FileExtersion.GetAllDirectoryFileInfos(ResourcesPath.Instance.StreamingAssetPath, fileInfos);
|
| | | AssetsVersionCmpMaker.WriteAssetsVersionFile(ResourcesPath.Instance.StreamingAssetPath, fileInfos);
|
| | | Debug.Log("--生成AssetsVersionCmp.txt文件完毕");
|
| | | Debug.Log("--生成AVersionCmp.txt文件完毕");
|
| | | }
|
| | |
|
| | | private static void PreBuild(string _publisher, int _buildIndex)
|
| | |
| | | }
|
| | |
|
| | | static string configClassPath = "Assets/Scripts/Core/GameEngine/Model/Config";
|
| | | static string configILClassPath = "LogicProject/Src/Config";
|
| | | static string configILClassPath = "Assets/Scripts/LogicProject/Config";
|
| | | static string templatePath = "Assets/Editor/ScriptTemplate/ConfigDataTemplate.txt";
|
| | |
|
| | | public static void CreatNewConfigClass(string _name, bool isIL)
|
| | | {
|
| | | string newConfigPath;
|
| | | newConfigPath = configILClassPath + string.Format("/IL{0}Config.cs", _name);
|
| | | if (File.Exists(newConfigPath))
|
| | | {
|
| | | //默认兼容旧的ILRuntime表,如果要生成新的先删除旧的表代码
|
| | | isIL = true;
|
| | | }
|
| | | if (isIL)
|
| | | {
|
| | | newConfigPath = configILClassPath + string.Format("/IL{0}Config.cs", _name);
|
| | |
| | | EditorGUILayout.Space();
|
| | | EditorGUILayout.Space();
|
| | | InGameDownTestUtility.isReadVesionEx = EditorGUILayout.Toggle("是否下载热更代码", InGameDownTestUtility.isReadVesionEx);
|
| | | EditorGUILayout.TextField("开启下载热更代码,会读取VersionConfigEx.txt 分支需配置正确, 检测logicbytes.txt");
|
| | | EditorGUILayout.TextField("开启下载热更代码,会读取VersionConfigEx.txt 分支需配置正确, 检测daimazijie.txt");
|
| | | }
|
| | |
|
| | | } |
| | |
| | | using System;
|
| | | using System.Collections.Generic;
|
| | | using System.IO;
|
| | | using System.Linq;
|
| | | using System.Text;
|
| | | using System.Windows.Forms;
|
| | | using UnityEditor;
|
| | |
| | | Directory.CreateDirectory(configOutPutPath);
|
| | | }
|
| | |
|
| | | string filePath = configOutPutPath + "/" + fileName + ".txt";
|
| | | string filePath = configOutPutPath + "/" + AssetVersionUtility.EncodeFileName(fileName) + ".txt";
|
| | | if (File.Exists(filePath))
|
| | | {
|
| | | File.Delete(filePath);
|
| | | }
|
| | |
|
| | | if (fileName.Contains("MapData_"))
|
| | | {
|
| | | File.Copy(fileInfo.FullName, filePath);
|
| | | }
|
| | | else
|
| | | {
|
| | | //按行读取文件,并将每行内容倒序写入新文件
|
| | | using (StreamReader sr = new StreamReader(fileInfo.FullName, Encoding.Default))
|
| | | {
|
| | | using (StreamWriter sw = new StreamWriter(filePath, false, Encoding.Default))
|
| | | {
|
| | | string line;
|
| | | while ((line = sr.ReadLine()) != null)
|
| | | {
|
| | | sw.WriteLine(new string(line.Reverse().ToArray()));
|
| | | }
|
| | | }
|
| | | }
|
| | | |
| | | }
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 生成所有表模型
|
| | |
| | | {
|
| | | public class AssetVersion
|
| | | {
|
| | | //参考文本 logicbytes/Assembly-CSharp.dll.bytes .bytes 7360512 71157bfdecb53e8a580432621f3725c7
|
| | | //参考文本 daimazijie/Assembly-CSharp.dll.bytes .bytes 7360512 71157bfdecb53e8a580432621f3725c7
|
| | | string m_RelativePath = string.Empty;
|
| | | public string relativePath { get { return m_RelativePath; } }
|
| | |
|
| | |
| | | using System.IO;
|
| | | using System;
|
| | | using UnityEngine;
|
| | |
|
| | | using System.Linq;
|
| | |
|
| | | namespace StartAot
|
| | | {
|
| | |
| | | int lineIndex = 0;
|
| | | while ((line = reader.ReadLine()) != null)
|
| | | {
|
| | | #if !UNITY_EDITOR
|
| | | line = new string(line.Reverse().ToArray());
|
| | | #endif
|
| | | lineIndex++;
|
| | | if (lineIndex <= 3)
|
| | | {
|
| | |
| | | {
|
| | | // 特殊处理
|
| | | byte[] assetData;
|
| | | if (asset == "Assembly-CSharp.dll.bytes")
|
| | | {
|
| | |
|
| | | assetData = new byte[www.downloadHandler.data.Length - 3];
|
| | | Array.Copy(www.downloadHandler.data, 3, assetData, 0, assetData.Length);
|
| | | }
|
| | | else
|
| | | { |
| | | assetData = www.downloadHandler.data;
|
| | | }
|
| | |
|
| | |
|
| | | Debug.Log($"dll:{asset} size:{assetData.Length}");
|
| | | s_assetDatas[asset] = assetData;
|
| | |
| | | HomologousImageMode mode = HomologousImageMode.SuperSet;
|
| | | foreach (var aotDllName in AOTMetaAssemblyFiles)
|
| | | {
|
| | | if (aotDllName == "Assembly-CSharp.dll.bytes")
|
| | | if (aotDllName == ResourcesModel.Instance.EncodeFileName("Assembly-CSharp.dll.bytes"))
|
| | | continue;
|
| | | // 加载assembly对应的dll,会自动为它hook。一旦aot泛型函数的native函数不存在,用解释器版本代码
|
| | | LoadImageErrorCode err = RuntimeApi.LoadMetadataForAOTAssembly(ReadBytesFromStreamingAssets(aotDllName), mode);
|
| | |
| | | {
|
| | | #if !UNITY_EDITOR
|
| | | LoadMetadataForAOTAssemblies();
|
| | | _hotUpdateAss = Assembly.Load(ReadBytesFromStreamingAssets("Assembly-CSharp.dll.bytes"));
|
| | | _hotUpdateAss = Assembly.Load(ResourcesModel.Instance.EncodeFileName("Assembly-CSharp.dll.bytes"));
|
| | | s_assetDatas = null;
|
| | | #else
|
| | | if (_hotUpdateAss == null)
|
| | |
| | | using LitJsonForAot;
|
| | | using System.Collections;
|
| | | using UnityEngine.Networking;
|
| | |
|
| | | using System.Linq;
|
| | |
|
| | | namespace StartAot
|
| | | {
|
| | |
| | | {
|
| | | //不下载时本地安卓测试路径
|
| | | public string assetBundlesPath { get; private set; }
|
| | | public static string bytesFolderName = "logicbytes/";
|
| | | public static string bytesFolderName = "daimazijie/";
|
| | | public string StreamingAssetPath { get; private set; }
|
| | | public string ExternalStorePath { get; private set; }
|
| | |
|
| | |
| | | string assetBytesUrl;
|
| | | //从网络获取的资源版本信息
|
| | | public Dictionary<string, AssetVersion> assetVersions = new Dictionary<string, AssetVersion>();
|
| | | //本地LogicBytes文件和 assetVersions 比较是否需要下载
|
| | | //本地daimazijie文件和 assetVersions 比较是否需要下载
|
| | | public Dictionary<string, AssetVersion> localAssetVersions = new Dictionary<string, AssetVersion>();
|
| | | public static string versionUrlResult { get; private set; }
|
| | |
|
| | |
| | |
|
| | | }
|
| | |
|
| | | //将文件名倒序,加上_aop后缀
|
| | | public string EncodeFileName(string name)
|
| | | {
|
| | | name = name.Replace("\\", "/");
|
| | | int index = name.LastIndexOf("/");
|
| | | string headString;
|
| | | if (index >= 0)
|
| | | {
|
| | | int dotLastIndex = name.LastIndexOf(".");
|
| | | if (dotLastIndex == -1)
|
| | | {
|
| | | headString = name.Substring(0, index);
|
| | | name = name.Substring(index + 1);
|
| | | return StringUtility.Contact(headString, "/", new string(name.Reverse().ToArray()), "_aop");
|
| | | }
|
| | | else
|
| | | {
|
| | | headString = name.Substring(0, index);
|
| | | var ext = name.Substring(dotLastIndex);
|
| | | name = name.Substring(index + 1, dotLastIndex - index - 1);
|
| | | return StringUtility.Contact(headString, "/", new string(name.Reverse().ToArray()), "_aop", ext);
|
| | | }
|
| | | }
|
| | | else
|
| | | {
|
| | | int dotLastIndex = name.LastIndexOf(".");
|
| | | if (dotLastIndex == -1)
|
| | | return StringUtility.Contact(new string(name.Reverse().ToArray()), "_aop");
|
| | | else
|
| | | {
|
| | | var ext = name.Substring(dotLastIndex);
|
| | | name = name.Substring(0, dotLastIndex);
|
| | | return StringUtility.Contact(new string(name.Reverse().ToArray()), "_aop", ext);
|
| | | }
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | |
|
| | | public string GetAssetFilePath(string _assetKey)
|
| | | {
|
| | | _assetKey = EncodeFileName(_assetKey);
|
| | | var path = Path.Combine(ExternalStorePath, _assetKey);
|
| | | if (!File.Exists(path))
|
| | | {
|
| | |
| | | //LogicBytes文件的MD5信息
|
| | | public void RequestLogicBytes()
|
| | | {
|
| | | var remoteURL = string.Concat(versionInfo.GetResourcesURL(VersionConfigEx.Get().branch), fixPath, "/logicbytes.txt");
|
| | | var remoteURL = string.Concat(versionInfo.GetResourcesURL(VersionConfigEx.Get().branch), fixPath, "/daimazijie.txt");
|
| | | //var localURL = string.Concat(.ExternalStorePath, "/logicbytes.txt");
|
| | | assetBytesUrl = remoteURL;
|
| | | Debug.Log("http地址:logicbytesUrl " + assetBytesUrl);
|
| | |
| | | if (isPCTestDownLoad || Application.isMobilePlatform)
|
| | | {
|
| | | //读取的一定是StreamingAssetPath路径
|
| | | StartCoroutine(ReadText("logicbytes", (isOK, value) =>
|
| | | StartCoroutine(ReadText("daimazijie", (isOK, value) =>
|
| | | {
|
| | | if (isOK)
|
| | | InitLocalLogicbytes(value);
|