Skip to content
写作:待补充更新:2026-05-16字数:—阅读:—维护:Azek431

创游世界实战项目结构模板

一句话摘要

本文提供创游世界项目的标准目录结构与组织方式,帮助创作者建立可维护、可扩展、可协作的项目架构。核心原则:真值与显示分离、模块化组件、广播解耦、数据分层。

适合谁阅读

  • 准备开始中型或大型项目的创作者
  • 希望建立规范项目结构的开发者
  • 需要团队协作的项目负责人
  • 想提升项目可维护性的进阶用户

你将学到什么

  • 如何组织项目的核心目录结构
  • 不同类型内容的放置规范
  • 脚本的模块化组织方式
  • UI 与地图逻辑的分离架构
  • 变量与属性的分层管理
  • 广播的命名规范
  • 可复用的项目模板框架

核心结论

  1. 真值层与显示层必须分离:游戏核心数据放地图/系统层,UI 只负责显示和交互。
  2. 组件化设计:把可复用功能封装为自定义组件,减少重复代码。
  3. 广播驱动:UI 与地图之间通过广播通信,避免直接耦合。
  4. 数据分层存储:根据作用域选择合适的变量类型。
  5. 目录结构清晰:按功能分类组织素材、组件和脚本。

1. 为什么需要项目结构模板

1.1 小项目与大项目的区别

小型项目(< 10 个功能点)可以用"堆代码"的方式快速完成。但当项目规模扩大时:

问题类型小项目中大型项目
代码量几百行几千行
功能点< 10 个50+ 个
协作者1 人多人
维护周期短期长期
扩展需求

1.2 结构混乱的代价

  • 功能之间相互耦合,改一处牵动多处
  • 变量命名混乱,调试困难
  • UI 和逻辑混在一起,切地图后状态丢失
  • 广播名称不规范,追踪困难
  • 难以复用和协作

1.3 好结构的价值

  • 局部修改不影响全局
  • 新功能可以"插拔式"添加
  • 多人协作时互不干扰
  • 后期维护和调试成本降低

2. 项目目录组织原则

2.1 核心组织思路

创游世界的项目可以按以下层级组织:

项目根目录
├─ 核心系统层(地图脚本、系统脚本)
├─ 功能模块层(各类功能组件)
├─ UI 界面层(界面设计)
├─ 公共资源层(素材、组件模板)
└─ 配置文件层(配置表、数据表)

2.2 功能模块组织

每个功能模块应该包含:

功能模块
├─ 组件定义(自定义组件配置)
├─ 对象模板(素材配置)
├─ 逻辑脚本(行为逻辑)
├─ UI 界面(显示界面)
└─ 配置数据(配置表引用)

2.3 命名规范

组件命名

  • 使用有意义的名称:武器管理系统背包管理组件
  • 避免:组件1组件2
  • 同类组件使用统一前缀:UI_System_Player_

广播命名

  • 格式建议:事件类型_目标对象_动作
  • 示例:道具_获得_玩家敌人_死亡_通知UI_刷新_背包
  • 避免:太短或太通用的名称如刷新更新1号广播

