# lemc **Repository Path**: kaciya/lemc ## Basic Information - **Project Name**: lemc - **Description**: unity3d 开发框架 - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-16 - **Last Updated**: 2024-06-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # lemc 开发框架简介 一直想为这套框架取个高大上的名字,不过可惜这方面没啥天赋最后还是将就着先用这个名字吧,哈哈哈! fw 这套框架最开始的初衷只是为了做个人知识积累的一个代码库来用的,至今它也是作为我的代码库来用的,只不过为了让里面的功能代码能快速被提取出来使用最后演变成了一套底层开发框架 - 框架结构 * Config 框架配置脚本 * Core 框架基础核心设计模板 * Editor 集成工具集 * Extend 扩展对象集 * Modules 模块仓库 * ThirdPlugins 第三方插件库 # lemc 的导入 项目采用git 管理方式的话可以使用 git submodule 的方式导入项目到 “Asset/lemc” 工程目录下 [视屏教程-国内](https://v.qq.com/x/page/a3046v47msy.html) [视屏教程-YouTube](https://www.youtube.com/watch?v=G1NvPQO69XM) - 框架地址 * github https://github.com/liwei1dao/lemc.git * gitee https://gitee.com/liwei1dao/lemc.git # lemc 初始环境配置 项目成功导入之后我们需要做一件非常重要的事情,那就是配置初始环境,配置初始环境其实也比较简单就是需要使用框架自带打包工具集将框架的模块仓库以及我们项目之定义的模块全部注册到打包配置里面去,这样框架在运行对应的模块时才能找到对应的资源目录, 框架工具集:Window => lemc => 打包工具 添加 lemc /Modules 目录进入左侧列表,右侧将会扫描出所有模块目录以及需要打包编译的文件列表 # lemc 模块与组件 lemc 的底层核心就是module,comp,module是comp的容器,管理各类功能以及业务组件以及协调各组件之间的接口调用 模块基础接口: ``` //模块基础状态 public enum ModelBaseState { Close = -1, //关闭状态 Loading = 1, //加载中状态 LoadEnd = 2, //加载完成状态 Start = 3, //启动状态 } //基础模块 public interface IModule { void Load(params object[] agr); //模块加载 bool LoadEnd(); //加载完毕 void Start(params object[] agr); //模块启动 void Close(); //模块关闭 } //扩展模块---------------------------------------------------------------------------- //更新模块 public interface IUpdataMode: IModule { void Update(float time); } //物理更新模块 public interface IFixedUpdateMode : IModule { void FixedUpdate(); } //场景管理模块 public interface ISceneMode : IModule { IEnumerator LoadScene(); } 模块基础抽象类 public abstract class ModelBase : IModule{ public string ModuleName; //模块名称 public ModelBaseState State = ModelBaseState.Close; //模块状态 protected List MyComps = new List(); //组件列表 protected Module_TimerComp TimerComp; //计时器组件 (需要则初始化) protected Module_CoroutineComp CoroutineComp; //协程组件(需要则初始化) protected Module_ResourceComp ResourceComp; //资源管理组件(需要则初始化) ... //添加组件 protected virtual CP AddComp(params object[] _Agr) where CP : ModelCompBase, new() { CP Comp = new CP(); MyComps.Add(Comp); if (State > ModelBaseState.Close) Comp.Load(this, _Agr); if (State == ModelBaseState.Start) Comp.Start(this, _Agr); return Comp; } //添加组件 protected virtual ModelCompBase AddComp(ModelCompBase Comp, params object[] _Agr) { MyComps.Add(Comp); if (State > ModelBaseState.Close) Comp.Load(this, _Agr); if (State == ModelBaseState.Start) Comp.Start(this, _Agr); return Comp; } //移除组件 protected virtual void RemoveComp(ModelCompBase Comp) { MyComps.Remove(Comp); Comp.Close(); } ... } ``` 组件 ``` //组件状态 public enum ModelCompBaseState { Close, //关闭状态 Loading, //加载中状态 LoadEnd, //加载完成状态 Start, //启动状态 } //组件接口对象 public interface IModelCompBase { void Load(ModelBase module, params object[] agr); //模块初始化 void Start(params object[] agr); //模块启动 void Close(); //关闭组件 void ShowInspector(); //自定义监控面板 } //组件抽象基类 public abstract class ModelCompBase: IModelCompBase{ protected ModelBase MyModule; //模块对象 public ModelCompBaseState State = ModelCompBaseState.Close; //状态 ... //组件load 完成之后需要主动调用此接口 否则module 状态不会进入start状态的 protected virtual void LoadEnd() { State = ModelCompBaseState.LoadEnd; MyModule.LoadEnd(); } ... } 泛型模块组件基类 方便组件与模块资源的直接应用 public abstract class ModelCompBase : ModelCompBase where C: ModelBase, new() { protected new C MyModule; public override void Load(ModelBase _ModelContorl, params object[] agr) { MyModule = _ModelContorl as C; base.Load(_ModelContorl, agr); } } ``` # lemc 第一个app模块 创建一个自己的模块集合目录 如:appmodules,在appmodules 中创建 以Module 结尾的模块目录如:demoModule,模块默认目录结构 - demoModule * Script c# 脚本目录 * Lua Lua 脚本目录 * Editor 模块编辑工具目录 * Prefab 预制物集合默认目录 * Image 图片资源集合默认目录 * Scene 场景关卡集合默认目录 * Sound 音频资源默认目录 - 以上目录之外还可以自定义自己的资源目录,资源模块的使用需要与资源打包工具的打包规则相应使用才可 创建模块CarDemoModule .cs 和CarDemoMianViewComp.cs,,"MianViewComp" 为预制界面的名称,放在Prefab下, **ok 之后 将appmodules 目录添加到资源编译集合中去** ``` //demo 模块 using lemc; public class CarDemoModule : ManagerContorBase { private CarDemoMianViewComp MianViewComp; public override void Load(params object[] agr) { ResourceComp = AddComp(); MianViewComp = AddComp(); base.Load(agr); } } ``` ``` using UnityEngine; using lemc; using UnityEngine.UI; public class CarDemoMianViewComp : Model_BaseViewComp { private Button demobutt; public override void Load(ModelBase module, params object[] agr) { base.Load(module, "MianViewComp"); demobutt = UIGameobject.OnSubmit