创游世界脚本入门完全指南
⭐ 一句话推荐:脚本是创游世界实现交互功能的核心工具。本文讲解脚本编写逻辑:触发时机决定"什么时候跑"、积木块决定"做什么操作"、变量决定"存什么数据"、自定义组件决定"封装什么能力"。
一句话摘要
脚本是创游世界实现交互功能的核心工具。本文档讲解脚本的编写逻辑:触发时机决定"什么时候跑"、积木块决定"做什么操作"、变量决定"存什么数据"、自定义组件决定"封装什么能力"。
适合谁阅读
- 完全不会写脚本的新手用户
- 只会摆素材、不理解如何给物体赋予行为的学习者
- 想系统理解创游脚本编写逻辑的制作者
你将学到什么
- 脚本编辑器的界面结构和基本操作
- 触发时机是什么,以及常见触发时机有哪些
- 变量的类型与使用场景
- 常用积木块的功能分类
- 自定义组件的基本编写方法
- 脚本编写的常见错误与避坑建议
核心结论
- 脚本不是独立代码,而是"在特定时机下、执行特定逻辑"的描述
- 触发时机决定脚本何时执行,积木块决定具体操作
- 变量决定数据存储位置,要根据需要选择正确的作用域
- 自定义组件是封装可复用功能模块的最佳方式
1. 脚本编辑器的界面结构
从截图观察,脚本编辑器通常包含以下区域:
| 区域 | 作用 |
|---|---|
| 对象选择区 | 选择要编辑脚本的对象 |
| 触发时机区 | 选择脚本在什么时机执行 |
| 积木块区 | 拖拽积木块组合成逻辑 |
| 积木块选择区 | 查找和选择积木块 |
| 操作区 | 保存、试玩等操作 |
关键理解:脚本编辑器不是写代码,而是通过拖拽积木块来"拼装"逻辑。
2. 触发时机:脚本什么时候执行
2.1 什么是触发时机
触发时机决定了脚本在"什么情况下"被执行。没有触发时机,脚本永远不会执行。
2.2 常见触发时机分类
事件型触发时机
| 触发时机 | 触发条件 |
|---|---|
| 当被创建时 | 对象被创建时执行一次 |
| 当被销毁时 | 对象被销毁时执行一次 |
| 当受到伤害时 | 对象受到伤害时执行 |
| 当死亡时 | 对象死亡时执行 |
| 当碰撞时 | 对象与其他物体碰撞时执行 |
| 当接近时 | 玩家接近对象时执行 |
交互型触发时机
| 触发时机 | 触发条件 |
|---|---|
| 当被点击时 | 对象被点击时执行 |
| 当互动按钮被按下时 | 玩家按下互动按钮时执行 |
| 当使用道具时 | 玩家使用道具时执行 |
广播型触发时机
| 触发时机 | 触发条件 |
|---|---|
| 当收到广播时 | 收到指定广播时执行 |
| 当执行指令时 | 自定义组件指令被调用时执行 |
定时型触发时机
| 触发时机 | 触发条件 |
|---|---|
| 当开始时 | 游戏/地图开始时执行一次 |
| 每秒执行 | 每秒循环执行 |
| 重复执行直到 | 重复执行直到满足条件 |
2.3 选择触发时机的原则
- 如果脚本只需要在特定事件发生时执行一次,选择事件型
- 如果脚本需要持续检测状态,选择循环型
- 如果需要多个对象响应同一事件,选择广播型
3. 变量:脚本中的数据存储
3.1 变量的本质
变量是"存储数据的容器"。在脚本中,变量用于:
- 存储临时计算结果
- 记录对象状态
- 在不同脚本之间传递数据
3.2 变量的类型
根据存储位置,变量可分为:
| 类型 | 生命周期 | 存储位置 | 用途 |
|---|---|---|---|
| 局部变量 | 当前脚本执行完就消失 | 脚本内部 | 临时计算、中间值 |
| 自身属性 | 对象存在期间 | 组件/对象属性 | 对象自身状态 |
| 地图属性 | 地图存在期间 | 地图对象 | 同地图多对象共享 |
| 系统属性 | 整个游戏期间 | 系统层 | 全局数据 |
3.3 变量的使用场景
场景1:计算两个数的和
→ 使用局部变量存储临时结果
场景2:记录敌人当前血量
→ 使用自身属性存储
场景3:记录当前波次(多波次战斗)
→ 使用地图属性存储
场景4:记录玩家拥有的金币
→ 使用系统属性或玩家变量存储3.4 变量命名建议
- 使用有意义的名称:
金币而不是a - 使用中文或英文:
当前血量或currentHP - 保持一致:同类型变量使用统一的命名风格
4. 积木块分类与常用积木
4.1 积木块分类
从脚本界面截图,积木块可分为以下几类:
控制类积木
| 积木块 | 功能 |
|---|---|
| 如果...那么 | 条件判断 |
| 如果...那么...否则 | 条件分支 |
| 当满足条件时重复执行 | 循环执行 |
| 等待 | 暂停等待 |
| 停止脚本 | 停止当前脚本执行 |
运算类积木
| 积木块 | 功能 |
|---|---|
| 加、减、乘、除 | 基础数学运算 |
| 比较大小 | 数值比较 |
| 随机数 | 生成随机数 |
| 取整、四舍五入 | 数学函数 |
数据类积木
| 积木块 | 功能 |
|---|---|
| 新建变量 | 创建局部变量 |
| 设置变量 | 修改变量值 |
| 获取变量 | 读取变量值 |
对象类积木
| 积木块 | 功能 |
|---|---|
| 获取对象 | 获取对象引用 |
| 获取属性 | 读取对象属性 |
| 设置属性 | 修改对象属性 |
| 销毁对象 | 销毁对象 |
动作类积木
| 积木块 | 功能 |
|---|---|
| 发送广播 | 发送广播消息 |
| 播放动画 | 播放对象动画 |
| 移动到 | 移动对象位置 |
| 渐变 | 属性平滑过渡 |
4.2 常用积木组合示例
示例1:受伤时扣血
当受到伤害时:
获取自身生命值 → 当前生命
获取伤害来源伤害值 → 伤害
当前生命 - 伤害 → 新生命
设置自身生命为 新生命
如果 新生命 <= 0:
发送广播"敌人死亡",参数:自身
销毁自身示例2:玩家靠近时显示提示
当接近时:
如果 距离 <= 3:
显示提示文字"按互动按钮进行交互"5. 自定义组件入门
5.1 什么是自定义组件
自定义组件是创作者自己定义的功能模块,可以包含:
- 属性:存储数据
- 指令:定义可调用的行为
- 触发时机:响应特定事件
5.2 创建自定义组件的步骤
- 选择要添加组件的对象
- 添加自定义组件
- 设置组件名称
- 添加属性(可选)
- 添加指令(可选)
- 编写指令脚本
- 保存并试玩
5.3 自定义组件示例
示例:简单的可拾取道具组件
组件名称:可拾取道具
属性:
- 道具ID(数字)
- 道具数量(数字)
指令:拾取
当执行"拾取"时:
发送广播"获得道具",参数:道具ID、道具数量
销毁自身
触发时机:接近时
当接近时:
显示提示"按E拾取"5.4 自定义组件的价值
| 价值 | 说明 |
|---|---|
| 复用 | 同一个组件可以挂载到多个对象上 |
| 封装 | 把相关功能封装在一起 |
| 简化 | 其他脚本只需调用指令,不需要知道内部实现 |
| 维护 | 修改组件逻辑时,只需改一处 |
6. 脚本编写常见错误
错误1:忘记触发时机
❌ 错误写法:
新建变量 金币 = 100
金币 + 10 → 金币
✓ 正确写法:
当被创建时:
新建变量 金币 = 100
金币 + 10 → 金币错误2:变量作用域选错
❌ 错误做法:
在每个敌人身上都用局部变量记录"是否在战斗"
→ 切换地图后状态丢失
✓ 正确做法:
战斗状态用地图属性存储
→ 同一地图内所有对象都能访问错误3:无限循环没有等待
❌ 错误写法:
重复执行:
如果 条件 = true:
发送广播"触发"
→ 游戏会卡死
✓ 正确写法:
重复执行:
等待 0.5 秒
如果 条件 = true:
发送广播"触发"
停止当前脚本错误4:广播名称不一致
❌ 错误写法:
发送广播"道具获得"
监听广播"道具_获得" ← 名称不一致
✓ 正确写法:
发送广播"道具_获得"
监听广播"道具_获得" ← 名称一致7. 脚本调试基础
7.1 常用调试方法
| 方法 | 说明 |
|---|---|
| 打印日志 | 使用显示文字或广播输出变量值 |
| 单步执行 | 使用逐行 Debug 查看执行流程 |
| 分段注释 | 把脚本分成多段,逐段测试 |
7.2 常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 脚本不执行 | 没有正确触发时机 | 检查触发时机设置 |
| 变量值为空 | 变量未初始化 | 检查变量初始化 |
| 广播没有响应 | 名称不一致 | 检查广播名称 |
| 游戏卡死 | 无限循环 | 添加等待语句 |
8. 后续学习建议
当你掌握了基础脚本后,建议继续学习:
- 广播机制:广播机制深度解析
- 变量作用域:脚本作用域与数据流深度研究
- 自定义组件:自定义组件深度解析
- UI 数据同步:创游世界 UI 数据同步架构
相关页面
- 创游世界学习路线图 - 完整学习路径
- 广播机制深度解析 - 广播进阶
- 脚本作用域与数据流深度研究 - 变量进阶
- 自定义组件深度解析 - 组件进阶
- 常见问题与避坑指南 - 常见问题解决
待验证问题
以下问题需要进一步验证:
| 问题 | 状态 | 验证方向 |
|---|---|---|
| 积木块的完整分类和详细参数说明 | 🔄 待验证 | 需要官方文档确认 |
| 不同触发时机的优先级规则 | 🔄 待验证 | 需要实际测试 |
📝 说明:脚本入门核心概念已稳定,详细参数属于进阶内容。
后续优化方向
- [ ] 补充更多积木块的详细参数说明
- [ ] 添加完整的项目实战案例
- [ ] 补充调试工具的使用教程
- [ ] 完善常见错误与解决方案
