脚本系统
脚本挂载点与返回值
脚本系统 先分清这段脚本是拿来判断、计算,还是触发动作 很多脚本“写了没效果”,不是语法问题,而是放错了位置,或者返回值不对。这一页只讲最常见的脚本位置和它们真正需要的结果。 # 先记住最重要的区别 脚本常见会落在这 4 类位置: 类型 常见位置 你需要做什么 判断脚本 前置需求脚本、场景解锁脚本、显示需求脚
脚本系统
先分清这段脚本是拿来判断、计算,还是触发动作
很多脚本“写了没效果”,不是语法问题,而是放错了位置,或者返回值不对。这一页只讲最常见的脚本位置和它们真正需要的结果。
# 先记住最重要的区别
脚本常见会落在这 4 类位置:
| 类型 | 常见位置 | 你需要做什么 |
|---|---|---|
| 判断脚本 | 前置需求脚本、场景解锁脚本、显示需求脚本 |
返回能不能继续 |
| 触发脚本 | 点击脚本、事件脚本、输入前触发脚本、输出后触发脚本 |
真正去改状态、跳场景、弹窗、联动 |
| 数值脚本 | 组合属性脚本 |
返回一个数值 |
| 文本脚本 | 动态字符串脚本 |
返回一段字符串 |
如果先把这一点分清,后面大部分脚本问题都会少很多。
# 最常见的返回值要求
| 脚本位置 | 要返回什么 |
|---|---|
前置需求脚本 / 显示需求脚本 |
一般返回 true 或 false |
组合属性脚本 |
必须返回数值 |
动态字符串脚本 |
必须返回字符串 |
场景解锁脚本 |
必须返回 true 或 false |
点击脚本 / 事件脚本 / 输出后触发脚本 |
通常不用依赖返回值 |
# 1. 判断脚本
判断脚本最常见的用途是:
- 这个控件能不能显示
- 这个操作现在能不能做
- 这个场景能不能进入
# 最常见写法
return player.getPro("等级") >= 10;
或者:
return player.getPro("体力") > 0;
# 这类脚本更常见的用途
- 读取当前状态
- 返回能不能通过
- 给界面或流程提供判断结果
判断脚本更适合只回答一件事:现在能不能通过。
# 2. 触发脚本
触发脚本就是“事情真的发生时要做什么”。
常见会放在这些地方:
- 控件点击脚本
- 事件脚本
- AI 的输入前触发脚本
- AI 的输出后触发脚本
# 常见写法
player.addPro("金币", -50);
tools.gotoScene("商店");
或者:
tools.showToast("购买成功", "success");
这类脚本通常不需要依赖返回值,重点是把动作写出来。
# 3. 数值脚本
数值脚本最常见的就是 组合属性脚本。
它只负责一件事:算一个数值出来。
# 正确写法
let atk = player.getPro("攻击");
let def = player.getPro("防御");
return atk * 2 + def;
# 常见错误
return "123";
return true;
如果这里不是返回数值,就很容易显示不对。
# 4. 文本脚本
文本脚本最常见的就是 动态字符串脚本。
它只负责一件事:算一段显示文字出来。
# 正确写法
return `生命:${player.getPro("生命")}`;
如果这是给玩家看的文案,并且项目需要多语言,更推荐写成:
return tools.tr("生命:{value}", {
value: player.getPro("生命")
});
# 常见错误
player.getPro("生命");
上面这段没有 return,最后就不会显示出你想要的内容。
# 5. 场景解锁脚本要特别注意
场景解锁脚本 比普通判断脚本更严格,它必须返回:
truefalse
例如:
return player.getPro("等级") >= 5;
下面这类返回值不会按解锁结果处理:
return "已解锁";
return 1;
# 6. 只读脚本和可触发脚本不是一回事
有些脚本位置只能读取,不能改状态。最常见的有:
组合属性脚本动态字符串脚本场景解锁脚本- 很多
前置需求脚本
这些脚本里,更适合做:
- 读取属性
- 读取对象
- 读取表格
- 做判断
- 拼文字
更常写在触发脚本里的动作有:
setProaddPronewObjectdelObjectgotoScene- 弹窗交互
# 一个最实用的判断方法
在动手前先问自己一句:
- 我现在是想判断“能不能”?
- 还是想让“事情真的发生”?
如果是“能不能”,多半就是判断脚本。
如果是“真的发生”,多半就是触发脚本。
# 最后记住这几个高频规则
组合属性脚本返回数值。动态字符串脚本返回字符串。场景解锁脚本返回true / false。点击脚本、事件脚本通常不用靠返回值。- 只读脚本里更常见的是读取和判断。
- 只要文本最后会展示给玩家,优先先过
tools.tr(...),直接把原文作为项目多语言 key。
# 下一步
接下来可以继续看: