大家族-开关
基础要求
先尝试回答下面的问题:什么是触发?什么是开关触发?什么是触发的拆分与套娃?为什么设计开关要用到独立开关A、B乃至更多?什么是持续触发和单次触发?事件的串行、并行如何设置? |
如果你对上述问题有疑问,那么说明你还不了解 触发的本质。
需要去看看:”8.物体 > 触发的本质.docx
”。
也可以去看看示例中 机关管理层 的 触发的本质 介绍。
相关插件
传感器类:
◆Drill_EventPressureSwitch 物体 - 重力开关
◆Drill_EventMouseSwitch 物体 - 键盘响应开关
◆Drill_EventMouseSwitch 物体 - 手柄响应开关
◆Drill_EventMouseSwitch 物体 - 鼠标响应开关
◆Drill_EventMouseHoverSwitch 物体 - 鼠标悬停响应开关
◆Drill_EventAutoTrigger 物体触发 - 固定区域 & 玩家接近 & 条件触发
◆Drill_EventStoppingSwitch 物体 - 制动开关
◆Drill_EventSightSwitch 物体 - 镜头视野开关
复合传感器类:
◆Drill_EventMutiSwitch 物体 - 计数开关
◆Drill_EventSequentialSwitch 物体 - 序列开关
◆Drill_EventGatherSwitch 物体 - 聚集开关
这里主要对一些有特点的开关进行说明。
名词索引
以下你可以按住ctrl键点击下面的词,可以直接定位到想了解的名词:
传感器 | 传感器 重力开关 脉冲开关 多状态开关鼠标响应开关 鼠标接触响应开关接近开关 制动开关 |
复合传感器 | 复合传感器 计数开关 序列开关 聚集开关 |
其它 | 物体触发 通用写法 |
快速区分
传感器:监听单个事件的条件,开启事件自身的独立开关。
一般用于某些情况就会自动开启的事件。比如鼠标响应开关、重力开关等。
复合传感器:监听多个事件的条件,开启指定事件的独立开关。
一般用于连接开关与门,用于控制开关如何开启门。比如计时开关、序列开关等。
二者从结构上 没有本质区别,都是根据条件自动触发独立开关。但是,在设计开关与门路时,最好区分设计,这样能够作为两种不同的元件进行组合使用。 |
物体触发:物体触发是一个大类,常用于实现复杂的独立开关触发功能。
比如区域触发,能设置筛选器,实现各种特定条件的触发功能。
虽然原理也是开启独立开关,但是功能上与传感器、复合传感器区别较大。
插件关系
开关插件都是独立的个体,大部分可以单独使用:
传感器
一次性开关
1)基本信息
> 来自插件
无(基于游戏默认自带的独立开关与事件页)
> 简介
一次性开关是最基本的开关,即按下后,永久处于按下状态。
> 开关示例
开关示例在 机关管理层 中 一次性开关 的介绍。
> 关卡设计示例
此功能为基础功能,暂时没有专门的关卡设计。
2)使用方法
触发条件设置为:玩家接触,
然后执行内容直接写 打开独立开关 的指令即可。
3)开关触发与事件页
一个最基本的注释如下图所示。
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关未按状态 | 脚踩就开启独立开关A |
2 | 独立开关A | 开关按下状态 | 无 |
4)时钟信号图
这里介绍一下时钟信号图,假设3个开关控制着门,0表示独立开关 OFF,1表示独立开关 ON,那么就有下图:
根据时钟信号图可知,开关按下后,将一直处于1的状态。
三个开关为1时,才能开门。
计时开关
1)基本信息
> 来自插件
无(基于游戏默认自带的独立开关与事件页)
> 简介
计时开关在 一次性开关 基础上多了一个并行计时回弹功能:
> 开关示例
开关示例在 机关管理层 中 计时开关 的介绍。
> 关卡设计示例
此功能为基础功能,暂时没有专门的关卡设计。
2)使用方法
你可以直接复制示例中现成的计时开关事件,
通过 计数开关插件 实现计时功能的 那个开关 更好一些。
3)开关触发与事件页
一个最基本的注释如下图所示。(并行处理,等待5秒之后,关闭独立开关)
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关未按状态 | 脚踩就开启独立开关A |
2 | 独立开关A | 开关按下状态 | 并行控制计时,时间到则关闭独立开关A |
4)时钟信号图
计时开关的时钟信号图如下图。
由图可知,计时开始时,独立开关ON,时间到后,独立开关OFF。
5)单次触发与持续触发介绍
示例中有两个 计时开关 ,分别通过 单次触发与持续触发 实现,
你可以去文档 ”8.物体 > 触发的本质.docx
” 中了解下 单次触发与持续触发 的知识。
重力开关
1)基本信息
> 来自插件
Drill_EventPressureSwitch 物体 - 重力开关
> 简介
重力开关踩着会按下,离开会弹起。
> 开关示例
开关示例在 机关管理层 中 重力开关、鼠标接触开关 的介绍。
> 关卡设计示例
此功能为基础功能,暂时没有专门的关卡设计。
2)使用方法
你可以直接复制示例中现成的重力开关事件,复制有四个事件页的那个。
简单重力开关只有两个事件页。
常规的重力开关有四个事件页,分为 弹起状态、弹起动作、按下动作、按下状态。
如果你想从零开始构建触发,可以去看看 机关管理层 的触发的本质介绍流程。
3)开关触发与事件页
一个最基本的注释如下图所示。
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关按下动作 | 踩住则立即开启独立开关A,离开则立即关闭独立开关A。 |
2 | 独立开关A | 开关按下状态 | 无 |
4)时钟信号图
这里的重力开关触发,是瞬间的,按下这立即开启,离开则立即回弹。
重力开关插件提供的功能非常基础纯粹,如果你有复杂的用法,见后面进阶结构。
5)进阶结构 - 重力开关
上述重力开关,是一个常规的开关雏形,而通常见到的开关,多了两个缓冲动作:
开关按下动作:此动作在开关按下瞬间执行一次,比如播放按下开关的声音。
开关回弹动作:此动作在开关回弹瞬间执行一次,比如播放开关弹起的声音。
加入了两个动作后,过程入下图:
用触发来描述,则为:
“玩家踩在重力开关之后,触发按下开关的功能,并且要有按下声音”
“玩家离开重力开关之后,触发弹起开关的功能,并且要有弹起声音”
按照触发的拆分方法和套娃方法,形成了下面这种复合触发的流程。
(去看 “8.物体 > 触发的本质.docx
” 的 触发的拆分方法 和 触发的套娃方法 章节)
然后形成了下面的事件页跳转流程。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关弹起状态 | 脚踩则立即开启独立开关A,离开则立即关闭独立开关A。 |
2 | 独立开关B | 开关弹起动作 | 弹起声音。关闭B。 |
3 | 独立开关A | 开关按下动作 | 按下声音。开启B、C。 |
4 | 独立开关C | 开关按下状态 | 并行判断A的开关;**如果A被关了,立即关闭C,**这样就跳转到了事件页2。 |
6)事件触发事件功能
重力开关提供了 条件钥匙与条件锁 的功能。
必须特定有条件钥匙的事件,才能按下有条件锁的重力开关。
这个功能,能充当简易的 事件触发事件 功能。
即只有特定的事件,才能触发重力开关,玩家、其他事件都无法触发。
7)获取上一个触发对象
重力开关还提供了触发重力时,获取上一个触发重力的事件id的功能。
(如果是玩家踩重力开关,则赋值-2)
可以参考 机关管理层 中,重力开关中对 弹丸转向砖 的介绍。
脉冲开关
1)基本信息
> 来自插件
Drill_EventPressureSwitch 物体 - 重力开关
> 简介
脉冲开关,是重力开关的二次迭代的高级用法。
原理为:按第一次的时候ON,按第二次的时候OFF,第三次ON,如此往复。
> 开关示例
开关示例在 机关管理层 中 脉冲开关 的介绍。
> 关卡设计示例
示例中有具体的解谜:设计-脉冲开关 。
你可以去看看 ”8.物体 > 解谜设计-脉冲开关.docx
” 中的介绍。
2)使用方法
你可以直接复制示例中现成的脉冲开关事件。
你也可以了解脉冲开关的通用写法,见章节:5)通用写法 - 脉冲通用写法 。
如果你要设计 只能踩一次的脉冲开关,见后面章节:6)只能踩一次的脉冲开关 。
3)开关触发与事件页
一个最基本的注释如下图所示。
脉冲开关两页事件页,第一页和第二页一样。(注意,第二页的条件是独立开关B)
都是 下面的执行内容,通过ABC三个独立开关控制。
初步理解的事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关按下动作 | 踩住时,开启独立开关A,离开时,关闭独立开关A。第一次踩住则开启独立开关B,第二次踩住则关闭独立开关B,如此往复。 |
2 | 独立开关A | 开关按下状态 | 无 |
注意,这里只是初步理解,实际运行方式见后面章节。
4)时钟信号图与实现原理
脉冲开关需要独立开关A、B两个,A为重力开关控制,B为A的第二次迭代。
这里的重点思路就在时钟信号图中,实现二次迭代如下:
重力开关反复切换A的开启与关闭,
C用于记录上一次A的状态,当A的开关状态与C的开关状态不同时,
说明此时正在按下/正在弹起,B在这时候才切换ON/OFF,就实现了二次迭代。
并且,B的OFF和ON正好对应事件页1和事件页2。
因此事件页进一步的关系如下图。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关弹起状态 | 踩住时,开启独立开关A,离开时,关闭独立开关A。C用于记录A的上一次状态。A和C状态不同时,切换B开关。 |
2 | 独立开关B | 开关按下状态 | 踩住时,开启独立开关A,离开时,关闭独立开关A。C用于记录A的上一次状态。A和C状态不同时,切换B开关。 |
事件页不影响 独立开关B的切换,因此事件页1和事件页2的指令才一模一样。
5)通用写法 - 脉冲通用写法
前面章节以及示例中,都介绍了:
重力开关+二次迭代 = 脉冲开关
那么,如果我们使用鼠标响应开关,那么我们就能实现:
鼠标响应开关+二次迭代 = 鼠标脉冲开关
(或许可以实现:鼠标第一次悬停播放气泡声,第二次悬停播放爆炸声)
再如果是其他的插件,比如镜头视野开关,我们就能实现:
镜头视野开关+二次迭代 = 镜头视野脉冲开关
(或许可以实现:第一次看见的是一个凳子,第二次看见的是一个小爱丽丝)
想到这里,你会注意到,二次迭代到底是什么?
原来,二次迭代只是一种通用写法。
前面费那么多章节介绍了脉冲开关的 事件页与时钟信号图,是不是仍然看不懂?没关系,所有脉冲开关的二次迭代都是固定的写法,无非就是插入了很多其他指令,导致你看不明白,记住下面的特点就容易理解了。 |
示例中提供了一个最简单的通用写法:
脉冲通用写法具有以下特点:
> 脉冲通用写法 需要并行处理
(注意最下方的等待帧指令,等待2或3帧,能节约并行事件的性能)
> 脉冲通用写法 的所有相关事件页,都是相同的指令,且都是并行处理
(这里指的是写法的指令相同,额外加的注释或自定义指令 不包括在内)
> 脉冲通用写法 的最外层独立开关 连接 开关触发
> 脉冲通用写法 的最内层独立开关 用于二次迭代的结果事件页
(出现条件也可以使用 自定义的独立开关,但写法有些不一样)
(可以去看看“8.物体 > 独立开关与事件页.docx
”了解 自定义出现条件)
> 脉冲通用写法 的最内层的独立开关 的指令有两种等价写法
(注意不要搞反了第1次和第2次接触的位置。)
> 脉冲通用写法用到三个独立开关:ABC,其名字可以自定义,但是顺序位置不能变
(独立开关的名字可以随便改,可以是 Q1、Q2、Q3)
(你可以去看看 机关管理层 的脉冲开关的事件介绍,有个使用Q1、Q2、Q3独立开关实现的脉冲开关)
另外留意一下,一个开关触发能进行 二次迭代 有两个前提:一是 能持续触发,即能使独立开关根据条件 持续保持 开启/关闭状态。二是 有双向完整的触发,即 满足条件时关闭+不满足条件时开启 两个触发。(文档”8.物体 > 触发的本质.docx ”有 持续触发 的知识点介绍) |
6)只能踩一次的脉冲开关
在只能踩一次开关的解谜游戏用的非常多,其规则为:
开关一旦踩了第二次,谜题失败,需要重新开始。
根据脉冲开关的结构,你可以直接最上层添加一个 开关,用于控制失败情况,如下图。
只需要在B开关OFF的时候,设置关卡失败就可以了,
因为B为OFF时,肯定已经接触了至少一次。
多状态开关
1)基本信息
> 来自插件
Drill_EventPressureSwitch 物体 - 重力开关
Drill_EventMouseHoverSwitch 物体 - 鼠标接触响应开关
> 简介
多状态开关不一定仅仅局限于ON和OFF两种状态,可以设置为N种状态。
> 开关示例
开关示例在 机关管理层 中 多状态开关 的介绍。
> 关卡设计示例
示例中有具体的解谜:设计-逻辑图形 。
你可以去看看 ”14.鼠标 > 解谜设计-逻辑图形.docx
” 中的介绍。
2)使用方法
你可以直接复制示例中现成的多状态开关事件。
3)开关触发与事件页
一个最基本的注释如下图所示。
事件页关系如下图所示。
脉冲开关是这样的:ON->OFF->ON->OFF->ON->OFF->……
多状态开关是这样的:1->2->3->1->2->3->1->2->3->……
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 空状态 | 踩下/点击后,开P1。 |
2 | 独立开关P1 | 状态1 | 踩下/点击后,开P1关P2。 |
3 | 独立开关P2 | 状态2 | 踩下/点击后,开P2关P3。 |
4 | 独立开关P3 | 状态3 | 踩下/点击后,关P3。 |
注意,独立开关P1/P2/P3和A/B一共是5个独立开关。
事件页1的空条件也是一种状态,并且空条件要求P1、P2、P3全都关闭。
4)时钟信号图
多状态开关由原来只能ON和OFF开关之间的切换,迭代成了1/2/3这种计数的切换,
因此 时钟信号图 在这种情况下不适用了,所以这里不提 时钟信号图。
5)通用写法 - 多状态通用写法
所有多状态开关都是固定的写法,无非就是插入了很多其他指令,导致你看不明白,记住下面的特点就容易理解了。 |
示例中提供了一个最简单的通用写法:
多状态通用写法具有以下特点:
> 多状态通用写法 需要并行处理
(注意最下方的等待帧指令,等待2或3帧,能节约并行事件的性能)
> 多状态通用写法 的所有相关事件页,都是相同的指令,且都是并行处理
(这里指的是写法的指令相同,额外加的注释或自定义指令 不包括在内)
> 多状态通用写法 的最外层独立开关 连接 开关触发
> 多状态通用写法的最内层为多个独立开关开启/关闭,用于切换到指定状态的事件页
(最内层 为每次接触时执行的自定义指令,多状态就在这里实现切换)
另外留意一下,一个开关触发能进行 多状态变化 有两个前提:一是 能持续触发,即能使独立开关根据条件 持续保持 开启/关闭状态。二是 有双向完整的触发,即 满足条件时关闭+不满足条件时开启 两个触发。(文档”8.物体 > 触发的本质.docx ”有 持续触发 的知识点介绍) |
6)事件页复合结构
多状态开关+鼠标点击的事件中,
由于 鼠标高亮触发+鼠标点击触发+多状态通用写法 都写在一起,所以看起来很复杂。
鼠标高亮可见前面章节:鼠标触发事件高亮 。
以 设计-逻辑图形 关卡的多状态开关为例,其开关有两个环。
第一个环(蓝)是多状态切换的流程,
第二个环(淡蓝)是鼠标点击的流程。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 空状态 | 悬停开M1,点击开M3。 |
2 | 独立开关M1 | 鼠标悬停动作 | 开M2。 |
3 | 独立开关M2 | 鼠标悬停状态 | 如果离开悬停,关M2。 |
4 | 独立开关A | 状态1 | 无。 |
5 | 独立开关B | 状态2 | 无。 |
6 | 独立开关C | 状态3 | 无。 |
7 | 独立开关M3 | 鼠标按下动作 | 关M3。根据情况控制状态:1.开A4.开B关A。5.开C关B。6.关C。 |
实际上,要添加更多的状态,只需要在6后面加内容,然后修改最后一个事件页所对应独立开关的开启/关闭就可以了。
键盘响应开关
1)基本信息
> 来自插件
Drill_EventKeyboardSwitch 物体 - 键盘响应开关
> 简介
键盘响应开关能设置 持续触发 和 单次触发的 按下[一帧]、释放[一帧]、双击[一帧],全图任意位置都有效。
> 开关示例
开关示例在 机关管理层 中 键盘响应开关 的介绍。
> 关卡设计示例
此功能为基础功能,暂时没有专门的关卡设计。
2)使用方法
你可以直接复制示例中现成的键盘响应开关的事件。
3)开关触发与事件页
一个最基本的注释如下图所示。
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关弹起状态 | 键盘”a”按下时,开A。键盘”a”没按下时,关A。 |
2 | 独立开关A | 开关按下状态 | 无 |
键盘除了”a”键,还有其他的物理按键,
可以去看看:“1.系统 > 关于输入设备核心(入门篇).docx
”。
手柄响应开关
1)基本信息
> 来自插件
Drill_EventPadSwitch 物体 - 手柄响应开关
> 简介
手柄响应开关能设置 持续触发 和 单次触发的 按下[一帧]、释放[一帧]、双击[一帧],全图任意位置都有效。
> 开关示例
开关示例在 机关管理层 中 手柄响应开关 的介绍。
> 关卡设计示例
此功能为基础功能,暂时没有专门的关卡设计。
2)使用方法
你可以直接复制示例中现成的手柄响应开关的事件。
3)开关触发与事件页
一个最基本的注释如下图所示。
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关弹起状态 | 手柄”X”按下时,开A。手柄”X”没按下时,关A。 |
2 | 独立开关A | 开关按下状态 | 无 |
手柄除了”X”键,还有其他的物理按键,
可以去看看:“1.系统 > 关于输入设备核心(入门篇).docx
”。
鼠标响应开关
1)基本信息
> 来自插件
Drill_EventMouseSwitch 物体 - 鼠标响应开关
> 简介
鼠标响应开关能设置 左键按下、右键按下、滚轮按下、滚轮上滚、滚轮下滚 的条件,全图任意位置都有效。
> 开关示例
开关示例在 机关管理层 中 鼠标响应开关 的介绍。
> 关卡设计示例
此功能为基础功能,暂时没有专门的关卡设计。
华容道解谜用到了该插件,你可以去看看 ”14.鼠标 > 解谜设计-华容道.docx
” 中的介绍。
2)使用方法
你可以直接复制示例中现成的鼠标响应开关的事件。
(但一般情况下很少用到该功能,常用的是 鼠标接触响应开关 )
3)开关触发与事件页
一个最基本的注释如下图所示。
常用的注释为上述两个基本触发的合并写法,如下。
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关弹起状态 | 鼠标左键按下时,开A。鼠标左键没按下时,关A。 |
2 | 独立开关A | 开关按下状态 | 无 |
除了左键按下功能,该插件还提供了其他持续触发的绑定功能:
鼠标接触响应开关
1)基本信息
> 来自插件
Drill_EventMouseHoverSwitch 物体 - 鼠标悬停响应开关
> 简介
鼠标悬停响应开关在悬停会按下,离开会弹起。
并且也能设置 悬停+左键按下、悬停+右键按下、悬停+滚轮按下、悬停+滚轮上滚、悬停+滚轮下滚 的条件。
> 开关示例
开关示例在 机关管理层 中 鼠标悬停响应开关 的介绍。
> 关卡设计示例
此功能为基础功能,暂时没有专门的关卡设计。
但是在 鼠标管理层 中,有大量事件应用了此插件的功能,实现鼠标点击事件对话。
华容道解谜用到了该插件,你可以去看看 ”14.鼠标 > 解谜设计-华容道.docx
” 中的介绍。
2)使用方法
你可以直接复制示例中 机关管理层 现成的鼠标响应开关的事件。
或者 鼠标管理层 的可以点击对话的小爱丽丝。
3)开关触发与事件页
一个最基本的注释如下图所示。
常用的注释为上述两个基本触发的合并写法,如下。
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关弹起状态 | 鼠标悬停时,开A。鼠标不在悬停区域时,关A。 |
2 | 独立开关A | 开关按下状态 | 无 |
除了 悬停 功能,该插件还提供了其他持续触发的绑定功能:
4)进阶结构 - 鼠标悬停反馈设计
鼠标的结构与 前面介绍重力开关的 5)进阶结构 - 重力开关 一样,
为了方便 鼠标管理层 大量按钮的使用,
这里将鼠标的独立开关额外定义为:M1、M2、M3:
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关弹起状态 | 鼠标接近立即开启M1。 |
2 | 独立开关M2 | 鼠标悬停动作 | 关M2。 |
3 | 独立开关M1 | 鼠标悬停状态 | 开M2、M3。 |
4 | 独立开关M3 | 开关按下状态 | **并行判断M1的开关;****如果M1被关,立即关闭M3。** |
在事件页2和3中,播放鼠标悬停时“嗒”的一声,以此来增强鼠标的反馈效果。
鼠标管理层中经常用到的 鼠标-鼠标触发事件 插件,实际上就是 物体-鼠标响应开关 和 物体-鼠标悬停响应开关 结合的指令功能。后两者插件的指令能更准确描述 持续触发/单次触发、独立开关、触发条件 这些配置。 |
接近开关
1)基本信息
> 来自插件
Drill_EventAutoTrigger 物体触发 - 固定区域 & 玩家接近 & 条件触发
> 简介
接近开关和重力开关相似,但接近开关能够实现远距离触发事件。
> 开关示例
开关示例在 机关管理层 中 接近开关 的介绍。
> 关卡设计示例
可以去 物体触发管理层 的 大量亮片区域 去看看,
接近开关也属于 物体触发类 的插件,区域可以完全自己定制,
可以去看看 ”9.物体触发 > 关于玩家接近触发.docx
” 。
也可以看看后面的从零开始设计:自动关闭的门 。
2)使用方法
你可以直接复制示例中现成的重力开关事件。
也可以去 物体触发管理层 看看抓玩家、躲玩家的小爱丽丝。
3)开关触发与事件页
一个最基本的注释如下图所示。
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关弹起状态 | 进入玩家区域范围时,开A,离开玩家区域范围时,关A。 |
2 | 独立开关A | 开关按下状态 | 无。 |
注意,如果没有设置”离开范围自动OFF”,那么事件页2回到1的跳转是没有的。
制动开关
1)基本信息
> 来自插件
Drill_EventStoppingSwitch 物体 - 制动开关
> 简介
制动开关即事件在移动时被阻塞,超过最大停留时间则会开启独立开关。
如果事件继续移动,那么会关闭独立开关。
> 开关示例
开关示例在 机关管理层 中 制动开关 的介绍。
> 关卡设计示例
示例中有具体的解谜:设计-弹丸反射 。
你可以去看看 ”8.物体 > 解谜设计-弹丸反射.docx
” 中的介绍。
通常制动开关被用于弹丸事件的设计,在 模板管理层 中有弹丸示例。
可见文档:“9.物体触发 > 物体设计-简易弹丸制作.docx
”。
制动开关还还可以用于制作 被推动后一直向前移动的 光滑冰块。
在 机关解谜管理层 中有示例,可见文档:”26.图块 > 关于物体滑行.docx
”。
2)使用方法
由于制动开关与其他插件组合使用的非常多,
所以最好先去 机关管理层 了解制动开关,然后再去 机关解谜管理层 了解弹丸设计。
3)开关触发与事件页
一个最基本的注释如下图所示。
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关持续移动 | 停留时间超时时,开A,继续移动时,关A。 |
2 | 独立开关A | 开关暂停超时 | 无。 |
注意,如果这个独立开关A切换了事件页,而第二个事件页是站着原地不动,那么”继续移动时关A” 的触发就执行不到了。
4)时钟信号图
这里需要留意,暂停移动后,还需要等限时时间,才会开启A。
制动开关的通常用法为:开启A的一瞬间,并行执行A的事件页(比如碰壁后爆炸)。
5)移动路线切换的制动问题
在我们设计事件的时候,容易忽视一种情况而掉入到一个坑,
那就是 切换事件页的时候,也会切换移动路线 。
如果这个独立开关A切换了事件页,而第二个事件页是站着原地不动,
那么 “继续移动则关闭A” 的触发 就执行不到了。
因此,设计需要避免独立开关切换事件页;
也可以让一个空白事件通过并行处理强制让这个弹丸一直移动。
示例中使用了后者方法,这样弹丸触发制动变红时,不会影响自己继续移动的指令。
6)阻塞设置
默认物体在上方(飞行)或下方(地面),相互是没有碰撞阻塞的。
没有碰撞,自然也不能让制动开关因为阻塞停下的功能生效了,
所以加阻塞的注释可以让飞行/地面物体也能阻塞。
7)获取撞击位置
制动开关还提供了触发制动时,获取开关朝向前面一格位置的功能。
注意,如果事件是自己主动停下来的,撞击位置仍然能获取到,是事件位置向前一格的位置。
镜头视野开关
1)基本信息
> 来自插件
Drill_EventSightSwitch 物体 - 镜头视野开关
> 简介
镜头视野开关即 开关事件 被玩家的镜头看见时,即可开启开关。
> 开关示例
开关示例在 机关管理层 中 镜头视野开关 的介绍。
> 关卡设计示例
开关通常和镜头的功能一起使用,你可以去 体积管理层 看看镜头墙的设计。
当镜头墙被突破时,镜头墙后的事件会被看见,这时候可以播放 发现秘密 的响声。
2)使用方法
你可以直接复制示例中现成的镜头视野开关事件。
也可以去 体积管理层 看看秘密响声设置。
3)开关触发与事件页
一个最基本的注释如下图所示。
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关弹起状态 | 进入视野时,开A,离开视野时,关A。 |
2 | 独立开关A | 开关按下状态 | 无。 |
4)机制详解
镜头的分辨率(屏幕大小)设置会影响开关的触发范围。
镜头放大或缩小时,也会影响到开关的开启与关闭。
如果你通过镜头制作了某些放大缩小的特效,可能会在不经意间开启镜头视野开关。
复合传感器
计数开关
1)基本信息
> 来自插件
Drill_EventMutiSwitch 物体 - 计数开关
> 简介
计数开关顾名思义,根据开关的数量,来控制门。
> 开关示例
开关示例在 机关管理层 中 计数开关 的介绍。
> 关卡设计示例
计数开关应用非常广泛,在大多数有门的解谜中,都有计数开关。
比如解谜:设计-脉冲开关 的门。
2)使用方法
计数开关需要在 开关事件 和 门/灯事件 中写注释。
开关事件中设置钥匙,在门事件中设置触发条件即可。
3)开关触发与事件页
一个最基本的注释如下图所示。
(条件符合情况决定是否开启独立开关)
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 门关闭状态 | 计数开关条件符合时,开A。计数开关条件不符合时,关A。 |
2 | 独立开关A | 门开启状态 | 无。 |
序列开关
1)基本信息
> 来自插件
Drill_EventSequentialSwitch 物体 - 序列开关
> 简介
序列开关对每个开关都有固定的要求。
如下图三个开关必须完全满足条件,才可点亮灯,只要任一条件不满足,立即关灯。
开关的顺序和开启/关闭状态被牢牢地固定,你可以以此来制作特定图形的解谜。
> 开关示例
开关示例在 机关管理层 中 序列开关 的介绍。
> 关卡设计示例
示例中有具体的解谜:设计-逻辑图形。
解谜设定为:按照前面两个图形,猜测第三个图形的形状,形状完全正确才能开门。
你可以去看看 ”14.鼠标 > 解谜设计-逻辑图形.docx
” 中的 逻辑图形关卡设计。
2)使用方法
序列开关只需要在 门/灯事件 中写下面注释,但需要添加多个条件项。
指明对应开关事件的 事件ID、独立开关、开启/关闭状态 。
3)开关触发与事件页
一个最基本的注释如下图所示。
(条件符合情况决定是否开启独立开关,条件项可以添加多个)
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 门关闭状态 | 序列开关条件符合时,开A。序列开关条件不符合时,关A。 |
2 | 独立开关A | 门开启状态 | 无。 |
4)机制详解
以 机关管理层 的序列开关为例:
例子中,三个@可以切换四种颜色:蓝、绿、红、橙;
必须要求三个@ 分别为: 红蓝橙 才能开启
切换开关结构如下:(四个事件页的执行内容都一样,只是行走图不一样)
开关可以切换四种颜色,有三个这种颜色切换的开关。
这三个开关需要满足“红、蓝、橙”的顺序,那么对应的独立开关条件如下:
其中开关的蓝色状态是 ABC 三个独立开关都关闭,
所以事件247必须同时满足三个关闭的条件。
聚集开关
1)基本信息
> 来自插件
Drill_EventGatherSwitch 物体 - 聚集开关
> 简介
当聚集开关聚集的数量超过一定值时,可以触发独立开关。
> 开关示例
开关示例在 机关管理层 中 聚集开关 的介绍。
> 关卡设计示例
示例中有具体的解谜:设计-消除砖块 。
解谜设定为:相邻的方块接触后,方块粉碎消除。
你可以去看看 ”14.鼠标 > 解谜设计-消除砖块.docx
” 中的 砖块事件设计。
2)使用方法
聚集开关可以直接复制示例中现成的事件。
3)开关触发与事件页
一个最基本的注释如下图所示。
(每个聚集开关绑定条件后自带聚集钥匙,相同聚集开关能相互作用)
事件页关系如下图所示。
事件页 | 条件 | 描述 | 指令 |
1 | 无 | 开关弹起状态 | 聚集钥匙超过数量时,开A。低于数量时,关A。 |
2 | 独立开关A | 开关按下状态 | 无。 |
4)机制详解
> 聚集范围
相邻的硬性规定为:事件两两的十字距离范围相邻。
如下图,红色箭头的事件相互相邻,聚集数量为4,
而紫色箭头的与其他全部不相邻,聚集数量为1。
> 聚集数量设置
聚集开关的绑定条件中,可以设置钥匙数量条件。
聚集开关事件之间可以有不同的数量要求,
如下图,需要3个相邻的聚集开关,不会被点亮。
只要再加一个相邻的开关,就会被点亮。
> 多符号设置
聚集开关可以添加多个触发,
比如下图的 ”圆形聚集” 和 ”方形聚集” 可以在同一个聚集开关身上。
但是注意,由于有两套激活方式,这也使得多符号聚集开关,有4个状态(事件页):
都没被点亮、都被点亮、只点亮了圆形、只点亮了方形
这就需要与 序列开关 组合使用才能实现,如下图注释。
5)关闭聚集开关
常规情况下,事件被 暂时消除/彻底删除 后,将不再具备聚集效果。
但置空的事件并没有被删除,所以置空事件仍然能聚集触发。
比如在消除砖块关卡中,关卡需要能够被重置,事件不能完全删除了,所以只能置空。
因此,在这种情况下,
需要在置空的事件页,添加注释:“=>聚集开关 : 关闭聚集开关”
6)延迟触发
聚集开关插件中,有一个延迟触发时间的设置:
之所以有这个设置,是因为如果时间为0,聚集开关触发的”太快了”。
比如,消除砖块的关卡设计:
常规思路中,如果我拖动蓝色的蝴蝶结,那么这个方块会下沉到最底部。
但是,下沉的沿路旁边有个蓝色蝴蝶结,
如果聚集开关是立即触发,那么在两个蓝色蝴蝶结接触的一瞬间,它们就粉碎了。
这显然与最初的设计思路背道而驰了。
所以,需要设置延迟的触发时间,确保蓝色蝴蝶结完全停稳后,再判断是否聚集触发。
消除砖块关卡中,触发延时时间 需要固定值为2。因为要实现下面的 细节一 功能。 |
7)消除砖块具体配置细节
细节一: 玩家鼠标拖移时,如果接触到了方块,那么就消除。
鼠标持续拖移时不能越过能消的方块。
细节二: 如果是物体自身”下落”的情况,两个相邻方块不会被消除。
上述的特殊规则,聚集开关插件 和 移动路线 要进行延时控制。
实现细节一: 拖移方块时(左右移动),每拖移一次,移动路线等1帧。
方块下落时(上下移动),移动路线不等待。
实现细节二: 触发延迟需要至少1帧。结合细节1,则需要等2帧。
不能等3帧或3帧以上,等多了 细节一 反而来不及消除了。
通过这种方式,就能实现下落时不消除,而拖移时会消除的效果了。
如果移动路线不强制等待这1帧,鼠标一直拖移,就说明物体一直没有静止下来,那么聚集开关就不会被触发。 |
注意,消除砖块关卡的下沉过程判断,对帧数要求非常严格,因此不能开“是否优化每帧计算量”,需要通过插件指令手动关闭设置。 |
其它
性能影响
开关中,有的开关消耗的多,有的几乎没有消耗。
不过,有一点可以确定,开关数量越多,性能消耗越大。
因此,尽可能保证一张地图中开关数量<150个即可。
示例中的设计关卡,一张地图直接承载了六个关卡的开关数,未出现明显的卡顿。如果你要设计关卡和开关,建议设计成一张地图一个关卡,这样就完全不需要担心性能问题了。 |
通用写法
通用写法: 指为了实现某些功能,专门设计编写出来的事件指令集合。
有时候点开一些 开关事件,你会发现里面的指令层层嵌套,难以理解。
别担心,这些写法都是固定写法,无论写法变成什么样,他们的特点和格式都是固定的。
可以见章节:
物体id规范
使用插件指令,获取 事件id、玩家队员id、载具id 时。
经常会提及找不到时返回-1,若为玩家则返回-2。
这个插件指令的表示方法并不是零散的,而是统一的设定,如下:
类型\id值 | 大于0 | 0 | -1 | -2 |
事件id(event_id) | 正常id值(1表示地图里id为1的事件) | 无效 | 找不到对象 | 表示玩家 |
玩家队员id(follower_id) | 正常id值(1表示玩家身后第1个队员) | 无效 | 找不到对象 | 表示玩家 |
载具id(vehicle_id) | 正常id值(1表示小船,2表示大船,3表示飞艇) | 无效 | 找不到对象 | 表示玩家 |
由于玩家是一个非常特殊的存在,能同时具备事件、玩家队员、载具的相似功能,
所以这里插件指令获取id值时,如果是玩家,都按-2表示。
从零开始设计(DIY)
双控开关/三控开关
1. 设置一个目标
2024年2月2日,作者我终于完成了3.50的更新,把 触发的本质 的大概念全部写完理清了。然后作者我躺床上睡觉的时候,顺手按了一个开关。
突然,我感觉这个开关好像不简单,两个开关,控制一个灯?
于是作者我跑去百度搜索了 ”双控开关”。
分析后,用现有的插件能做,但设计思路好像有点复杂。
啊,于是作者我不小心又开坑了,烦哎。
2. 结构规划/流程梳理
双控开关/三控开关需要实现一个基于用户的效果:
只要切换任意一个开关,那么灯一定会对亮暗进行切换。
百度百科里面介绍的是现实电路的设计,如下图。
可以看到,电路的设计 对于 我们要设计的触发,没什么帮助。
这里简单分析一下 事件页机制 关系,先把 双控开关的开启/关闭 与 灯的亮/暗 列出来,再看看如何构建设计思路。 |
双控开关与灯的关系表格入下:
开关1 | 开关2 | 灯 |
关 | 关 | 暗 |
开 | 关 | 亮 |
关 | 开 | 亮 |
开 | 开 | 暗 |
三控开关与灯的关系表格入下:
开关1 | 开关2 | 开关3 | 灯 |
关 | 关 | 关 | 暗 |
开 | 关 | 关 | 亮 |
关 | 开 | 关 | 亮 |
关 | 关 | 开 | 亮 |
开 | 开 | 关 | 暗 |
关 | 开 | 开 | 暗 |
开 | 关 | 开 | 暗 |
开 | 开 | 开 | 亮 |
现在,我们手里有:
Drill_EventMutiSwitch 物体 - 计数开关
Drill_EventSequentialSwitch 物体 - 序列开关
如果用序列开关,要么满足全部条件,要么满足固定数量的条件,而这里双控开关就有4个条件,看起来不好弄。
如果用计数开关,看起来似乎能用上。
于是,在双控开关的表格里面再加一列:
开关1 | 开关2 | 灯 | 开关为开的数量 |
关 | 关 | 暗 | 0 |
开 | 关 | 亮 | 1 |
关 | 开 | 亮 | 1 |
开 | 开 | 暗 | 2 |
在三控开关的表格里面再加一列:
开关1 | 开关2 | 开关3 | 灯 | 开关为开的数量 |
关 | 关 | 关 | 暗 | 0 |
开 | 关 | 关 | 亮 | 1 |
关 | 开 | 关 | 亮 | 1 |
关 | 关 | 开 | 亮 | 1 |
开 | 开 | 关 | 暗 | 2 |
关 | 开 | 开 | 暗 | 2 |
开 | 关 | 开 | 暗 | 2 |
开 | 开 | 开 | 亮 | 3 |
可以看到 计数开关 的数量,能够完美匹配灯的亮暗。
偶数全暗,奇数全亮。
这就可以设计双控、三控、甚至N控开关了。
3. 准备素材
最初作者我考虑直接用按钮设计就行了。
但后来感觉不太对,因为现实生活的灯开关,很少有那种 按钮式开关。
从触发设计上看,按钮式开关 和 闸刀式开关 没什么区别。但从外观上看,玩家感受区别还挺大,属于两个完全不同的机关。 |
所以作者我重新画了闸刀开关。
4. 双控开关设计
开始添加事件前,
留意一下 脚踩的开关 和 手拉的开关,触发方式不太一样。
脚踩的开关,可能要用到重力开关;
手拉的开关,直接执行开启独立开关即可。(第二页则执行 关闭独立开关)
然后,在事件页第二页添加 计数钥匙。
给双控开关的灯,添加计数条件即可。
在游戏中测试,可以看到功能已经实现:
只要切换任意一个开关,那么灯一定会对亮暗进行切换。
5. 三控开关设计
前面提到了双控开关,等于1就能实现了。
但是,三控开关,要等于1还要能等于3,但计数开关只能绑定一个条件。
为了合并两个条件,
这里可以用序列开关,设计A1+A2任意一个条件满足即开。如下指令。
序列开关可以设置 要求全部满足,也可以设置 要求指定数量满足。
“满足数量 大于等于[1]” 即为 “任意一个条件满足”。
在游戏中测试,三控开关也实现了:
只要切换任意一个开关,那么灯一定会对亮暗进行切换。
设计“独立开关A+B都为ON”的出现条件
1. 设置一个目标
2024年2月6日,作者我使用插件 “物体-独立开关” 的时候,
发现了一个常用指令 <<出现条件>
> 中,非常反人类的设定。
“与独立开关设置互斥” “只能以第一个注释为准”。
如果我想要多个独立开关都为 ON,怎么办?
于是作者我跑去看了一眼脚本,
哦,独立开关的确只能设置一个,本身底层设定就只能写一个……改不了。
作者我看看有没有什么其他的方法。
2. 结构规划/流程梳理
本来作者我打算开新坑,
但转念一想,不对,这个插件我好像已经写过了。
没错!就是插件 物体-序列开关 。(可见 序列开关 )
Drill_EventSequentialSwitch 物体 - 序列开关
这个插件能够添加任意多个 固定条件项,全部满足才能开启独立开关。
3. 事件编写
在事件页第一页添加下面的指令,
第二个事件页,使用 序列开关 指向的 独立开关C。
即可实现 “独立开关A+B都为ON” 的出现条件功能。
自动关闭的门
1. 设置一个目标
2021年12月16日,作者我正在建设建筑管理层,突然发现默认图块中,连一个像样的门都没有。
于是作者我想设计一个门,门能够被玩家打开,但当玩家离开一定距离后,自动关闭。
(只考虑玩家能打开,事件不能开门。事件开门会导致情况更加复杂。)
2. 结构规划/流程梳理
这里将想法描述为两个触发:
玩家开门后,门保持打开状态
玩家离开门一定距离后,自动关闭(回到开门前的事件页)
首先,开门过程就用正常的开门指令即可,玩家接触后,门播放不同朝向(表示开门动画),最后处于朝上状态。
离开一定距离后自动关闭,可以判断需要用到 接近开关 。
使用插件:
Drill_EventAutoTrigger 物体触发 - 固定区域 & 玩家接近 & 条件触发
3. 开门指令
开门指令如下:
开门前处于待开门状态,开门后,处于开启状态。
注意,开门有两种情况,从里面出来和从外面进去;
因此门必须固定朝向,避免从里面出来时,门事件朝向玩家,造成行走图突然改变。
需要播放朝向时,再 关闭固定朝向 。
在游戏中测试,确保从里面从外面都能开门即可。
目前事件页关系如下:
4. 关门指令
a)关门动作
新起一个事件页3,播放关门的动作,动作播放完后,回到事件页1。
事件页3用独立开关B,执行完后,关闭A(开门状态)和B(关门动作本身)。
目前,事件页跳转关系如下:
想要关门,开启事件的 独立开关B,就能立即关门了。
b)关门触发时机思路
接下来,需要使用接近开关实现:
玩家在门前,不开启B,玩家离开门后,开启B(关门)
注意,由于 接近开关 中只提供了 接近开启+离开关闭 的功能。
没有提供 接近关闭+离开开启 的功能,所以这里需要想办法反转一下。
c)关门触发
先添加独立开关C的条件,独立开关C,是常规的: 接近开启+离开关闭 。
也就是说,只要C关闭了,就立即开启B。即可实现离开关门动作。
那么,开一个 并行处理 的监听,只要C一关,开启B,就实现了。
这个状态,在开门后持续并行监听即可。
这样,事件页的功能就完成了,如下:
小爱丽丝拟态怪
1. 设置一个目标
2023年12月18日,作者我在写多状态开关的文档,突然发现其实现有插件能有一些特别奇妙的组合。
于是,作者我打算设计一个,每次被看见一个都是完全不同形态的小爱丽丝。
比如,第一次被看见时是个正常的小爱丽丝,第二次看见是其他的东西。
2. 结构规划/流程梳理
这里将想法可以拆解为:
镜头看见时;
第一次、第二次、第N此看见时变化。
根据描述情况,会用到下面的功能:
根据 多状态开关通用写法 的知识,
我们知道镜头视野+多状态开关通用写法,能够实现效果。
3. 使用现有的机关功能组合
那么,复制一个多状态开关。
如下图,将 多状态开关 原连接的重力开关触发 修改成 镜头视野开关 的触发即可。
在游戏中测试,
看一下事件,然后远离,就能发现事件切换了。
原设置为 重力开关,要求玩家踩一次才会开启独立开关A,然后多状态变化。这里将重力开关换成镜头视野开关,触发条件就由”踩一次”变成了”看见一次”。 |
4. 结构改进
拟态怪变成小爱丽丝后,玩家应该能够和小爱丽丝进行对话。
但由于当前的组合 设置为 并行处理,功能被占用了。
因此,需要考虑另起一个事件专门控制 拟态怪 变化,
而拟态怪本身能够直接进行对话。
控制拟态怪的事件,
写法要将 控制本事件 改成 控制指定事件 。
而拟态怪本身,直接写对话即可。
注意,多状态开关的独立开关条件为 P1、P2、P3 。
这样就完成了拟态怪的功能了。
你可以去示例中 机关解谜管理层 看看实际效果。
拟态怪也可以是门,实现第一次看见为关闭状态,第二次看见为开启状态。 |