创游世界变量完全指南
⭐ 一句话推荐:变量是存储数据的容器,选择正确的变量层级是游戏开发的关键。局部变量用完就消失,持久数据要放自身属性/地图属性/系统属性/玩家变量表。
一句话摘要
变量是存储数据的容器。在创游世界里,变量有五个层级:局部变量、自身属性、地图属性、系统属性、玩家变量表。选择正确的变量层级,决定了你的数据是否安全、是否持久、是否能在正确的地方被访问。
适合谁阅读
- 不理解变量作用域的新手
- 想知道数据应该存在哪里的创作者
- 需要设计数据持久化方案的开发者
你将学到什么
- 变量的本质和作用
- 五层数据架构的特点
- 变量选择的正确原则
- 常见变量使用错误
- 变量调试技巧
核心结论(先记住这 3 条)
⚠️ 重要:这三条是变量系统的核心,必须先理解!
- 变量有层级:局部变量用完就消失,持久数据要放对地方
- 选错层级=数据丢失:临时计算用局部变量,状态存储用自身属性
- 跨地图/跨会话用玩家变量:需要保存的数据必须用玩家变量表
1. 变量的本质
1.1 什么是变量
变量是"存储数据的容器"。在脚本中,变量用于:
- 存储临时计算结果
- 记录对象状态
- 在不同脚本之间传递数据
1.2 变量的作用
场景1:计算两个数的和
→ 使用局部变量存储临时结果
场景2:记录敌人当前血量
→ 使用自身属性存储
场景3:记录当前波次(多波次战斗)
→ 使用地图属性存储
场景4:记录玩家拥有的金币
→ 使用系统属性或玩家变量存储2. 五层数据架构
创游世界的数据存储分为以下五个层次:
| 层级 | 名称 | 生命周期 | 存储位置 | 用途 |
|---|---|---|---|---|
| 1 | 局部变量 | 脚本执行期间 | 脚本内部 | 临时计算、中间值 |
| 2 | 自身属性 | 对象存在期间 | 组件/对象属性 | 对象私有状态 |
| 3 | 当前地图属性 | 地图存在期间 | 地图对象 | 同地图共享数据 |
| 4 | 系统属性 | 整个游戏 | 系统层 | 全局/跨地图数据 |
| 5 | 玩家变量表 | 跨会话持久化 | 云端/本地 | 玩家存档数据 |
2.1 第一层:局部变量
生命周期:当前脚本执行完就消失
存储位置:脚本内部
用途:
- 临时计算
- 中间值存储
- 循环计数器
示例:
当被创建时:
新建变量 临时分数 = 0
临时分数 + 10 → 临时分数⚠️ 注意:局部变量在脚本执行完后就会消失,不能用来存储持久数据。
2.2 第二层:自身属性
生命周期:对象存在期间
存储位置:组件/对象属性
用途:
- 记录对象自身状态
- 存储对象私有数据
- 挂载在对象上的组件属性
示例:
当受到伤害时:
获取自身生命值 → 当前生命
设置自身生命为 当前生命 - 伤害值2.3 第三层:地图属性
生命周期:地图存在期间
存储位置:地图对象
用途:
- 同地图内多个对象共享数据
- 记录地图级状态(如当前波次、任务进度)
- 不需要跨地图持久的数据
示例:
当收到广播 "波次开始" 时:
获取当前地图属性 波次 → 当前波次
设置当前地图属性 波次为 当前波次 + 12.4 第四层:系统属性
生命周期:整个游戏期间
存储位置:系统层
用途:
- 全局数据
- 跨地图数据
- 不需要玩家存档的全局设置
示例:
当游戏开始时:
设置系统属性 游戏难度 = "困难"
设置系统属性 总玩家数 = 02.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 修复数据不一致
如果发现数据不一致,可以在游戏开始时做数据同步:
当玩家开始游戏时:
如果 获取玩家变量 最高分 不存在:
设置玩家变量 最高分 = 06. 变量命名建议
- 使用有意义的名称:
金币而不是a - 使用中文或英文:
当前血量或currentHP - 保持一致:同类型变量使用统一的命名风格
- 避免冲突:不同层级的变量不要使用相同名称
相关页面
- 创游世界变量与作用域完全指南 - 变量进阶
- 创游世界变量作用域速查卡 - 快速参考
- 创游世界数据分层模型 - 数据架构
- 创游世界广播机制完全指南 - 数据传递
待验证问题
以下问题需要进一步验证:
| 问题 | 状态 | 验证方向 |
|---|---|---|
| 不同引擎版本对变量层级的支持差异 | 🔄 待验证 | 需要多版本对比 |
| 变量数量的性能影响阈值 | 🔄 待验证 | 需要压测确认 |
📝 说明:变量核心用法已稳定,版本差异属于进阶内容。
后续优化方向
- [ ] 补充变量使用场景的具体示例
- [ ] 添加变量调试工具的使用教程
- [ ] 完善版本兼容性说明
