新闻详情

新闻详情

首页 / 资讯中心 / 详情

ET10 从零打造 MMO 技能框架:33 节实战课程体系与技术全景解析

发布时间:2026/9/16 21:56:35来源:尧图网络
ET10 从零打造 MMO 技能框架:33 节实战课程体系与技术全景解析
ET10 从零打造 MMO 技能框架33 节实战课程体系与技术全景解析【免费下载链接】ETUnity3D Client And C# Server Framework项目地址: https://gitcode.com/GitHub_Trending/et/ET导读本文以 ET 框架当前仓库为 ET10 版本Unity3D 客户端 C# 服务端双端框架官方《课程大纲.md》为骨架完整梳理一套从进入场景、创建角色到实现完整魔兽世界式技能框架与 BT 行为树编辑器的 33 节实战课程体系并逐课对照当前仓库源码Packages/cn.etetet.spell、Packages/cn.etetet.numeric、Packages/cn.etetet.behaviortree、Packages/cn.etetet.move等包说明其落地实现。读完本文你将掌握 ET10 中数值组件、技能/Buff/Effect 框架、AI 节点设计、行为树编辑器等核心模块的架构思路与源码证据并了解如何按此大纲循序渐进地动手开发一款带怪物 AI、仇恨、天赋与光环机制的 MMO 战斗 Demo。课程定位以魔兽世界式技能框架为终点的完整 MMO 实战路线《课程大纲.md》规划了一条非常清晰的开发路线先完成最基础的场景、角色、移动与输入第 15 课再搭建配置与怪物 AI第 68 课随后改造数值组件第 9 课紧接着用大量篇幅第 1033 课设计并实现一套经过重构的更好的魔兽世界技能框架最后第 3439 课亲手开发一个行为树BT可视化编辑器。大纲作者同时说明Demo 开发过程中包含大量对 ET 框架的优化与修改课程采用持续开发、持续录制的模式内容不止大纲所列后续会持续增加新功能并配套视频每周还有直播答疑。从仓库结构看这套课程所依赖的正是当前仓库中可独立引用的多个 ET Package课程阶段关联 Package核心职责场景/角色/移动15 课cn.etetet.unit、cn.etetet.move、cn.etetet.recast、cn.etetet.configUnit 实体、移动/转向组件、recast 寻路、配置表怪物 AI8、15、28 课cn.etetet.behaviortree、cn.etetet.conditionexpr行为树节点、条件表达式、AI 驱动数值组件9 课cn.etetet.numericKey-Value 数值、五段公式、广播与监视技能/Buff/Effect1033 课cn.etetet.spell技能配置、施放、Buff、Effect、目标选择、仇恨、Spell ModifyBT 编辑器3439 课cn.etetet.behaviortree/Editor可视化节点编辑、自动布局、剪贴板下文将按大纲顺序逐阶段展开每个阶段都会给出课程要点、设计思路与仓库源码佐证。第一阶段场景、角色与基础操控第 15 课1. 进入场景创建角色课程第一步是让玩家进入场景并创建出可操控的角色。在 ET10 中游戏世界里的每个可见单位都由cn.etetet.unit包中的Unit实体承载见 Unit.csUnitComponent负责场景内 Unit 的挂载与查询UnitTypeHelper用于区分 Unit 类型。创建角色的本质就是向场景创建一个挂载了位置、移动、数值等组件的Unit实体这一思路贯穿后续所有玩法怪物、宠物、玩家本质上都是 Unit。2. 摄像机跟随角色创建后需要实现第三人称摄像机平滑跟随。ET10 的客户端表现层HotfixView与逻辑层分离摄像机跟随属于纯客户端表现逻辑通常放在客户端 View 层监听 Unit 的位置变化事件cn.etetet.unit包中定义了UnitEventType等事件类型并驱动 Unity 摄像机。3. 按键鼠标输入新的 InputSystem课程使用 Unity 新一代 InputSystem 处理键盘与鼠标输入。仓库中Packages/cn.etetet.mapplay/Settings下带有.inputactions输入配置文件说明框架已按 InputSystem 的组织方式管理输入动作输入层只负责把按了哪个键翻译成语义化的动作移动、施法、选中目标再转交给逻辑层处理避免逻辑层与具体输入设备耦合。4. 寻路支持寻路数据导出与地形terrain支持ET 服务端支持 3D recast 寻路在 Unity 中导出场景 NavMesh 数据服务端基于cn.etetet.recast包纯 C# 实现见 recast 包目录进行寻路计算。课程强调寻路数据导出 terrain 支持即要保证客户端烘焙的地形数据能导出给服务端使用客户端与服务端使用同一套数学库cn.etetet.mathematics保证坐标计算结果一致。5. 移动移动逻辑集中在cn.etetet.move包MoveComponent见 MoveComponent.cs管理移动状态与移动速度TurnComponent管理朝向MoveHelper提供移动到目标点/跟随目标等协程化接口服务端C2M_PathfindingResultHandler接收客户端的寻路请求M2C_PathfindingResultHandler把服务端计算结果广播回客户端。一个值得注意的细节cn.etetet.move中提供了 NumericWatcher_Speed_ChangeMoveSpeed.cs当角色的速度数值NumericType.Speed变化时例如被减速/加速 Buff 命中移动组件会自动同步新速度——这正是数值组件与移动系统联动的示范也呼应了大纲第 9 课对数值组件的改造。第二阶段配置表与怪物基础 AI第 68 课6. UnitConfig 配置kv课程要求用 Key-Value 形式的配置表管理 Unit 的基础属性。ET10 的配置体系由cn.etetet.config包承载Luban 配置生成见 config 包策划在 Excel/Luban 表中填好配置生成代码后即可在逻辑中以ConfigCategory.Get(id)方式读取例如SpellConfigCategory、BuffConfigCategory都是这种配置 分类器的模式。7. 生成怪物在场景中按配置生成怪物读取 UnitConfig 得到怪物的血量、速度、攻击力等初始数值创建Unit实体并挂载NumericComponent、MoveComponent、AI 节点等组件。cn.etetet.unit包的UnitComponentSystem提供了 Unit 生命周期的系统方法。8. 怪物巡逻 AI看看 ET 写 AI 多简单这是课程中第一次引入 AI。ET 的 AI 思路在配套文档 Book/6.1AI框架.md 中有非常完整的论述核心结论是状态机的问题对象身上任何数据都是状态状态机又把部分状态定义成节点导致巡逻→追逐→攻击→返回之间产生 N 平方级的网状转换节点一多就难以维护行为树的问题行为树是响应式 AI复杂度从 N² 降为 N但 AI 复杂时树会非常庞大且难以重构且部分 Action 是持续过程协程行为树管理协程很不舒服ET 的做法AI 的本质就是根据当前状态执行相应行为。抽象出AINode每个节点包含条件判断Check与协程行为Runpublic class AINode { public virtual bool Check(Unit unit) // 检测条件是否满足 public virtual ETVoid Run(Unit unit, ETCancelToken cancelToken) }巡逻、攻击、返回三个节点各自实现Check与Run主循环每秒遍历节点找到第一个Check通过的节点若与当前节点不同则先cancelToken.Cancel()打断当前协程再创建新cancelToken执行新节点。关键约束行为内部所有协程都必须支持取消例如await TimeComponent.Instance.Wait(2000, cancelToken)否则怪物无法从巡逻平滑切换到攻击。这个节点即逻辑块、节点可复用、协程可取消的设计在第 8 课怪物巡逻、第 15 课实现一个 BT、第 28 课怪物 AI 完善巡逻/追击/返回中会反复出现。仓库中的cn.etetet.behaviortree包则把该思路产品化BTNode、BTAction、BTCondition、BTCompositeBTSequence/BTSelector、BTDecorateBTNot等节点模型见 behaviortree 模型目录BTRoot是树根BTEnv作为节点间共享的黑板环境BTDispatcherABTHandler负责按节点类型分发执行逻辑。第三阶段数值组件改造实现数值同步第 9 课第 9 课是整套技能框架的地基数值组件改造——NumericType 生成、最大值限制、广播机制、是否存库、数值同步。其理论背景见 Book/5.6数值组件设计.md核心痛点在于魔兽世界/MOBA 类角色的数值属性多达几十种且相互影响Buff 加绝对值、加百分比、最终值再翻倍如果用传统的字段式数值类Hp/MaxHp/Speed…每种属性都要 5 个字段Base/Add/Pct/FinalAdd/FinalPct 独立公式几十种属性就是几百个字段和几十个雷同的公式Buff 配置也无法简单定位字段。ET 的方案是Key-Value 保存数值 统一五段公式final (((base add) * (100 pct) / 100) finalAdd) * (100 finalPct) / 100在当前的cn.etetet.numeric包中该设计被实现为见 NumericComponent.cs 与 NumericComponentSystem.csNumericComponent是一个挂载在Unit上的实体组件内部用DictionaryNumericType, long NumericDic保存所有数值不再为每个属性写字段数值类型按主类型 × 10 后缀编码final type / 10bas final*101、add final*102、pct final*103、finalAdd final*104、finalPct final*105Update方法统一重算最终值GetAsFloat把long值除以 1000 换算成浮点Set(float)则乘以 1000 存整避免浮点误差最大值限制Insert时通过配置NumericTypeConfig来自 numeric 包的 Luban 配置中的MaxNumericType做钳制例如血量不能超过最大血量数值联动NumericTypeConfig.AffectNumeric支持某数值变化时按比例带动另一数值比如力量变化自动影响攻击力广播机制数值变化时发布NumbericChange事件携带 Unit、NumericType、旧值、新值通过NumericChangeEvent_NotifyWatcher见 NumericChangeEvent_NotifyWatcher.cs派发给所有NumericWatcher。课程提到的数值同步正是靠它实现客户端/服务端各自的 watcher 订阅关键数值变化并同步给对方是否存库NumericComponent实现了ITransfer/IDeserialize配合 Mongo Bson 的ArrayOfArrays字典序列化可按需把数值字典存入数据库或随 Unit 转移。配套的监视器写法可用于成就、日志等/// 监视hp数值变化 [NumericWatcher(NumericType.Hp)] public class NumericWatcher_Hp : INumericWatcher { public void Run(long id, int value) { // 例如生命值首次超过1000获得长寿大师成就 } }在cn.etetet.move中已有真实用例NumericWatcher_Speed_ChangeMoveSpeed监听速度变化并实时更新MoveComponent的移动速度说明该机制已在实际战斗链路中生效。第四阶段技能框架设计第 1015 课1011. 技能设计的各种思考从魔兽世界到更好的魔兽世界技能框架课程首先分析魔兽世界的技能设计——为什么魔兽/MOBA 的技能系统复杂度极高数值、Buff、目标选择、读条、伤害弹道、光环……以及传统面向对象的技能实体框架的痛点。随后提出新设计并图解技能不再需要一个技能实体来承载全部逻辑而是把配置数据 行为树逻辑 数值/效果拆解开。仓库中的cn.etetet.spell包正是这套思想的落地README 对该包的描述是Spell 包提供技能与 Buff 系统包含 Spell/Buff 配置模型、运行时施法逻辑、客户端表现组件和相关 Unity 编辑器工具并复用行为树配置导出链路适合实现技能释放、Buff 结算、技能表现和复杂战斗流程配置。Unity 菜单 ET-Spell-Spell Editor 提供集成化的编辑器。12. 实现技能配置、技能管理不需要技能实体技能配置定义在 SpellConfig.cs配置字段类型说明Id/Desc/IconNameint / string技能 ID、描述、图标资源名CDint技能冷却时间毫秒DamageMultiplierint伤害系数百分比默认 100CostCostNode施法消耗见 CostNode.csTargetSelectorTargetSelector目标选择器见 TargetSelector.cs带有Buff/Caster/Owner输出参数与MaxDistance/MinDistance注意TargetSelector直接继承自行为树的BTRoot——这就是技能配置复用行为树配置导出链路的含义目标选择器本身可以被当作一棵行为树来编辑与导出。SpellConfigCategory以Dictionaryint, SpellConfig方式提供Get(id)/Contain(id)/GetAll()查询。技能管理由SpellComponent见 SpellComponent.cs与SpellComponentSystem见 SpellComponentSystem.cs完成施法入口为C2M_SpellCastHandler客户端施法请求。13. Buff 配置Buff 配置定义在 BuffConfig.cs配置字段说明Duration持续时间毫秒默认 1000000000近似永久TickTimeTick 间隔时间MaxStack/Stack最大层数 / 当前层数OverLayRuleType叠加规则None无、AddStack层数、AddTime时间、Replace替换Flags移除条件标记对应BuffFlagsNoticeType广播客户端类型Effects效果节点列表ListEffectNode运行期按类型索引为effectDictBuffFlags定义了各种移除/打断时机而在技能侧SpellFlags见 SpellFlags.cs定义了打断技能的时机MoveInterrupt移动打断、ChangeRotationInterrupt改变朝向打断、StuneInterrupt眩晕打断、RideInterrupt骑行打断、NewSpellInterrupt新技能打断。14. 技能施放技能消耗技能 CD全局 CD施放流程C2M_SpellCastHandler收到客户端施法请求 → 校验SpellConfig.CD与全局 CD → 扣减CostNode定义的消耗数值组件操作如扣能量/法力→ 通过目标选择器选定目标 → 创建 Buff/执行效果。技能 CD 更新通过M2C_UpdateCDHandler同步给客户端展示BuffComponentSystem/SpellHelper中实现了 CD 管理逻辑。15. 实现一个 BT行为树课程要求基于前面的 AI 思路自己实现一个行为树。仓库的cn.etetet.behaviortree提供了完整参考实现BTNode基类、BTAction动作节点、BTCondition条件节点、BTComposite组合节点BTSequence顺序执行 /BTSelector优先级选择、BTDecorate装饰节点BTNot取反BTRoot作为树根BTEnv作为运行时共享环境黑板BTDispatcher依据节点类型分发到对应的ABTHandler执行见 behaviortree 模型目录 与 behaviortree 逻辑目录。技能施放、怪物 AI、条件判断配合cn.etetet.conditionexpr包把策划在 Excel 里填的条件表达式编译成行为树运行都可以挂到 BT 上执行。第五阶段目标选择与 Buff 全流程第 1618 课16. 实现目标选择目标切换同步给服务端目标过滤目标选择由TargetSelector继承BTRoot驱动仓库内置两类选择器TargetSelectorCircle圆形范围选目标与TargetSelectorPosition指定位置选目标见 目标选择模型并通过TargetSelectDispatcher分发。目标切换需要同步给服务端客户端把当前选中目标发到服务端服务端校验距离、阵营、生死、MaxDistance/MinDistance后目标存储在TargetComponent/SpellTargetComponent见 SpellTargetComponent.cs中供施法、普攻、仇恨等模块使用。17. Buff 创建、同步、叠加规则、tick、删除Buff 运行时由BuffComponent挂在 Unit 上管理创建/删除/更新分别通过M2C_BuffAddHandler、M2C_BuffRemoveHandler、M2C_BuffUpdateHandler广播给客户端见 spell Hotfix/Client 目录。叠加规则由OverLayRuleType控制AddStack叠层数、AddTime续时间、Replace直接替换。周期性效果由BuffTickComponentBuffTickComponentSystem按TickTime定时触发对应课程中的 buff tick。Buff 删除的触发条件通过BuffFlags标记实现例如ChangePosition_RemoveBuff移动导致 Buff 失效与NumericChange_DamageRemoveBuff受击移除 Buff两个 System 文件直接体现了移动/受击移除 Buff的扩展点。18. Effect 实现效果节点系统是技能框架的乐高积木EffectNode是所有效果节点的基类见 EffectNode.cs服务端效果有EffectServerBuffAdd施加 Buff、EffectServerBuffRemove移除 Buff、EffectServerBuffHitted受击效果、EffectServerBuffTick周期效果客户端表现效果有EffectClientBuffAdd、EffectClientBuffRemove、EffectClientBuffHitted见 spell 效果节点目录。策划在BuffConfig.Effects里自由组合效果节点程序按类型从effectDict取用——这与技能不需要技能实体的设计呼应一个 Buff 是什么完全由它挂的效果节点决定。第六阶段技能表现第 1925 课19. 技能前摇、读条与吟唱的实现及思考SpellConfig.cs中的CastTimeType枚举定义了三种施法节奏见 SpellConfig.csAttack普通攻击即时命中Cast读条施放后经过一段读条时间才生效Channeling吟唱施法期间持续引导期间移动/被控会打断。课程会探讨读条/吟唱的取舍与实现是否可移动、是否可被打断、服务端如何校验。服务端校验施法时长、客户端表现读条进度条二者通过施法消息与SpellFlags的打断标记协同。2022. 人物绑点、动作播放、特效播放这三课属于客户端表现层HotfixView为角色模型配置绑点武器、施法手、受击点等施法时播放对应动作并在绑点位置生成特效。仓库中的cn.etetet.spell/HotfixView展示了表现层与逻辑层的分离方式BuffGameObjectComponent为 Buff 创建表现物体SpellIndicatorComponent管理技能指示器。客户端表现代码集中在 spell HotfixView 目录。23. 技能指示器实现技能指示器如范围圈、扇形指示由SpellIndicatorComponent见 SpellIndicatorComponent.cs与SpellIndicatorComponentSystem实现配合TargetSelectorCircle/TargetSelectorPosition展示技能的施放范围与落点玩家松开按键后把最终位置/目标提交给服务端。2425. 暴风雪与寒冰箭设计及实现这两课是前 23 课的综合演练暴风雪区域性持续技能——目标选择用圆形范围Buff 挂EffectServerBuffTick周期性造成伤害并叠加减速客户端用技能指示器显示落点、用吟唱Channeling表现引导过程寒冰箭单体读条技能——目标选择选单一敌人读条Cast后发射弹道/直接命中命中触发伤害与减速 BuffEffectServerBuffAddEffectClientBuffAdd。这两课把配置SpellConfig/BuffConfig 目标选择 读条 Effect 链 表现完整串起来验证框架的灵活性。第七阶段战斗核心机制第 2632 课26. 仇恨实现仇恨系统在cn.etetet.spell中由ThreatComponentThreatInfo承载见 spell Server 模型目录ThreatComponentSystem维护每个 Unit 对各目标的仇恨值列表造成伤害/治疗会按数值累加仇恨怪物 AI 依据仇恨列表选择攻击目标实现坦克拉怪、OT仇恨超过当前目标转移等经典机制。27. 普攻实现、自动攻击实现普通攻击复用CastTimeType.Attack与SpellFlags的打断判定目标在攻击距离内则立即结算伤害DamageHelper计算DamageEvent事件承载并支持自动攻击攻击 CD 转好后若目标仍在范围内则自动再次攻击。服务端负责伤害结算与合法性校验客户端表现攻击动作与飘字。28. 怪物 AI 完善巡逻、追击、返回综合第 8 课的AINode思路巡逻节点在巡逻范围内选点移动、追击节点发现敌人后移动到攻击距离内攻击、返回节点远离出生点时加无敌 Buff 返回到点删除 Buff。每个节点内部协程全部传入cancelToken以便随时被打断三个节点按优先级每帧/每秒轮询Check。参考实现思路详见 Book/6.1AI框架.md 中的XunLuoNode/GongjiNode/FanHuiNode示例。29. 捕获宠物技能实现捕获宠物是对技能框架的扩展应用施放捕获技能 → 目标选择怪物 → 校验条件血量/等级/可捕获标记→ 概率判定 → 移除怪物 Unit 并创建一个受玩家控制的宠物 Unit。宠物的数值、AI、技能完全复用前述所有系统这正是一切皆实体、一切皆组件设计带来的扩展红利。30. Spell Modify 机制课程提出一个强大的机制修改技能的命中、伤害、暴击、CD、读条时间、tick 时间、范围、半径等属性。仓库中对应的是BuffSpellModRecordComponent见 BuffSpellModRecordComponent.cs与BuffSpellModRecordComponentSystemBuff 或天赋可以把修改器记录到施法者身上施法时在SpellComponentSystem/SpellHelper中叠加所有生效的修改器最终得出实际生效的技能参数CD、读条、伤害系数、范围……。31. Spell Modify 举例实现一个天赋示例需求为寒冰箭增加 10% 攻击力。实现方式为寒冰箭技能配置一个DamageMultiplier修改通道天赋节点Buff 或永久天赋在角色获得该天赋时向BuffSpellModRecordComponent注册寒冰箭 DamageMultiplier 10%的修改器施放寒冰箭时SpellConfig.DamageMultiplier与修改器叠加后参与DamageHelper的伤害计算。整个过程不需要改技能本体代码体现了配置驱动的设计目标。32. 技能打断、受击、伤害反弹等实现打断SpellFlags的StuneInterrupt/NewSpellInterrupt/MoveInterrupt标记结合施法状态机眩晕、被新技能命中、移动都会触发打断受击NumericChange_DamageRemoveBuff与ChangePosition_RemoveBuff提供受击/移动移除 Buff的钩子配合EffectServerBuffHitted实现受击表现与受击附加效果伤害反弹本质上是一个受击 Buff——把反弹 N% 伤害做成带EffectServerBuffHitted的 Buff受击时由该效果节点对攻击者造成反弹伤害再次验证Buff 效果节点组合的扩展性。第八阶段光环机制第 33 课光环Aura实现示例周围 30 米友方伤害增加 10%。ET 的实现思路光环是一个持续 BuffDuration很长或永久带EffectServerBuffTick周期性扫描周围 30 米内的友方 Unit或EffectServerBuffAdd范围内友方获得增益 Buff离开范围移除。范围检测复用TargetSelectorCircle的距离逻辑增益效果复用数值组件的Add/Pct通道例如给友方DamageAdd/DamagePct加值数值变化通过 watcher 自动同步。光环的进/出范围处理可复用BuffChangeNumericRecordComponent数值变更记录来管理给谁加了、加了多少、移除时如何回滚。BT 编辑器开发第 3439 课课程后半段从用 BT转向写一个 BT 编辑器。仓库中cn.etetet.behaviortree包自带一套完整编辑器实现见 behaviortree 编辑器目录可对照学习课程功能仓库对应实现34创建 BT 编辑器界面BehaviorTreeEditor.cs主窗口、TreeView.cs、NodeView.cs35右键创建节点RightClickMenu.cs右键菜单列出可用节点类型创建36节点自动实现内容显示、内容折叠NodeFieldHelper.cs、BTNodeDrawer.cs根据节点字段自动绘制 Inspector37删除节点、复制剪切粘贴、折叠孩子节点BTClipboard.cs剪贴板复制/剪切/粘贴、TreeView.cs折叠/展开子节点38自动布局实现TreeView.cs/NodeView.cs中的布局算法节点按树层级自动排列39拖动节点实现交换位置或作为子节点NodeView.csResizableManipulator.cs拖拽重排、改父子关系编辑器还提供调试与导出能力BTDebugPathRecorder记录运行路径运行路径调试、BTConfigCodeExporter把配置导出为代码、BTNodeGenCodeGeneratorEditor生成节点模板代码、BTNodeValidator校验节点合法性。对照学习时可以先读BehaviorTreeEditor.cs把握整体窗口结构再看RightClickMenu.cs与BTClipboard.cs理解节点创建与剪贴板操作最后研究TreeView.cs的布局与拖拽逻辑。后续规划与课程模式大纲明确列出后续方向实现其它技能与天赋、装备、成就、副本、分线等。这些系统在仓库中都有对应包可继续延伸装备cn.etetet.equipment含 Luban 配置与 Proto成就cn.etetet.achievement任务/副本cn.etetet.quest、cn.etetet.transfer、cn.etetet.mapmanager地图/分线管理数值增强与条件判断cn.etetet.numericNumericTypeConfig、cn.etetet.conditionexpr大纲作者同时说明该课程采用持续开发、持续录制模式内容不止大纲所列会持续增加新功能并配套视频开源版本不再更新只持续更新课程版本每周有直播解答学员课程疑问。因此本文介绍的是课程的技术主线与当前仓库中对应的源码体系后续新增功能会在此基础上扩展。结语如何基于本仓库开始这套实战路线要把课程大纲落到实际工程推荐的学习路径是先按 Book/1.1运行指南.md 将 ET10 工程跑起来进入 Demo 场景对照第一阶段第 15 课理解Unit、MoveComponent、寻路与输入的基础链路在 Book/6.1AI框架.md 与 Book/5.6数值组件设计.md 两份配套文档基础上把第 8、9 课的 AI 节点与数值组件改造做扎实以cn.etetet.spell包为标准答案逐步实现第 1033 课的技能框架先配置SpellConfig/BuffConfig再流程施放/目标选择/Effect后表现指示器/动作/特效最后攻克制高点Spell Modify 与光环第 3439 课对照cn.etetet.behaviortree的编辑器源码实现自己的 BT 可视化编辑器。整套课程本质上是用 ET 的组件化 协程 数值 KV 行为树四条主线重写一遍魔兽世界级的技能系统。源码路径均已在上文各小节给出可以随时回到仓库中对照阅读验证。【免费下载链接】ETUnity3D Client And C# Server Framework项目地址: https://gitcode.com/GitHub_Trending/et/ET创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

