Skip to content

关于事件接近触发

基础要求

先尝试回答下面的问题:什么是触发?什么是区域触发?什么是主动方和被动方?什么是持续触发和单次触发?事件的串行、并行如何设置?需要先了解基础知识哦!

如果你对上述问题有疑问,那么说明你还不了解 触发的本质。

需要去看看:”8.物体 > 触发的本质.docx”。

也可以去看看示例中 机关管理层 的 触发的本质 介绍。

相关插件

主要插件如下:

◆Drill_CoreOfFixedArea 物体触发 - 固定区域核心

◆Drill_EventClosingTrigger 物体触发 - 固定区域 & 事件接近 & 条件触发

这里主要介绍 事件接近触发 的相关功能。

如果你想了解 玩家接近触发,去看看文档“9.物体触发 > 关于玩家接近触发.docx”。

若已了解触发的本质,不多废话,先打开插件,把DEBUG调试用的区域显示功能打开,然后进入游戏看。很多思路就清晰了,打开方法去看章节:DEBUG区域显示

快速区分

玩家接近事件接近

更详细的区分,可以看后面章节:相似插件区别

名词索引

以下你可以按住ctrl键点击下面的词,可以直接定位到想了解的名词:

插件名概念固定区域 事件接近 条件触发
区域主体主动事件 事件触发区域 目标事件
条件触发持续性 条件触发目标事件触发 主动事件触发 筛选器 区域触发锁

插件关系

插件关系如下,玩家接近和事件接近 插件相互不干扰:

事件接近

DEBUG区域显示

1)开启DEBUG

在参数中,设置为true即可。

每个事件都能够存放数量不同的事件触发区域,但这里最多只能显示前三个事件的区域。

图中第四个范围是不会显示的,因为最多显示三个,你可以调整一下位置,吧最后一个往前放。

2)叠加色

两个以上的区域显示时,会出现重叠的情况,重叠的部分可能会出现颜色叠加,而产生不同的颜色,比如 红+绿 = 黄。留意一下这是正常现象即可。

区域主体关系

1)定义

主动事件: 即区域的所有者,这些区域跟随 该事件的位置与方向 变化。

事件触发区域: 事件默认不含区域,需要手动添加区域,添加后即绑定到事件。

目标事件: 符合区域的条件触发的玩家/事件,进入区域范围后,触发开关。

注意,只有主动事件不会触发自己的区域,玩家/其他事件都能触发区域。

你有必要限制一下触发对象的情况,比如使用 区域触发锁 或者 筛选器

当区域符合条件后,有两种触发方式:触发自身与触发事件

2)相似插件区别

玩家接近: 指多个区域固定在玩家身上,事件接近了玩家的区域,会开启独立开关。

事件接近:指多个区域固定在事件身上,玩家/其它事件接近了该事件的区域,可以开启 主动事件或目标事件 的独立开关。

因为玩家不属于事件,没有自身的独立开关和事件页,所以 玩家接近和事件接近 被分成了两种不同的插件结构。

筛选器

1)固定区域

该插件基于固定区域,可以使用 形状区域或自定义区域 作为接近触发范围,

详细可以去看看“9.物体触发 > 关于物体触发-固定区域.docx

2)筛选器

事件接近的区域,支持在自定义区域的基础上,额外设置筛选器。

如果事件处于 被筛选掉的区域 时,则事件不会被触发。

如下图,前者是无筛选器,后者是去除了 不可通行 区域的筛选器。

比如某些潜入剧情,可以用筛选器筛选掉阴暗的角落,确保玩家的躲避空间。

开DEBUG显示,事件移动时,区域经过石头的位置可能会闪一下,这是因为显示区域刷新延迟问题。但这并不会触发到事件,实际情况下 不符合的位置 已经被筛选了。

你也可以使用筛选器专门让 某事件看见特定类事件 时,做出反应。

比如喜欢宠物的小爱丽丝,看见小爱丽丝事件不为所动,看见宠物事件,会跑过去羡慕。

区域修正

游戏原设置有个缺陷,前进一步,在你开始前进的那一瞬间,你就已经被判定为在前进的位置了

插件默认开启了区域修正,你可以关闭,然后去物体触发管理层看看效果。

如下图的判定,你前进之前,亮片就已经变化了。

修正后,踏出一半的距离,才会变化。

因此默认开启修正,能够确保未完全离开当前位置时,仍然保持当前区域的触发情况。

触发

持续性

事件接近触发是 持续不断的 。

将区域绑定后,游戏中每一帧都进行区域接近的判断。

