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

创游世界变量完全指南

一句话推荐:变量是存储数据的容器,选择正确的变量层级是游戏开发的关键。局部变量用完就消失,持久数据要放自身属性/地图属性/系统属性/玩家变量表。

一句话摘要

变量是存储数据的容器。在创游世界里,变量有五个层级:局部变量、自身属性、地图属性、系统属性、玩家变量表。选择正确的变量层级,决定了你的数据是否安全、是否持久、是否能在正确的地方被访问。

适合谁阅读

  • 不理解变量作用域的新手
  • 想知道数据应该存在哪里的创作者
  • 需要设计数据持久化方案的开发者

你将学到什么

  • 变量的本质和作用
  • 五层数据架构的特点
  • 变量选择的正确原则
  • 常见变量使用错误
  • 变量调试技巧

核心结论(先记住这 3 条)

⚠️ 重要:这三条是变量系统的核心,必须先理解!

  1. 变量有层级:局部变量用完就消失,持久数据要放对地方
  2. 选错层级=数据丢失:临时计算用局部变量,状态存储用自身属性
  3. 跨地图/跨会话用玩家变量:需要保存的数据必须用玩家变量表

1. 变量的本质

1.1 什么是变量

变量是"存储数据的容器"。在脚本中,变量用于:

  • 存储临时计算结果
  • 记录对象状态
  • 在不同脚本之间传递数据

1.2 变量的作用

场景1:计算两个数的和
→ 使用局部变量存储临时结果

场景2:记录敌人当前血量
→ 使用自身属性存储

场景3:记录当前波次(多波次战斗)
→ 使用地图属性存储

场景4:记录玩家拥有的金币
→ 使用系统属性或玩家变量存储

2. 五层数据架构

创游世界的数据存储分为以下五个层次:

层级名称生命周期存储位置用途
1局部变量脚本执行期间脚本内部临时计算、中间值
2自身属性对象存在期间组件/对象属性对象私有状态
3当前地图属性地图存在期间地图对象同地图共享数据
4系统属性整个游戏系统层全局/跨地图数据
5玩家变量表跨会话持久化云端/本地玩家存档数据

2.1 第一层:局部变量

生命周期:当前脚本执行完就消失

存储位置:脚本内部

用途

  • 临时计算
  • 中间值存储
  • 循环计数器

示例

当被创建时:
  新建变量 临时分数 = 0
  临时分数 + 10 → 临时分数

⚠️ 注意:局部变量在脚本执行完后就会消失,不能用来存储持久数据。

2.2 第二层:自身属性

生命周期:对象存在期间

存储位置:组件/对象属性

用途

  • 记录对象自身状态
  • 存储对象私有数据
  • 挂载在对象上的组件属性

示例

当受到伤害时:
  获取自身生命值 → 当前生命
  设置自身生命为 当前生命 - 伤害值

2.3 第三层:地图属性

生命周期:地图存在期间

存储位置:地图对象

用途

  • 同地图内多个对象共享数据
  • 记录地图级状态(如当前波次、任务进度)
  • 不需要跨地图持久的数据

示例

当收到广播 "波次开始" 时:
  获取当前地图属性 波次 → 当前波次
  设置当前地图属性 波次为 当前波次 + 1

2.4 第四层:系统属性

生命周期:整个游戏期间

存储位置:系统层

用途

  • 全局数据
  • 跨地图数据
  • 不需要玩家存档的全局设置

示例

当游戏开始时:
  设置系统属性 游戏难度 = "困难"
  设置系统属性 总玩家数 = 0

2.5 第五层:玩家变量表

生命周期:跨会话持久化

存储位置:云端/本地

用途

  • 玩家存档数据
  • 需要跨游戏会话保存的数据
  • 玩家进度、等级、金币等

示例

当玩家获得金币时:
  获取玩家变量 金币 → 当前金币
  设置玩家变量 金币为 当前金币 + 获得数量

3. 变量选择原则

3.1 根据用途选择

需求选择
临时计算局部变量
对象私有状态自身属性
同地图共享当前地图属性
跨地图持久系统属性
玩家存档玩家变量表

3.2 根据生命周期选择

生命周期选择
脚本执行期间局部变量
对象存在期间自身属性
地图存在期间地图属性
游戏运行期间系统属性
跨会话持久玩家变量

3.3 根据访问范围选择

访问范围选择
单个脚本内局部变量
单个对象内自身属性
同地图多个对象地图属性
全局所有地方系统属性
单个玩家所有场景玩家变量

4. 常见变量使用错误

错误1:用局部变量存储持久数据

❌ 错误做法:
  当游戏开始时:
    新建变量 玩家金币 = 100
    玩家金币 + 50 → 玩家金币
  → 切换地图后,玩家金币变成 0

✓ 正确做法:
  当游戏开始时:
    设置玩家变量 金币 = 100
    获取玩家变量 金币 → 当前金币
    设置玩家变量 金币为 当前金币 + 50
  → 切换地图后,金币仍然保留

错误2:用自身属性存储地图级数据

❌ 错误做法:
  在每个敌人身上都用局部变量记录"当前波次"
  → 切换地图后波次丢失

✓ 正确做法:
  波次用地图属性存储
  → 同一地图内所有对象都能访问

错误3:跨对象访问自身属性

❌ 错误做法:
  物体A:获取物体B的自身属性 生命值
  → 自身属性是对象私有的,不应该跨对象直接访问

✓ 正确做法:
  通过广播传递数据
  物体A:发送广播 "查询血量",参数:自身
  物体B:当收到广播 "查询血量" 时:
    发送广播 "血量结果",参数:获取自身生命值

5. 变量调试技巧

5.1 打印变量值

使用显示文字或广播输出变量值:

当被创建时:
  显示文字 "金币:" + 获取玩家变量 金币

5.2 检查变量是否存在

当收到广播 "检查数据" 时:
  如果 获取玩家变量 金币 > 0:
    显示文字 "金币存在:" + 获取玩家变量 金币
  否则:
    显示文字 "金币未初始化"

5.3 修复数据不一致

如果发现数据不一致,可以在游戏开始时做数据同步:

当玩家开始游戏时:
  如果 获取玩家变量 最高分 不存在:
    设置玩家变量 最高分 = 0

6. 变量命名建议

  • 使用有意义的名称:金币 而不是 a
  • 使用中文或英文:当前血量currentHP
  • 保持一致:同类型变量使用统一的命名风格
  • 避免冲突:不同层级的变量不要使用相同名称

相关页面


待验证问题

以下问题需要进一步验证:

问题状态验证方向
不同引擎版本对变量层级的支持差异🔄 待验证需要多版本对比
变量数量的性能影响阈值🔄 待验证需要压测确认

📝 说明:变量核心用法已稳定,版本差异属于进阶内容。

后续优化方向

  • [ ] 补充变量使用场景的具体示例
  • [ ] 添加变量调试工具的使用教程
  • [ ] 完善版本兼容性说明

参与维护

发现文档问题?

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

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