关于事件接近触发
基础要求
先尝试回答下面的问题:什么是触发?什么是区域触发?什么是主动方和被动方?什么是持续触发和单次触发?事件的串行、并行如何设置? |
如果你对上述问题有疑问,那么说明你还不了解 触发的本质。
需要去看看:”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. 细节问题
有时候,你会发现弹出了这个错误。
这是因为,你把 条件关键字 给漏了,忘了修改。
关键字没对应上,经常会出现 激活无效 的情况。
修改即可。