DCET
DCET
移 除 UGUI模 块;新 增 FGUI模 块,包括 UI加 载、UI管理 、UI控 件 管理 代 码自动生成 插件等 完 整 的 FGUI工作 流 ;新 增 行 为树模 块,包括 可 视化编辑器 、双 端 运行时、逻辑全 热更的 完 整 的 行 为树工作 流 ;新 增 Lua模 块,包括 CSharp.Lua(自 动翻译热更 层代码为Lua)、xLua(执行CSharp.Lua翻 译的热更层Lua代 码)、RapidJson、lua-protobuf、LuaSocket、LPeg、FFI for lua53等 完 整 的 Lua热更工作 流 。将 框 架 模 块化,并使用 Unity的 PackageManager进行管理 ,可 以根据 项目需求,按需选择模 块引用 。同 时将框 架 和 游 戏业务分离,使 维护框 架 代 码更方便 。
直接 下 载压缩包,通 过下载地址 :https://github.com/DukeChiang/DCET/archive/dukechiang_master.zip
,进行下 载。使用 Git命令 进行下 载,通 过Git命令 行 工具 ,输入:git clone https://github.com/DukeChiang/DCET.git
,目 标文件 夹(如:D:/WorkSpace/DCET)回 车即可 下 载。使用 SourceTree等 可 视化工具 进行下 载,找到Clone功 能 ,输入源 路 径 :https://github.com/DukeChiang/DCET.git
,选择目 标路径 :D:/WorkSpace/DCET(
,示 例 )然 后 点 击Clone。如果Clone失 败,可 以尝试方式 2进行下 载,然 后 使用 Add功 能 进行可 视化管理 。
中国 版下 载地址 :https://unity.cn/releases
国 际版下 载地址 :https://unity3d.com/get-unity/download/archive
(需要 科学 上 网才能 下 载)国 际版镜像下 载地址 :https://github.com/AlianBlank/download.unity.com
(每 周 更新 )
https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&rel=16
),
https://dotnet.microsoft.com/download
),如果
“System.Exception: Rpc error”
,一般情况下是服务器未成功启动,“XLua.LuaException: F:/DukeChiangGit/ET/Unity/Assets\Res/Lua/Hotfix/Message/AutoGeneratedCode/OuterMessage.lua.txt:600: attempt to call a nil value (method 'setIsRequired')”
,一般情况下是未生成Wrap
为了
服 务器:服 务器代 码所在 目 录为DCET/Server
,并通过DCET/Server/Server.sln
解 决方案 管理 所有 项目(包括 框 架 和 游 戏业务),框 架 代 码所在 目 录为DCET/Server/Packages
,具体 的 项目将 在 进阶文 档中详细介 绍。游 戏业务代码所在 目 录为DCET/Server/Assets
,分 为Init、Runtime、Hotfix、Benchmark
四 个项目 ,其中Init为入口 项目,Runtime为非热更项目、Hotfix为热更 项目、Benchmark为测试项目 ,依 赖关系 为Init→Benchmark→Hotfix→Runtime。客 户端:客 户代码所在 目 录为DCET/Unity
,并通过DCET/Unity/Unity.sln
解 决方案 管理 所有 项目(包括 框 架 和 游 戏业务),框 架 代 码所在 目 录为DCET/Unity/Packages
,具体 的 项目将 在 进阶文 档中详细介 绍。游 戏业务代码所在 目 录为DCET/Unity/Assets
,分 为Runtime、Hotfix、Editor
三 个项目 ,其中Runtime为入口 项目和 非 热更项目、Hotfix为热更 项目、Editor为编辑器项目,依 赖关系 为Editor→Hotfix→Runtime,Runtime通 过反射 或 Lua的 方式 启动Hotfix,所以 不 需要 Runtime依 赖Hotfix。
值得
DCET
.asmdef
,项目
Packages/DCET.Core
,
-
Entity
Entity
即 为实体 ,是 经过纯粹的 ECS不断 改良 而来的 实体化 开发思想 ,他 与 Unity的 GameObject有 一定 的 相似 之 处,但 又 截然 不同 ,具体 的 不同 点在 于Unity是 采 用 的 Entity+Component的 设计思想 ,而ET采 用 的 是 一切 皆 Entity的 设计思想 ,同 时Entity也拥有 Component的 能力 ,这种设计将 为代码组织和重用 带来极大的 便利 ,整 个代码结构就可 以像树状图一样清晰,并且代 码也将 可 以像树枝一样被轻松的组合重用。举个例 子 ,角 色 有 技能 列 表 ,各 个技能 操作 方式 不同 ,有 直接 使用 型 、有 充 能 型 。public class Role : Entity { //
角 色相 关信息 } public class SkillComponent : Entity { private readonly Dictionary<long, Skill> idSkills = new Dictionary<long, Skill>(); //技能 增 删查等 管理 方法 } public class Skill : Entity { //技能 相 关信息 } public class SkillChargeComponent : Entity { public void Start() { //充 能 开始 } public void End() { //充 能 结束 } }
根 据 以上 示 例 可 以看出 ,当 为充能 型 技能 时,可 以为Skill加 上 SkillChargeComponent组件,技能 释放时就可 以走充 能 逻辑;当 技能 为直接 释放型 技能 时,则不需要 加 SkillChargeComponent组件,也就不 会 走 充 能 逻辑,这样一来则可以轻松重用代码逻辑,并且代 码组织结构也十 分 清 晰。 此外,Entity
与 Unity的 MonoBehaviour一样存在生命周期,而ET的 生命 周期 实现方式 略 有 不同 ,是 通 过Attribute标记和 启动时根据 标记信 息 自 动注册 ,然 后 根 据 生命 周期 执行,具体 用法 如下:[ObjectSystem] public class TestComponentAwakeSystem : AwakeSystem<TestComponent, string> { public override void Awake(TestComponent self, string param1) { self.Awake(param1); } } [ObjectSystem] public class TestComponentLoadSystem : LoadSystem<TestComponent> { public override void Load(TestComponent self) { self.Load(); } } [ObjectSystem] public class TestComponentUpdateSystem : UpdateSystem<TestComponent> { public override void Update(TestComponent self) { self.Update(); } } [ObjectSystem] public class TestComponentLateUpdateSystem : LateUpdateSystem<TestComponent> { public override void LateUpdate(TestComponent self) { self.LateUpdate(); } } [ObjectSystem] public class TestComponentDestroySystem : DestroySystem<TestComponent> { public override void Destroy(TestComponent self) { self.Destroy(); } }
-
EventSystem
EventSystem
即 为事件 系 统,是 解 耦的重要 方式 。代 码和现实世界一 样,有 着 千 丝万 缕的联系
,如果所有 的 联系
都 如同乱麻 一般紧密的耦合在一起,将 对代码的维护造成 巨大 的 困 难。这时候 就需要 将 代 码以类
为单位 ,将 类
引用 和 事件 (或 委 托 )作 为联系
的 桥梁,其中类
引用 是 一种强联系的方式,这种方式 是 最 直接 ,最 简单,最 方便 ,最 紧密的 联系方式 ,但 如果仅仅只 用 这种联系方式 也会造成 代 码混乱 ,耦合紧密,难以重用 ,难以维护的 结果。这时候 也就需要
进行联系,也就事件 (或 委 托 )是 解 耦(一 种弱联系),当 被 引用 类同时需要 引用 引用 类时,就需要 通 过这种方式 进行联系,这种方式 是能 为重用 创作条件 、避免代 码形成 网状结构的 联系方式 。最 终代码结构就形成 树状结构,清 晰明了 ,利 于重用 和 维护。 ET
的 事件 系 统实现方式 ,与 上 文 提 到 的 生命 周期 实现方式 原理 相 同 ,具体 的 用法 如下:// 发起
事件 Game.EventSystem.Run(EventIdType.Log, "Hello World"); //捕 获事件 [Event(EventIdType.Log)] public class Log_WriteLine: AEvent<string> { public override void Run(string param1) { Console.WriteLine(param1); } }
AssetBundlePackages/DCET.AssetBundle
,
构建资源Init
场景)
启动资源
资源
Packages/DCET.Config
,
Excel
网络Packages/DCET.Config
,
网络
网络
ET
DCET