变量命名

  • 使用描述性名称:当前生命值背包容量敌人数量
  • 按层级使用不同前缀:
    • 局部变量:l_(如 l_临时计数
    • 自身属性:self_(如 self_当前状态
    • 地图属性:map_(如 map_当前波次
    • 系统属性:sys_(如 sys_游戏难度

3. 推荐项目结构模板

3.1 功能模块化结构

项目设计示例

├─ 地图层
│  ├─ 主场景地图
│  │  ├─ 地图脚本(核心流程控制)
│  │  ├─ 地图属性(波次、金币、状态)
│  │  └─ 地图广播(场景事件通知)
│  │
│  └─ 战斗场景地图
│     ├─ 地图脚本(战斗逻辑)
│     └─ 地图属性(敌人计数、计时器)

├─ 系统层
│  ├─ 玩家系统
│  │  ├─ 玩家控制脚本
│  │  ├─ 状态管理
│  │  └─ 能力组件
│  │
│  ├─ 背包系统
│  │  ├─ 背包组件
│  │  ├─ 物品配置表
│  │  └─ 物品管理逻辑
│  │
│  ├─ 商店系统
│  │  ├─ 商店组件
│  │  ├─ 商品配置表
│  │  └─ 交易逻辑
│  │
│  └─ 战斗系统
│     ├─ 武器组件
│     ├─ 子弹组件
│     ├─ 伤害计算
│     └─ 技能系统

├─ UI 层
│  ├─ 主界面 UI
│  │  ├─ 界面设计
│  │  └─ 界面逻辑(仅处理输入和显示)
│  │
│  ├─ 背包 UI
│  │  ├─ 界面设计
│  │  └─ 界面逻辑
│  │
│  ├─ 商店 UI
│  │  ├─ 界面设计
│  │  └─ 界面逻辑
│  │
│  └─ 战斗 UI
│     ├─ 血条
│     ├─ 技能栏
│     └─ 状态显示

├─ 公共组件层
│  ├─ 通用 UI 组件
│  │  ├─ 确认弹窗
│  │  ├─ 提示消息
│  │  └─ 加载动画
│  │
│  ├─ 通用逻辑组件
│  │  ├─ 冷却管理
│  │  ├─ 动画控制
│  │  └─ 特效触发
│  │
│  └─ 工具函数
│     ├─ 数学工具
│     ├─ 文本处理
│     └─ 数据校验

└─ 配置数据层
   ├─ 道具配置表
   ├─ 怪物配置表
   ├─ 技能配置表
   ├─ 商店配置表
   └─ 任务配置表

3.2 组件设计模板

组件命名示例

组件类型示例名称用途
功能组件血条管理组件统一管理血条显示
状态组件Buff状态组件管理增益减益效果
交互组件商店交互组件处理商店交互逻辑
工具组件冷却计时组件统一管理技能冷却

组件结构模板

自定义组件:XXX组件
├─ 属性
│  ├─ 数字1:名称
│  ├─ 数字2:配置ID
│  ├─ 真假值1:是否激活
│  └─ 文本1:状态描述

├─ 指令
│  ├─ 初始化
│  │  └─ 当执行"初始化"时:设置初始状态
│  │
│  ├─ 激活
│  │  └─ 当执行"激活"时:启动功能
│  │
│  └─ 重置
│     └─ 当执行"重置"时:恢复默认状态

└─ 触发时机
   ├─ 当被创建时
   │  └─ 执行"初始化"
   └─ 当收到广播时(如需要)
      └─ 处理对应事件

4. 数据分层最佳实践

4.1 各层数据职责

数据层职责典型数据
局部变量临时计算、中间值循环计数、临时结果
自身属性对象私有状态血量、冷却、开关状态
地图属性场景共享数据波次、地图金币、机关状态
系统属性全局配置数据难度设置、总计时器
玩家变量持久化存档金币、道具、背包、进度
配置表静态规则数据怪物属性、技能配置、商品列表

4.2 数据流示例

购买道具流程

UI 层
├─ 显示商店界面
├─ 显示商品列表
└─ 监听购买按钮点击

用户点击购买

UI 层
├─ 检查货币是否足够(读玩家变量)
└─ 点击"购买" → 发送广播"请求购买_道具ID"

地图/系统层(处理真值)
├─ 收到广播
├─ 检查货币
├─ 扣除货币(改玩家变量)
├─ 添加道具(改玩家变量)
└─ 发送广播"道具_获得_刷新"

UI 层
├─ 收到刷新广播
└─ 更新背包显示、货币显示

战斗伤害流程

事件触发
├─ 玩家攻击
└─ 子弹命中敌人

伤害计算(局部变量)
├─ 基础伤害 = 武器伤害
├─ 最终伤害 = 基础伤害 × (1 - 防御减免)
└─ 暴击判定 = 随机数 < 暴击率

状态更新(自身属性)
├─ 敌人.当前生命 -= 最终伤害
├─ 敌人.是否在战斗中 = 真
└─敌人.最后受击时间 = 当前时间

结果广播
├─ 若死亡:发送"敌人_死亡_通知"
└─ 若存活:发送"血条_刷新"

UI 更新
├─ 血条显示刷新
└─ 飘字显示(伤害数字)

5. 广播设计规范

5.1 广播命名规范

推荐使用三段式命名:操作_目标_状态

广播类型命名示例说明
UI 请求请求_购买_道具IDUI 向系统发起请求
状态变化玩家_生命值_变化通知状态已改变
事件通知敌人_死亡_通知通知某事件已发生
UI 刷新背包_刷新_显示UI 需要更新显示
游戏流程游戏_暂停全局流程控制

5.2 广播内容设计

简单广播(无参数)

发送广播"游戏_暂停"

带参数广播

发送广播"道具_获得" 参数:道具ID
发送广播"伤害_计算" 参数:目标,伤害值

5.3 广播滥用警示

滥用情况后果正确做法
广播名称不统一难以追踪建立广播命名表
一个广播做太多事调试困难拆分成多个专注广播
频繁广播无意义消息性能浪费只在状态真正变化时广播
在循环中频繁广播卡顿减少广播频率,批量处理

6. UI 与逻辑分离实践

6.1 UI 组件的职责

UI 应该只负责:

  • 显示数据
  • 接收输入
  • 发送请求广播
  • 响应刷新广播更新显示

UI 不应该负责:

  • 直接修改核心游戏数据
  • 复杂的业务逻辑判断
  • 跨对象的状态同步

6.2 地图/系统层的职责

地图层应该负责:

  • 核心游戏逻辑处理
  • 真值数据管理
  • 业务规则校验
  • 跨对象协调
  • 响应 UI 请求广播

6.3 分离示例

错误的做法(UI 承担太多)

当点击"购买"按钮时:
  如果 玩家.金币 >= 当前商品.价格:
    设置玩家.金币 = 玩家.金币 - 当前商品.价格
    背包.添加道具(当前商品.ID)
    背包.刷新显示
    货币显示.刷新

问题:UI 直接操作多个数据源,逻辑耦合严重

正确的做法(UI 只发请求)

当点击"购买"按钮时:
  发送广播"请求_购买" 参数:商品ID

当收到广播"购买_成功"时:
  背包.刷新显示
  货币显示.刷新

---
地图脚本
当收到广播"请求_购买"时:
  获取 参数[商品ID]
  如果 玩家.金币 >= 商品.价格:
    设置玩家.金币 = 玩家.金币 - 商品.价格
    背包.添加道具(商品ID)
    发送广播"购买_成功"
  否则:
    发送广播"购买_失败" 参数:"金币不足"

7. 组件复用设计

7.1 通用组件示例

冷却管理组件

自定义组件:冷却管理组件
├─ 属性
│  ├─ 数字1:冷却时间(秒)
│  ├─ 数字2:剩余时间
│  └─ 真假值1:是否冷却中

├─ 指令
│  ├─ 开始冷却
│  │  └─ 设置剩余时间 = 冷却时间
│  │  设置是否冷却中 = 真
│  │
│  └─ 检查冷却
│     └─ 如果 剩余时间 <= 0:设置是否冷却中 = 假

└─ 触发时机
   重复执行直到(是否冷却中 = 假)
     等待 1 秒
     设置剩余时间 = 剩余时间 - 1
     执行"检查冷却"

使用方式

当点击技能按钮时:
  如果 技能图标.冷却管理组件.是否冷却中 = 假:
    播放技能
    技能图标.执行"开始冷却"

7.2 Buff/状态效果组件

自定义组件:Buff效果组件
├─ 属性
│  ├─ 文本1:Buff名称
│  ├─ 数字1:持续时间
│  ├─ 数字2:剩余时间
│  ├─ 数字3:效果值
│  └─ 真假值1:是否激活

├─ 指令
│  ├─ 施加Buff
│  │  └─ 设置持续时间 = 参数[时间]
│  │  设置效果值 = 参数[值]
│  │  设置是否激活 = 真
│  │
│  └─ 移除Buff
│     └─ 设置是否激活 = 假

└─ 触发时机
   当状态改变时(是否激活 = 真)
     应用效果

8. 配置表使用规范

8.1 配置表 vs 变量表

类型用途修改时机
配置表静态规则、策划数据仅在设计阶段修改
变量表动态状态、玩家数据运行中动态变化

8.2 配置表结构示例

道具配置表

ID名称类型效果价格图标
1001生命药水消耗品恢复30生命50item_potion
1002魔法药水消耗品恢复30魔法50item_mana
1003铁剑武器攻击+10200weapon_sword

怪物配置表

ID名称生命攻击防御掉落
2001史莱姆5050金币x10
2002哥布林100102金币x25、药水x1
2003骷髅150155金币x50、装备x1

8.3 运行时修改配置表

配置表在运行时的修改:

  • 仅对当前会话生效
  • 不会保存到原始配置
  • 重启游戏后会恢复原始值
  • 不应用于持久化玩家数据

9. 项目启动检查清单

开始一个新项目前,建议完成以下检查:

架构设计

  • [ ] 确定核心系统(战斗、背包、商店、任务等)
  • [ ] 定义数据分层方案
  • [ ] 设计广播命名规范
  • [ ] 确定组件复用策略

目录组织

  • [ ] 建立功能模块目录结构
  • [ ] 创建通用组件模板
  • [ ] 建立配置表结构
  • [ ] 设置 UI 资源分类

基础组件

  • [ ] 玩家控制组件
  • [ ] UI 响应组件
  • [ ] 通用弹窗组件
  • [ ] 冷却管理组件
  • [ ] 动画控制组件

数据规范

  • [ ] 定义变量命名规范
  • [ ] 定义属性列表
  • [ ] 建立配置表模板
  • [ ] 制定存档数据结构

相关页面


待验证问题

  • [待验证] 大型项目的性能优化建议
  • [待验证] 联机模式下的组件同步策略
  • [待验证] 多人协作时的版本控制建议

后续优化方向

  • [ ] 添加更多通用组件模板
  • [ ] 补充具体游戏类型的项目结构示例
  • [ ] 添加更多配置表模板
  • [ ] 完善调试和排错指南
  • [ ] 补充版本迁移指南

参与维护

发现文档问题?

你可以编辑页面、提交反馈,或复制链接给维护者,帮助这个资料库继续变好。

由 Azek431 整理与维护 | 基于 MIT 许可证开源