C#远程桌面实时监控源码解析:屏幕采集与Socket传输实战 2026/9/16 22:38:49

C#远程桌面实时监控源码解析:屏幕采集与Socket传输实战

简介:一份C#远程桌面实时监控完整源码包,适合需要实现远程桌面控制、屏幕实时查看与监控的.NET开发者,或学习Socket通信、桌面捕获、客户端/服务端架构的C#中级学习者。资源由客户端、服务端与封装类库三个项目组成,核心实例类封装…

阅读更多 →
Codex生态插件化爆发:设计、浏览器、视频、支付四大入口争夺战 2026/9/16 22:38:49

Codex生态插件化爆发:设计、浏览器、视频、支付四大入口争夺战

最近我把Codex生态里能翻到的开源项目、技术帖和产品公告都过了一遍,发现一个很明显的变化:Codex已经从单一的AI编程助手,慢慢长成了一张插件网络。你打开GitHub Trending或者国内的开发者社区,会看到越来越多项目不再强调“我多会…

阅读更多 →
2026年AI大模型应用专家成长指南 2026/9/16 22:38:49

2026年AI大模型应用专家成长指南

1. 为什么2026年AI大模型应用专家会成为黄金职业?三年前GPT-3的横空出世,让所有人第一次意识到大模型的潜力。而今天,当GPT-4、Claude、Llama等模型已经能够编写代码、分析财报、创作剧本时,一个全新的职业赛道正在形成——AI大模…

阅读更多 →
Android Studio打包全流程解析:Gradle配置、签名与自动化构建 2026/9/16 22:38:49

Android Studio打包全流程解析:Gradle配置、签名与自动化构建

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
硬件面试电路分析三大核心能力:节点建模、工作区判据与小信号模型选择 2026/9/16 22:38:49

硬件面试电路分析三大核心能力:节点建模、工作区判据与小信号模型选择

1. 这不是题库搬运,而是电路分析能力的现场还原“硬件笔试面试2026年通关秘籍:电路分析核心问题深度剖析”——这个标题里藏着一个被绝大多数求职者严重低估的事实:用人单位从不考你背过多少道题,他们只考你面对一张陌生电路图时&…

阅读更多 →
es-toolkit 的 isWeakMap 类型守卫:从 compat 用法到 instanceof 源码实现 2026/9/16 22:35:48

es-toolkit 的 isWeakMap 类型守卫:从 compat 用法到 instanceof 源码实现

es-toolkit 的 isWeakMap 类型守卫:从 compat 用法到 instanceof 源码实现 【免费下载链接】es-toolkit A modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash. 项目地址: https://gitcode.com/GitHub_…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