变量
变量与作用域
变量是世界的记忆——每个变量存一个整数(从 0 开始)。作者用条件与效果读写变量,把物件一个个串起来:变量、条件、效果就是机制的黏合剂。
- 世界变量——整个世界一份,跨场景保留;
- 场景变量——按场景记忆:离开场景时记住,回来时恢复;
- 物件变量——放进场景的物件自己的一份,跨场景保留;
- 背包——按物品种类自动计数:拾到几个就是几。
物件变量也在物件库定义:同一个库物件放多个实例,每个实例各有一份自己的值;在场景实例面板里可以覆盖初值,但不能增删变量——要加变量,回物件库。
用户变量(世界设置「用户变量」Tab)是每个用户各有一份的整数变量。试运行和单人世界里,它与普通世界变量一样;多人世界里每人各有一份——读自己的、改自己的,只随你自己的存档保存,不会影响其他用户。比如憋七世界里,每人一个「座位号」;内置的「皮肤」也属于这类变量。
初值在哪里设置:世界变量在「世界设置 · 世界变量」;场景变量在场景检查器;物件变量在物件库(放进场景后可在实例面板覆盖);用户变量在「世界设置 · 用户变量」。运行过程中一律用条件与效果读写,函数里也能直接引用。
内置变量总览
内置变量总是存在:不用创建,也不能删除。编辑器里显示中文名,公式里写短名(下表的「公式名」)。
| 显示名 | 公式名 | 作用域 | 读写 |
|---|---|---|---|
| 黑暗度 | _darkness | 场景 | 读 / 写 |
| 重力 | _gravity | 场景 | 读 / 写 |
| 可见 | _visible | 物件(全部) | 读 / 写 |
| 光源强度 | _intensity | 物件(光源) | 读 / 写 |
| 光照半径 | _radius | 物件(光源) | 读 / 写 |
| 点亮 | _lit | 物件(光源) | 读 / 写 |
| 门的开启 | _open | 物件(门) | 读 / 写 |
| 计时器剩余 | _remaining | 场景计时器 | 读 / 写 |
| 计时器运行 | _running | 场景计时器 | 读 / 写 |
| 皮肤 | _skin | 用户 | 读 / 写 |
| 在线人数 | _players | 世界 | 只读 |
| 称号等级 | _title | 用户 | 只读 |
「在线人数」与「称号等级」是只读的:条件能判断它们,但写它们不会有任何效果。其余内置变量都可以用效果或函数改写。
黑暗度
「黑暗度」表示场景有多暗,范围 0~100:0 是明亮,100 是一片漆黑。在场景设置里给初值;运行中可以用效果或函数改写,画面立即变化。
黑暗用一层暗罩盖住整个场景;光源会在暗罩上挖出亮洞——光的强度与半径决定洞有多亮、多大。完全黑暗的场景里,没有光源就什么也看不见。
写法:[森林._darkness]——第一段是场景名或场景编号,后面跟变量名。
重力
「重力」只对侧视场景有效,表示下落的加速度:数值越大,下落越快、跳得越沉。默认 2000(常规重力);在场景设置里给初值,运行中可以用效果或函数改写。
两个特殊值:设为 0 = 悬浮——不会下落、也没有跳跃,可以上下左右自由移动;设为负数 = 往上掉——天花板就是地面,整个世界倒过来。俯视场景不使用重力。
写法:[森林._gravity]。
可见
每个放进场景的物件都有一个「可见」变量:1 = 显示,0 = 隐藏。默认 1;可以给初值,也能用条件判断、用效果或函数改写。
隐藏的物件是完全消失:不显示、不阻挡、不能交互、触发器不触发、光源也不再发光;改回 1 立刻恢复。编辑画布上,初始隐藏的物件会半透明显示,方便继续编辑;试运行时才真正消失。计时器没有这个变量。
写法:[森林.宝箱._visible]——第一段是场景,第二段是物件。
光源:强度、半径、点亮
每个光源有三个内置变量:强度(0~100)、光照半径(像素)、点亮(0 或 1)。
在物件库里定义光源的默认强度与半径;放进场景后,每个实例都可以单独覆盖初值。点亮默认 1(常亮)。
只有当点亮为 1、强度大于 0、半径大于 0 时,光源才会照亮黑暗。点亮状态改变时,如果这盏灯配了触发音频,会播放音效。
写法:[森林.篝火._lit] / [森林.篝火._intensity] / [森林.篝火._radius]。
门的开启
每扇门有一个「开启」变量(_open):0 = 关,1 = 开。用户每通过一次这扇门,它会自动变成 1,并且跨场景保留——可以拿它做条件,比如「这扇门开过才允许某件事」。
也可以在效果里改写它(设回 0 = 重新记为未开启),门的外观会跟随:物件库里可以为门指定「开」状态的贴图。
注意:这个变量只是一个状态记录,不会自动拦住用户。要「没有钥匙不开门」,把条件(比如钥匙数量 ≥ 1、不满足时的提示语)写在这扇门上。
计时器:剩余与运行
每个场景计时器有两个内置变量:「剩余」(_remaining,秒)和「运行」(_running,0/1)。
在场景检查器的计时器里给「剩余」初值:正数 = 进入场景自动开始倒计时;0 = 不自动开始。
倒计时归零的那一刻会做一次判断:条件满足就执行效果,然后停下;不满足也停下,不会重试。想让它周期运行:在效果里把「剩余」再设回正数——每归零一次就再来一轮。
倒计时过程中把「剩余」设为 0 = 取消(不会触发);设为别的正数 = 重新计时。所有计时器共用一个时钟,每秒走一步。
「运行」表示当前是否在倒计时中(0/1),一般用来做条件判断。把它的初值设为 1、同时「剩余」为 0,会在进入场景后立刻触发一次。
皮肤
「皮肤」记录当前角色使用的皮肤编号(皮肤物料的编号)。0 = 默认皮肤;在效果或函数里写成某个皮肤的编号,会立即换装。
编号在物料视图的皮肤卡片上(#后面的数字)。初始值是世界设置里选的默认皮肤;设回 0 就回到默认皮肤。
只有真正的皮肤编号才有效:写成图片等其他物料的编号、或者不存在的编号,会被忽略——皮肤保持原样。
多人世界里每人各有一份:你只改自己的皮肤;别人看到的是你的新皮肤,他们自己的皮肤不受影响。
在线人数
「在线人数」表示此刻在这个副本里的用户数量(包括游客)。试运行和单人世界里恒为 1;多人世界里随进出实时变化。
只读:写它不会有任何效果。适合做「人数够了才能开始」的条件,或在界面上实时显示。
写法:[._players]。
称号等级
「称号等级」表示你在这个世界的称号:0 = 还没有称号,1 = 最低一档,2、3……依次往上——按作者设置的称号与投币门槛决定。
只读:写它不会有任何效果。每次进入世界时按你在这个世界的累计投币重新匹配(作者调整门槛后,下次进入生效)。
写法:[._title]。