一旦区域发生变化,触发会即时变化。

与插件指令控制的单次触发不同,

插件指令执行了单次物体触发时,触发才会变化一次。

(单次触发去看看:“9.物体触发 > 关于物体触发-固定区域触发.docx”)

触发自身与触发事件

看本章节前,先了解下对象间基本关系:区域主体关系

1)条件触发

每个区域都有一个固定的关键字,这个关键字用作为 被触发 的条件。

只有关键字匹配,才能被触发。

以下图为例:当事件进入了前4格范围时,会触发 ”事件前4格” 的关键字。

但不会触发 ”事件前2格” 的关键字。

若目标事件只有 ”事件前2格” 的条件,条件匹配才会开启独立开关A。

另外,添加范围时,你可以写 ”事件触发[n]” 的格式,也可以直接写关键字名。

两种写法意思是一样的。但写关键字名容易理解一些。

2)目标事件触发

目标事件触发指 目标事件 进入范围后触发 目标事件 的独立开关。

此触发不常用,但能够实现 事件与事件之间 的触发。

比如 目标事件 进入主动事件范围内的雷区/尖刺地形,能够触发目标事件,让其受到相应的范围伤害。再比如,玩家操作一个人偶,人偶代替玩家实现”玩家接近”的功能。

3)主动事件触发

主动事件触发指 玩家/事件 进入范围后触发 主动事件自身 的独立开关。

你可以理解为事件看到有人来了,于是做出反应。

你只有用 筛选器区域触发锁 ,才能让 主动事件 选择性忽视看见某些人。

不然任一物体进入范围,都能触发主动事件。

在主动事件中,添加范围,同时添加 被触发 条件。即表示能触发 主动事件自身。

当任意物体进入 ”事件前2格” 时,事件会被触发。

4)区域触发锁

区域触发锁 用于限制 主动事件触发 中目标事件的类型。

玩家/事件 进入范围后都能触发 主动事件自身 的独立开关,如果你只想要玩家被看见时才触发主动事件的开关,设置条件”只玩家才能触发”即可。

注意,如果你设计的是 目标事件触发,要把锁关闭,防止判定干扰。

性能消耗

事件接近触发的性能消耗非常考验脚本内部的算法。

假设地图中有30个事件,每个事件有4个区域,平均每个区域有12个坐标点。每个坐标点要判断这30个事件是否激活触发。1秒60帧。

那么每秒都要计算 30x4x12x30x60 = 2592000次。

这计算压力对于计算机来说非常大。

目前使用了最新的棋盘算法,能将区域压缩在一起,并把事件判断次数减半。

大概能减少到每秒324000次。

虽然减少了大半,但计算量仍然不小。

(注意这里只是举例,次数并不是真实次数,代码内部要复杂的多,实际计算量更复杂)

因此在设计时,尽可能减少单张地图中的 事件数量、区域数量、区域的坐标点数量

从零开始设计(DIY)

小爱丽丝看见玩家后打招呼

1. 设置一个目标

首先要想明白自己想创建一个什么样的触发效果,这一点非常重要。

你思考想象的场景,诸多细节与插件的功能息息相关,不要选错插件了。

2022年5月2日,作者我玩《口袋妖怪叶绿》看到其中的挑战者的触发机制。

这里,作者我打算制作一个小爱丽丝事件,事件能看见玩家,并打招呼。

2. 结构规划/流程梳理

首先,“看见”不是单次动作或单次插件指令,而是持续性对某范围进行视野触发。

