前端开发框架整理(一些记录给自己看的)
1. 目录结构
(1) Config
(2) Plugins
(3) Resource
(4) Script
(5) StreamingAssets
(6) UnityVS
(7) XLua
(8) DOC
(9) SCENE
Assets _
|_ Resource (资源) (AssetsPackage -> 资源打包,待研究)
|_ Plugins (插件)
|_ LuaScripts (lua脚本)
|_ Reporter (异常捕获,性能调试,BUG Reporter)
|_ Scenes (场景)
|_ Scripts (C#脚本)
|_ StreamingAssets (RAW目录)
|_ Editor (打包)
二. 框架事项
1. 模块管理
(1) UI管理
(2) 协程管理
(3) 定时器管理
(4) 资源管理
(5) 网络管理
(6) 配置表
(7) XLua
三. 初始化
//入口脚本
GameLaunch.cs
1. 初始化Logger
2. 初始化App版本
(1) AssetBundleConfig.cs:AssetBundle配置文件
(2) AssetBundleManager.cs:AssetBundle管理类
为外部提供统一的资源加载界面、协调Assetbundle各个子系统的运行
/// 注意事项:
/// 1、抛弃Resources目录的使用,官方建议:https://unity3d.com/cn/learn/tutorials/temas/best-practices/resources-folder?playlist=30089
/// 2、提供Editor和Simulate模式,前者不适用Assetbundle,直接加载资源,快速开发;后者使用Assetbundle,用本地服务器模拟资源更新
/// 3、场景不进行打包,场景资源打包为预设
/// 4、只提供异步接口,所有加载按异步进行
/// 5、采用LZMA压缩方式,性能瓶颈在Assetbundle加载上,ab加载异步,asset加载同步,ab加载后导出全部asset并卸载ab
/// 6、所有公共ab包(被多个ab包依赖)常驻内存,非公共包加载asset以后立刻卸载,被依赖的公共ab包会随着资源预加载自动加载并常驻内存
/// 7、随意卸载公共ab包可能导致内存资源重复,最好在切换场景时再手动清理不需要的公共ab包
/// 8、常驻包(公共ab包)引用计数不为0时手动清理无效,正在等待加载的所有ab包不能强行终止---一旦发起创建就一定要等操作结束,异步过程进行中清理无效
/// 9、切换场景时最好预加载所有可能使用到的资源,所有加载器用完以后记得Dispose回收,清理GC时注意先释放所有Asset缓存
/// 10、逻辑层所有Asset路径带文件类型后缀,且是AssetBundleConfig.ResourcesFolderName下的相对路径,注意:路径区分大小写
/// 使用说明:
/// 1、由Asset路径获取AssetName、AssetBundleName:ParseAssetPathToNames
/// 2、设置常驻(公共)ab包:SetAssetBundleResident(assebundleName, true)---公共ab包已经自动设置常驻
/// 2、(预)加载资源:var loader = LoadAssetBundleAsync(assetbundleName),协程等待加载完毕后Dispose:loader.Dispose()
/// 3、加载Asset资源:var loader = LoadAssetAsync(assetPath, TextAsset),协程等待加载完毕后Dispose:loader.Dispose()
/// 4、离开场景清理所有Asset缓存:ClearAssetsCache(),UnloadUnusedAssetBundles(), Resources.UnloadUnusedAssets()
/// 5、离开场景清理必要的(公共)ab包:TryUnloadAssetBundle(),注意:这里只是尝试卸载,所有引用计数不为0的包(还正在加载)不会被清理
(3) AssetsPathMapping.cs:Assetbundle相关的Asset路径映射解析,每次在构建Assetbunlde完成自动生成,每次有资源更新时需要强行下载一次
/// 说明: 映射规则:
/// 1)对于Asset:Asset加载路径(相对于Assets文件夹)到Assetbundle名与Asset名的映射
/// 2)对于带有Variant的Assetbundle,做通用替换处理
/// 注意:Assets路径带文件类型后缀,且区分大小写
/// 使用说明:
/// 1)asset加载:
/// 假定AssetBundleConfig设置为AssetsFolderName = "AssetsPackage",且:
/// A)assetbundle名称:assetspackage/ui/prefabs/view/uiloading_prefab.assetbundle
/// B)assetbundle中资源:UILoading.prefab
/// C)Assets路径为:Assets/AssetsPackage/UI/Prefabs/View/UILoading.prefab
/// 则代码中需要的加载路径为:UI/Prefabs/View/UILoading.prefab
/// 2)带variant的Assetbundle资源加载:
/// 假定设置为:
/// A)assetbundle名称:assetspackage/ui/prefabs/language,定义在以下两个子路径
/// Assets/AssetsPackage/UI/Prefabs/Language/[Chinese],variant = chinese
/// Assets/AssetsPackage/UI/Prefabs/Language/[English],variant = english
/// B)assetbundle中资源:
/// Assets/AssetsPackage/UI/Prefabs/Language/[Chinese]/TestVariant.prefab
/// Assets/AssetsPackage/UI/Prefabs/Language/[English]/TestVariant.prefab
/// C)使用时设置激活的Variant为chinese或者english,则代码中需要的加载路径统一为:
/// Assets/AssetsPackage/UI/Prefabs/TestVariant.prefab===>即variant目录([Chinese]、[English])将被忽略,使逻辑层代码不需要关注variant带来的路径差异
(4) AssetBundleUtility.cs:Assetbundle相关的通用静态函数,提供运行时,或者Editor中使用到的有关Assetbundle操作和路径处理的函数
(5) Manifest.cs:Manifest管理:提供对AssetBundleManifest类的封装
/// 注意:关于Manifest,Unity有个2个Bug:不记得在哪个版本修复了,这里使用manifest相关接口一律自行过滤掉,两个bug如下:
/// 1、可能会给空的ab名字,具体情况未知
/// 2、可能会包含自身,具体情况未知
另外再开一个章节,记录资源加载管理。
目标:
1. 玩转XLua