设置事件参数
@[set_event_params] {
"target": "物件名称",
"需要更改的参数": 更改后的参数
}
用于直接修改指定物件或玩家当前持有的事件参数。根据最新研究,@[set_event_params] 不仅能改常见显示参数,还能改不少底层移动、渲染、音效与运行状态字段。
target 取值
"self":当前执行该指令的物件自身。"player":玩家。"具体物件名":场景中的目标物件。
常用可修改参数
下表优先列出实用性较高、风险较低的字段。示例中的值仅作演示,实际效果请结合关卡逻辑测试。
| 属性名 | 中文说明 | 类型 / 可选值 | 示例值 |
|---|---|---|---|
text | 普通物件显示的字面 | 字符串 | "门" |
big_text | 大物件专属字面 | 字符串 | "终点" |
text_color | 文字颜色 | 颜色字符串 | "#FFFFFF" |
opacity | 不透明度 | 整数 | 255 |
visible | 是否渲染 | 布尔值 | false |
layer | 所在层级 | BACK / MID / FRONT | "FRONT" |
z_index | 图层高度 | 整数 | 10 |
z_as_relative | 图层是否基于父节点 | 布尔值 | false |
center_rotation | 以中心点旋转的角度 | 0 ~ 359 | 180 |
move_speed | 物件速度 | 整数或 Slow / Normal / Fast / Very Fast | "Fast" |
direction | 面向方向 | 2 / 4 / 6 / 8 | 6 |
now_pos | 当前网格坐标 | 二维数组 | [3,5] |
through | 是否穿透 | 布尔值 | true |
can_push | 是否可推 | 布尔值 | true |
can_delete | 是否可删 | 布尔值 | true |
can_split | 是否可拆 | 布尔值 | true |
can_move | 当前是否允许移动 | 布尔值 | false |
locked | 是否锁定循环移动 | 布尔值 | true |
event_trigger_action | 触发方式 | AUTO / PRESS / TOUCH | "PRESS" |
exist_condition | 存在条件 | 字符串 | "s:开关A==true" |
exist_fade_in | 出现时是否淡入 | 布尔值 | true |
is_high_priority | 是否优先出现 | 布尔值 | true |
need_be_saved | 是否参与存档 | 布尔值 | false |
bgs | 绑定的环境音路径 | 字符串 | "res://Sounds/se/wind.wav" |
bgs_loop | 环境音是否循环 | 布尔值 | true |
bgs_max_dist | 声音传播距离 | 0 ~ 2000 | 600 |
commands | 物件自身携带的命令文本 | 字符串 | "@[play_se] \"res://...\"" |
loop_move_route | 循环移动指令 | 字符串 | "@[move_up]" |
copy_from_event | 创建时复制命令来源 | 字符串 | "模板物件" |
user_data | 用户自定义数据 | 字典 | {} |
可用于补间的参数
研究表明,以下字段更适合通过 @[tween_parameter] 平滑修改,而不是直接硬切:
| 参数路径 | 说明 |
|---|---|
position:x | 像素坐标 X |
position:y | 像素坐标 Y |
opacity | 不透明度 |
scale:x | 横向缩放 |
scale:y | 纵向缩放 |
如果只是想做动画,请优先使用补间;如果是想永久改物件状态,则优先使用 @[set_event_params]。
新发现的渲染参数
这些字段适合做显示控制、颜色变化、局部透明等效果:
| 属性名 | 中文说明 | 类型 / 范围 | 示例值 |
|---|---|---|---|
modulate:r | 整体红色通道 | 0 ~ 255 | 255 |
modulate:g | 整体绿色通道 | 0 ~ 255 | 128 |
modulate:b | 整体蓝色通道 | 0 ~ 255 | 64 |
modulate:a | 整体透明通道 | 0 ~ 255 | 200 |
self_modulate:r | 仅自身红色通道,不影响子节点 | 0 ~ 255 | 255 |
self_modulate:g | 仅自身绿色通道,不影响子节点 | 0 ~ 255 | 255 |
self_modulate:b | 仅自身蓝色通道,不影响子节点 | 0 ~ 255 | 255 |
self_modulate:a | 仅自身透明通道,不影响子节点 | 0 ~ 255 | 180 |
理论上可改,但要谨慎的运行时参数
@[set_event_params] 的实现方式决定了:只要该物件能通过 get() 访问到对应字段,而且字段不是 null,理论上就有机会被修改。因此除导出变量外,还有一批运行时字段也可能生效。
物件 / 玩家共用父类中的常见字段
| 属性名 | 中文说明 | 类型 / 说明 |
|---|---|---|
moving_pos | 插值中的移动位置 | 二维数组 |
has_move_cooldown | 是否有移动冷却 | 布尔值 |
cooldown_count | 当前移动冷却时间 | 整数 |
max_cooldown_count | 最大移动冷却时间 | 整数 |
move_route | 当前移动路径 | 数组 |
move_route_index | 当前移动路径索引 | 整数 |
wait_count | 等待计数 | 整数 |
is_move_route_forcing | 是否处于强制移动 | 布尔值 |
is_movement_pause | 是否暂停移动 | 布尔值 |
move_zone | 可移动区域 | 数组 |
move_dead_zone | 不可移动区域 | 数组 |
can_pass_group | 可通过的组 | 字符串 |
original_move_route | 原始移动路径 | 数组 |
original_move_route_index | 原始移动路径索引 | 数组 |
tileMap | 地图引用 | 路径或对象引用 |
jump_peak | 跳跃高度 | 整数 |
jump_count | 跳跃计数 | 整数 |
is_shaking | 是否震动中 | 布尔值 |
now_shake_frame | 当前震动帧 | 浮点数 |
total_shake_frame | 总震动帧 | 浮点数 |
shake_distance | 震动距离 | 浮点数 |
is_stucking | 是否卡住 | 布尔值 |
is_pushing_around | 是否正在推动其他物件 | 布尔值 |
风险更高的字段
下列字段虽然理论可改,但容易影响解释器状态、存在判定或子事件结构,不建议在正式关卡中随意操作:
| 属性名 | 风险说明 |
|---|---|
org_pos | 物件初始位置,通常只在游戏开始时赋值一次 |
existing | 物件当前是否存在,强改可能与存在条件冲突 |
list | 已解析的命令列表,改坏后可能导致解释器异常 |
was_exist_condition_valid | 上次存在条件检查结果,可能影响刷新逻辑 |
sub_events | 子事件命令字典,结构错误容易直接损坏子事件执行 |
其中 sub_events 需要保持如下字典结构:
{
"子事件字符1": [命令列表],
"子事件字符2": [命令列表]
}
注意事项
- 普通物件与玩家使用同一个父类,所以某些移动相关字段对玩家也可能生效。这也是“等待期间玩家无法行动”这一现象的重要解释之一。
type虽然可改为Event或Player标记,但研究指出它更像引擎内部标记,改完不会真的把物件变成玩家。- 若要修改位置,优先考虑
@[transport_event];强行改部分底层位置参数可能造成显示与碰撞不同步。 - 若要做平滑过渡,请优先改用
@[tween_parameter],避免直接设置导致跳变。 - 研究笔记指出:用补间直接改“事件参数”类字段可能出现异常,因此改物件属性优先使用
@[set_event_params],做动画优先使用补间可安全支持的字段。 commands、move_route、sub_events这类结构化字段不建议手写热修改,除非已经确认格式完全正确。