(可见相关概念:持续性

然后,小爱丽丝“看见”,是基于小爱丽丝的视角,而不是玩家的视角,因此使用 事件接近触发 ,而不是玩家接近触发。

(可见概念:事件接近

接着,由于是 小爱丽丝事件 的视野范围看见玩家,因此设置事件触发后,还需要留意一下只对 看见玩家 有效,注意排除 看见其他事件 触发的情况。

(可见概念:区域触发锁

因此可以得出结论:

需要制作一个 主动事件 -> 范围(只对玩家) -> 玩家 ,接近后 触发主动事件自身 的这种触发结构。

3. 区域设置

“看见”是一个区域范围,需要新建一个事件触发配置。

如下图,点开后可以看到区域模式有 触发关键字 和 区域模式 选择。

区域模式分为 形状区域和自定义区域 两种。

区域形状的概念可以去了解下 “9.物体触发 > 关于物体触发-固定区域.docx”。

如果你要设置 自定义区域,去看看 那个文档中 的 自定义区域配置 章节。

4. 事件触发设置

完成区域设置后,接下来要将 区域 绑定到 小爱丽丝事件。

这里我们以 事件前4格 的配置来举例,

即点集合:“(0,0), (-1,0), (-2,0), (-3,0), (-4,0)”。

事件注释中,可以写 条件关键字 “事件前4格”,也可以写 “事件触发[4]”。

然后把DEBUG区域显示开启,然后在游戏中测试。详细可见:DEBUG区域显示

在游戏中,可以看到事件的区域。

5. 确认 目标事件

这个时候,如果玩家进入了区域范围,主动事件 是能够触发开关的。

但是,最好回头再看看 区域触发锁 的设置。

必要筛选一下只留下玩家,不然其他事件进入范围也会触发,会造成干扰。

6. 事件触发战斗设计

设置完上述事件后,将事件复制粘贴多个即可。

迷宫放置时,注意 事件之间的空间挤占、视野、以及玩家活动范围的问题。

详细设计可以去 遇敌管理层 去看看。

小爱丽丝要看见小红才打招呼

1. 设置一个目标

首先要想明白自己想创建一个什么样的触发效果,这一点非常重要。

你思考想象的场景,诸多细节与插件的功能息息相关,不要选错插件了。

根据之前设计的 看见玩家,这里我打算制作一个, 事件 看见 特定事件 才生效的结构。

2. 结构规划/流程梳理

首先,“看见”不是单次动作或单次插件指令,而是持续性对某范围进行视野触发。

(可见相关概念:持续性

然后,小爱丽丝“看见”,是基于小爱丽丝的视角,而不是玩家的视角,因此使用 事件接近触发 ,而不是玩家接近触发。

(可见概念:事件接近

接着,由于是 小爱丽丝事件 的视野范围 看见 小红,因此设置事件触发后,还需要留意一下只对 事件 有效,注意排除其他事件触发的情况。

(可见概念:区域触发锁

因此可以得出结论:

需要制作一个 主动事件 -> 范围(只对事件) -> 事件 ,接近后 触发主动事件自身 的这种触发结构。

3. 区域设置

新建一个事件触发配置,

点开后可以看到区域模式有 触发关键字 和 区域模式 选择。

区域模式分为 形状区域和自定义区域 两种。

区域形状的概念可以去了解下 “9.物体触发 > 关于物体触发-固定区域.docx”。

如果你要设置 自定义区域,去看看 那个文档中 的 自定义区域配置 章节。

4. 事件触发设置

完成区域设置后,在事件中添加范围。

这里我们先以 事件小扇形 的设置为例:

把DEBUG区域显示开启,然后在游戏中测试。详细可见:DEBUG区域显示

在游戏中,可以看到事件的区域。

如果玩家进入区域,是会触发事件的。

但这里我们要求的是 事件看见事件,所以需要修改筛选条件。

5. 确认 目标事件

因为是要设置 事件 被看见后触发。因此首先需要排除玩家。

但是,考虑到其他的事件可能已经用了“事件小扇形”的区域了。

因此这里新建一个“事件小扇形_找小红”。

注意修改 触发关键字,也设为“事件小扇形_找小红”。

另外,这里的”找小红”,是特指的一个事件,而不是所有事件。

因此,需要使用筛选器进一步设置。

6. 缓存标签设置

这里我们打开 固定区域核心 的筛选器,

从筛选器中能用的条件,可以判断应该用 事件标签列表 条件来筛选。

其中“事件标签列表”是事件缓存标签插件的功能,注意你的游戏中需要添加:

Drill_EventBufferTags 物体管理 - 事件的缓存标签

因为“小红”是一个特指的事件,那么在那个事件身上,添加“小红”的标签,这样就能专门筛选出小红了。

筛选器设置后,回到 事件触发 插件中的配置,对应上筛选器的id。

在相应的小红事件中,添加小红标签。

7. 测试效果

设置小红和另一个小爱丽丝事件,持续往下走,然后在游戏中测试。

没开筛选器前,范围是这样的。

开了筛选器后,你会发现没有显示任何区域。

这是因为不符合条件的区域块,都被 筛选器 筛选掉了。

但是,符合条件的小红出现,小红脚下的图块会立刻点亮。

从而,激活了 主动事件 的独立开关。

8. 细节问题

有时候,你会发现弹出了这个错误。

这是因为,你把 条件关键字 给漏了,忘了修改。

关键字没对应上,经常会出现 激活无效 的情况。

修改即可。

贡献者

暂无相关贡献者

页面历史

暂无最近变更历史