当前位置: 首页 > news >正文

Y3编辑器文档4:触发器1(界面及使用简介、变量作用域、入门案例)

文章目录

    • 一、触发器简介
      • 1.1 触发器界面
      • 1.2 ECA语句编辑及快捷键
      • 1.3 参数设置
      • 1.4 变量设置
      • 1.5 实体触发器
      • 1.6 触发器复用
    • 二、触发器的多层结构
      • 2.1 子触发器(在游戏内对新的事件进行注册)
      • 2.2 触发器变量作用域
    • 三、入门案例
      • 3.1 使用触发器实现瞬间移动
      • 3.2 收集碎片(使用变量进行计数)
      • 3.3 复合条件(if语句)
        • 3.3.1 地形设置
        • 3.3.2 编写能量灌注逻辑
        • 3.3.3 编写能量灌注后,实现传送逻辑
      • 3.4 循环(创建6个次元种子)
      • 3.5 数组
      • 3.6 计时器
      • 3.7 单位组和玩家组
        • 3.7.1 单位组
        • 3.7.2 玩家组
      • 3.8 技能设计
        • 3.8.1 地形设置
        • 3.8.2 触发编写
      • 3.9 运动器

  • Y3编辑器文档1:编辑器简介及菜单栏详解(文件、编辑、窗口、细节、调试)
  • Y3编辑器文档2:场景编辑(地形编辑、物件放置)
  • Y3编辑器文档3:物体编辑器
  • Y3编辑器教程4:触发器1(界面及使用简介、变量作用域、入门案例)

一、触发器简介

参考官方文档《触发器》

  触发器是Y3编辑器中实现游戏逻辑的核心组件,它通过“事件-条件-动作”(Event-Condition-Action,简称ECA)的模式来实现各种效果。

  • 事件(Event):触发器的导火索,当设定的事件发生时触发器才会执行。
  • 条件(Condition):触发执行必须满足的条件。
  • 动作(Action):触发执行的结果。
    在这里插入图片描述

1.1 触发器界面

  通过主界面顶部功能栏或使用快捷键F4可进入触发器。进入触发器窗口后,你可以添加或删除文件夹和触发器,并使用搜索功能快速找到你想找的触发器;还可以对选定的触发器进行以下操作: 复制, 剪切, 粘贴, 删除, 重命名, 禁用, 和转化成Lua代码。
在这里插入图片描述
右键单击触发器并选择禁用使其无效。单击启用以重新激活无效的触发器

在这里插入图片描述

  你可以在变量管理事件管理中提前写入常用的变量和事件,以便在游戏中随时调用,从而减少开发项目的记忆成本和后期维护成本。比如可以提前设置事件并添加事件中需要的参数,然后在触发器-自定义事件中进行调用。
在这里插入图片描述
在这里插入图片描述
  在主界面-编辑-通用设置-编辑设置中勾选“缩略图滚动条”,可以显示ECA缩略图滚动条。左键点击可以定位到想要的行数,长按左键可以拖动滚动条。错误、点选与搜索结果也会以色块形式显示到普通滚动条上。缩略图可以收起,收起后需要重新在“主界面-编辑-通用设置-编辑设置”打开。
在这里插入图片描述
在这里插入图片描述

1.2 ECA语句编辑及快捷键

  点击事件/条件/动作后面的"+"为当前部分新建语句,也可以在空白处点击鼠标右键,新建事件,条件,动作,子触发器与注释。如果想要更改已有的事件,条件或者动作,双击对应语句即可弹出选项窗口,选择新的内容后即可进行覆盖。

功能快捷键说明
新建触发器Ctrl + T
新生子触发器Ctrl + Q
新建事件Ctrl + E
新建条件Ctrl + D
新建动作Ctrl + R
新建注释Ctrl + N
ECA注释开关Ctrl + M将当前语句转为注释
设为无效Ctrl + W使触发器文件或eca条目无效(被跳过)
条目下移Ctrl + ↓快速将当前选中的eca下移一行
条目上移Ctrl + ↑快速将当前选中的eca上移一行
新建收纳盒Ctrl + P
添加至收纳盒Ctrl + O添加当前选中eca到收纳盒
变量引用查看A
全局元素引用查看S
跳转到函数D

在这里插入图片描述

功能快捷键说明
查看上一个触发器Ctrl + ←
查看下一个触发器Ctrl + →
搜索框Ctrl + F
跳转到物编器Ctrl + J
切换到触发器Ctrl + 1
切换到函数库Ctrl + 2
切换到触发总览Ctrl + 3
跳转F3
复制参数Shift + C右键单击参数使用。复制时,整个参数的值和类型都将被复制到剪贴板上
粘贴参数Shift + V右键单击参数使用,复制的参数类型与目标参数类型必须相同

在这里插入图片描述

1.3 参数设置

  未赋值的参数会以红色显示,已赋值的参数会以填入的数据类型分配颜色,可选的参数则在次级菜单中选用,额外的选项会以蓝色显示,文本信息说明了当前触发器语句的含义。需要指定所有的必选参数,本条动作以及所在的触发器才能正常运行。
在这里插入图片描述
参数有以下几种类型:

  • 预设对象:当参数类型为可以放置在场景中的对象时( 单位,装饰,物体,特效等),可以直接选择该预设对象作为参数。
    在这里插入图片描述
  • 数值:你可以直接将一个固定的数字、文本或布尔值赋给一个参数
  • 变量:包括全局变量和局部变量
  • 函数:一组官方打包的获取数据的动作,可以直接提供对应的返回值。
    在这里插入图片描述
  • 通用:用于设置 自定义值 和调用表格编辑器。
    在这里插入图片描述
      当您单击转换为变量时,会在当前语句之前创建一个变量赋值语句,将当前语句结果赋值给一个变量。转换为变量后,您可以单击取消变量转换以恢复到之前的状态。

在这里插入图片描述

1.4 变量设置

你可以通过触发器界面设置变量,或通过ECA选择界面设置变量。

在这里插入图片描述
变量在创建时,需要声明其类型,部分变量类型必须设置默认值。

  • 非对象型变量:字符串、浮点数、整数、布尔值
  • 对象型变量:单位、单位组、玩家组、单位命令

变量根据作用域类型分为全局变量和局部变量。

  • 全局变量:可以在本项目内的任何触发器中读取和写入。
  • 局部变量:只能在当前触发器中生效。

  数组是相同数据类型的集合,数组中的每个元素都在其基本值上添加了一个索引,使我们在数组中更容易找到和访问它们。整数、单位、实体、单位名字、物品实体等变量都可以设置为数组。比如下面代码设为按下H键之后,在Boss周围召唤6个黑暗守卫(使用数组guards实现)。

在这里插入图片描述

  变量只能用于储存数据的媒介,并不会实时更新,任何对变量的操作都需要使用赋值动作进行实现。请不要忘记在触发器中编写更新变量的语句。例如,在游戏运行的时候设置变量“玩家人数”为6,5分钟后有一位玩家退出游戏,此时游戏中玩家人数为5,如果没有编写变量更新语句,那么变量“玩家人数”依然为6。你需要编写能表达“在玩家退出游戏的时候玩家人数减1”的逻辑。

在这里插入图片描述

1.5 实体触发器

  在物体编辑器->触发器中可进行实体的逻辑编写,即为实体触发器,其优势在于它可以更简单地将逻辑和目标物体绑定,而与其他摆件无关,所以可以减少性能的消耗。实体触发器的编辑与上述触发器操作一致,一个摆件也可以设置多条触发。

1.6 触发器复用

  在触发器中选择想要复制的触发进行复制,这条触发器的源代码内容会写入到粘贴板中,此时可以在记事本等文本文件中进行本地粘贴保存,或者在新项目的触发器界面选择右键粘贴(Ctrl+V)。
在这里插入图片描述

二、触发器的多层结构

2.1 子触发器(在游戏内对新的事件进行注册)

  触发器具有一个事件,这个事件是通过一个注册来实现的,即对一个事件进行注册,从而让系统在对应的事件触发时能继续按照条件与动作顺序执行。全局触发器是在游戏初始化时就注册完成的,如果要在游戏内对新的事件进行注册,实现更复杂的游戏逻辑,就需要通过子触发器来实现。

  子触发器是在触发器的“动作”中创建的,用于在游戏进程中对新的事件进行注册,注册后会独立运行(按ECA的逻辑执行)。子触发器是一种变量类型,可以返回这个触发器实例,以方便在使用完毕后销毁它(如果需要的话)。因为是游戏进程中注册,所以我们可以把变量中的数据传递给子触发器进行注册。

下面是一个简单的示例,使用子触发器将单位(关羽)移动到相应的点。

在这里插入图片描述

2.2 触发器变量作用域

  作用域是指变量在程序中被定义后可以被访问的范围,它决定了变量的可见性和生命周期。全局变量可以在任何触发器及其子触发器的范围内有效,局部变量可以在当前触发器及其子触发器的范围内有效,子触发器局部变量只能在当前子触发器的范围内有效。作用域的存在可以防止变量命名冲突,提供封装和隔离性,提高程序的可靠性和可维护性。

  局部作用域中的变量优先级更高。比如在子触发器中定义了一个局部变量,这个变量与全局变量或者外部作用域中的变量(另外一个触发器中定义的变量)同名时,子触发器内部只能访问和修改这个局部变量,其余两个同名变量被隐藏,无法直接访问或修改。所以说,作用域机制提供了一定程度的隔离,可以防止子触发器意外修改外部变量,从而避免潜在的错误和不可预测的行为,保持代码的清晰和可维护性。

  根据作用域划分,触发器中的变量可以分为全局变量、函数局部变量、触发局部变量、子触发器局部变量和组变量。根据类型划分,可以分为对象型变量(如单位、单位组、玩家组、单位命令)和非对象型变量(如字符串、实数、整数、布尔值)。

  子触发器内部对于赋值运算(非单位类型局部变量的修改)只会在子触发器内部生效,不会影响外部;但是对对象型变量(如单位组、玩家组等)的操作以及对单位属性的修改会同步影响到外部。这种设计有助于在保持局部变量隔离性的同时,允许对共享资源进行必要的修改(单位对象是一个全局可访问的对象)。

  下面使用全局字符串、全局单位类型、局部字符串、局部单位类型;全局单位组、局部单位组这6个变量进行测试。

  1. 先打印每个类型的初始值

    [Info]: 全局字符串AAA
    [Info]: 全局单位类型UnitName:134219749张飞)
    [Info]: 局部字符串BBB
    [Info]: 局部单位类型UnitName:134274912(关羽)[Info]: 全局单位组中单位数量1
    [Info]: 局部单位组中单位数量1
    
  2. 通过子触发器修改这4个变量的值并打印
    在这里插入图片描述
    在这里插入图片描述

    [Info]: 全局字符串CCC
    [Info]: 全局单位类型UnitName:134220068(大乔)
    [Info]: 局部字符串DDD
    [Info]: 局部单位类型UnitName:134257382(小乔)[Info]: 全局单位组中单位数量2
    [Info]: 局部单位组中单位数量2
    
  3. 通过其他子触发器再次打印变量的值:

    [Info): 全局字符串CCC
    [Info): 全局单位类型UnitName:134220068(大乔)
    [Info]: 局部字符串BBB
    [Info): 局部单位类型UnitName:134274912(关羽)[Info]: 全局单位组中单位数量2
    [Info]: 局部单位组中单位数量2
    

三、入门案例

本章节整合官方文档《触发器的多层结构》和官网课程《触发器1》的内容。

3.1 使用触发器实现瞬间移动

参考视频《什么是ECA》

  1. 地形设置:在地图上放置一个单位,在传送阵处绘制圆形区域,在希望角色被传送到的地方绘制一个点。点和区域在编辑器里是可见的,但在游戏中会处于隐藏状态。

  2. 触发编写

    • 新建事件(Ctrl+E):当任意单位进入圆形区域时触发,所以选择单位->任意单位区域事件。区域行为选择进入,区域选择刚刚绘制的圆形区域。

    • 新建条件(Ctrl+D):只有神秘人进入才会触发动作。设置单位->单位类型-判断,触发选择单位类型->函数->获取单位类型,判断符选择等号,第二个字段选择自定义的神秘人

    • 新建动作(Ctrl+R):神秘人移动至点P1。

      • 移动命令:选择单位->强制移动动作,选择单位->函数->获取事件中的单位,坐标选择刚刚创建的点。
      • 发布停止命令:不设置的话单位瞬移后会立马跑回去。选择单位->发布命令->停止
      • 相机跟随单位:为了增加玩家视觉体验,设置镜头->第三人称跟随单位。玩家选择玩家1,镜头焦点选择跟随事件中的单位。

在这里插入图片描述

3.2 收集碎片(使用变量进行计数)

  游戏中,探险者收集六个次元石块并修复传送阵,这需要通过设置一个整数变量来记录探险者收集的石块数量。

在这里插入图片描述

  1. 地形设置:打开物体编辑器,创建一个新的物品(石块),并设置模型和图标。在表现页面,可以预先设置石块大小,提前调整。最后在地图上放置六个石块。

  2. 触发编写:触发的核心,是需要设置一个整数变量去记录探险者收集的石块数量。

    • 创建事件:创建一个新的触发器,设置事件为物品->单位获得事件
    • 创建动作:选择基础->变量-设置变量->全局变量(可重命名为number,类型选整数)来记录石块数量,初始值为0。
    • 实现累加逻辑:每次探险者获得石块时,变量number增加1。所以设置第二个参数整数->整数间数学运算。第一个变量为number,运算符为+,第二个变量设为1,这样每获得一个石块,数量就累加1。
    • 存储石块数:为了增加用户体验,创建一个字符串变量来存储和显示累计拾取的数量并展示。选择变量->设置变量->局部变量(字符串类型,可命名为message)。设置为字符串->字符串拼接。第一个字符串为“累计拾取数为:”,第二个为number。由于整型要转为字符串类型才能拼接,选择字符串->任意变量转为字符串,选择待转换的变量为整数->全局变量->number
    • 展示消息:选择界面->系统消息提示,选择向玩家1显示message信息,持续时间可自己调整。

在这里插入图片描述

3.3 复合条件(if语句)

  if流程语句的结构如下,条件可以是取反(not语句)、所有条件成立(and语句)、任意条件成立(or语句)或者所有条件不成立。
在这里插入图片描述
下面用if语句实现探险者进入能量泉区域完成自动充能,然后才激活传送阵的效果。

3.3.1 地形设置
  • 在物体编辑器中新建两个自定义装饰物(能量圈和传送门)和一个自定义单位(探险者)放置在地图上。
  • 在能量圈和传送门的位置各绘制一个圆形区域,并分别重命名为能量圈区域和传送门区域。
  • 在希望被传送到的位置绘制一个点,重命名为point。
  • 新建能量获取魔法效果:选择魔法效果->创建->普通->右上角获得特效列表下选择一个蓝色护盾buff特效。选择左上 模型编辑器-模型,可以查看在不同单位模型效果。单机特效标签,弹出的窗口中还可以对效果进行旋转和缩放,以及选择挂接点。
    在这里插入图片描述

在这里插入图片描述

3.3.2 编写能量灌注逻辑

需要新增一个全局变量infusion来判断探险者是否进入能量泉进行了能量灌注,类型为布尔值。

  • 创建事件:选择单位任意单位进入区域(魔法区域)
  • 创建注入动作:选择基础->设置变量,新建全局变量重命名为infusion,类型为布尔值,默认为False。进一步设置变量infusionTrue,表示单位进入能量泉后,能量注入成功,infusion应为True
    在这里插入图片描述
  • 创建魔法效果动作:选择魔法效果->添加魔法效果。第一个参数魔法效果类型,选择刚刚自定义的获得能量护盾效果(蓝色护盾buff)。第二个参数单位选择探险者。
    在这里插入图片描述
3.3.3 编写能量灌注后,实现传送逻辑

  如果条件满足(探险者已能量灌注),则执行if b动作列表,将探险者瞬移到点point并发布停止命令。如果条件不满足,则执行else动作列表,提示传送失败。新建一个触发器:

  • 创建事件:单位->任意单位进入区域
  • 创建动作:基础->条件IF/THEN/ELSE,旁边的+号点击后选择基础->布尔值判断,判断条件为infusion=True
  • 创建Then语句:探险者瞬移到point,然后发布停止命令
  • 创建Else语句:选择界面->系统消息提示,参数分别选择玩家1和“传送失败”。

在这里插入图片描述

3.4 循环(创建6个次元种子)

参考《触发器2:循环》

循环是指重复执行某项动作。在Y3编辑器中,循环有三种类型:

  1. 指定次数或指定整数变量重复执行:这是最常用的循环触发方式,例如,设定NPC敲门三次,动作会重复三次后自动停止。

  2. 条件成立,重复执行:在条件满足的情况下,进行无限次的循环,直到条件不再满足。例如,如果条件是门关着就敲门,那么敲门动作会一直重复,直到门开了才会停止。

  3. 遍历数组变量循环:根据数组的索引数字,对数组中的每个单位重复执行动作。例如,有一个不同门的列表,NPC会按照顺序敲门,直到所有门都被敲过。

在这里插入图片描述

本章节将使用第一种循环实现在BOSS周围出现6个次元种子的效果。
在这里插入图片描述

  1. 地形设置
    自定义创建黑袍男单位并重命名为boss,自定义特效种子(投射物)重命名为Seed。将boss单位放置在地图上,并以boss为中心绘制一个圆形区域,重命名为alert_area
  2. 触发编写
    • 创建事件:选择单位->任意单位区域事件,设置参数为任意单位进入alert area(任意单位包括boos啊,得指定玩家才行,非boss都不行)。
    • 创建动作
      • 创建一个变量循环,Seed number变量类型为整数,从1到6做动作表示循环六次,创建六个种子。变量Seed number存储当前循环的整数数字。
      • 创建一个角度变量angle,使用函数->数学运算->角度运算,选择已创建的整数变量Seed number,乘以60,得到从60度到360度的六个平均分布的方向,确保投射物出现在boss周围。
        在这里插入图片描述
    • 创建一个点变量loc(点类型),用来记录种子出现的点。选择函数->路径-点向方向偏移,初始点为boss所在点,方向为变量angle,偏移距离设置为300
    • 添加动作为boss创建种子。选择投射物,创建投射物seed,位置为变量loc,可选参数中选择持续时间为5秒。

在这里插入图片描述

  创建次元种子投射物时,我选择了挂接模型,结果发动技能的时候连模型生物也召唤出来了。要清除挂接模型,需要鼠标右键单击,选择清空。

3.5 数组

  数组是相同数据类型的集合,数组中的每个元素都在其基本值上添加了一个索引,使我们在数组中更容易找到和访问它们。整数、单位、实体、单位名字、物品实体等变量都可以设置为数组。

  下面使用数组实现一次创建6个黑暗守卫,一起进攻探险者的游戏效果。地形上我们复用上一节的地形。

在这里插入图片描述

触发编写为:

  • 创建事件:键盘按键H按下(硬件输入->键盘-按下->H)。
  • 创建动作
    • 设置一个局部变量guards,类型为单位类型(不是单位),这里要勾选数组。分别设置1~6对应我们需要的六个黑暗守卫单位(类似语句可以直接复制粘贴,还是太不优雅了)。
    • 利用上节课学习到的循环,创建一个变量循环numGuard,从1~6循环。
    • 我们同样需要创建变量angleGuardlocGuard,来存储黑暗守卫出现的方向和位置。
    • 添加动作为boss在locGuard创建guards,数组变量guards的索引为变量numGuard

在这里插入图片描述

3.6 计时器

  计时器就好比一个沙漏,在计时结束后开始执行某项动作。我们可以用计时器来处理和时间有关的游戏逻辑。在编辑器中,计时器一共有三种:

  1. 运行单次计时器:计时器运行一次后开始执行动作。例如,倒数三秒后约翰的门就会打开。
  2. 运行循环计时器:计时器循环运行,每次运行后都会执行动作。例如,每隔一秒约翰的门就会打开一次。
  3. 运行固定次数的计时器:计时器中间停留固定时间,固定次数的计时器。例如,每隔一秒约翰的门就会打开一次,一共打开三次。

在这里插入图片描述
  下面是《触发器:计时器》中,使用计时器实现次元入侵者每隔2s在“裂缝”处爬出的效果。

在这里插入图片描述

  1. 地形设置
    • 在地图上绘制一个点(区域->点),重命名为“裂缝”。
    • 打开物体编辑器->生物,自定义次元入侵者。头顶无显示,血条样式无血条,取消勾选是否有技能资源条,取消勾选是否在小地图显示,修改攻击范围为10。
      在这里插入图片描述
  2. 触发编写
    • 创建事件:键盘按键J按下事件。
    • 创建动作
      • 选择循环计时器,每两秒循环一次。通过设置语句中的布尔值参数,我们可以选择“立即执行”或者选择“等待两秒后再执行第一次动作”。我们在这里选择true,即立即执行。
      • 动作列表中,创建你想要生成的单位,在刚才绘制的点“裂缝”处创建,面向角度跟boss一样。

在这里插入图片描述

注意:你可以选择True并立即执行动作,或者选择False在2秒后执行第一个动作。

3.7 单位组和玩家组

3.7.1 单位组

在这里插入图片描述

  单位组是由一个或多个单位组成的集合,在单位组中,我们能同时对所有的单位或选择某些单位发布命令。合理利用单位组,我们可以在游戏制作中节省大量的时间。下面是在《触发器:单位组》中,使用单位组实现主人公发送特技“次元入侵”,入侵者瞬间死伤殆尽的效果。

  1. 地形设置:在地图上放置一些自定义的次元入侵者和一名次元统领,设置他们的单位所属为中立-敌对,再将我们的主角探险者放置在地图上。
  2. 触发编写
    • 创建事件:硬件输入键盘按键按下,选择按下K键。
    • 创建动作
      • 设定一个局部变量,变量名invaders_Group,类型为单位组,我们将次元入侵者设为单位组中的指定单位类型(函数->单位组->指定类型的单位->次元入侵者)。
      • 选择单位组invaders_Group,遍历其中的单位,在动作列表中添加单位->杀死单位。第一个参数选择“获取单位组中遍历到的单位”,凶手为“探险者”。现在单位组invaders_Group中的所有单位将被一起杀死。

在这里插入图片描述

  如果对单位组中遍历到的所有单位做动作,新建动作的语句顺序不对,和单位组遍历语句同级,也就是不小心变成了在单位组外进行新建动作,此时**”获取单位组中遍历到的单位“**是不会出现的

3.7.2 玩家组

  玩家组是一个包含一个或多个玩家的集合。您可以直接对玩家组中的所有玩家执行操作。

在这里插入图片描述
  例如,下面的语句表示在点A创建一个关羽单位,并将该单位分配给玩家组BB中的每个玩家,单位面向180°角度。
在这里插入图片描述
特效默认为全玩家可见,可通过ECA控制特效可见性。

  • 通过“玩家”列表操作,实现对某个玩家的特效显示/屏蔽
  • 通过“玩家组”列表操作,实现对某个玩家组的特效显示/屏蔽,比如某玩家的所有同盟玩家,某玩家的所有敌对玩家等等

在这里插入图片描述

3.8 技能设计

技能的释放简单来说,有三个关键点:

  • 施法开始:在施法开始节点后会播放单位的施法动作,比如魔法师抬起魔杖
  • 施法引导:施法过程的开始,例如魔法师开始念咒语
  • 施法结束:咒语念完的时间点,在这个关键点之后,部分人物会有结束动作。

下面实现探险者在选中位置召唤一个巨雷,对区域内所有敌人造成伤害的效果。
在这里插入图片描述

3.8.1 地形设置
  • 在地图上放置中立-敌对的野怪单位,以及主角探险者。

  • 新建自定义技能命名为雷击,并添加说明“探险者在选中位置召唤一个巨雷,对区域内所有敌人造成伤害”。在右侧固定属性基础中保留是否转身,勾选超出范围、立即释放,其他全部取消。选择圆形指示器,设置技能范围为300。
    在这里插入图片描述

  • 新建自定义的雷电投射物,作为技能的施法效果(新建投射物->表现页签->右侧属性栏-特效配置选择闪电特效)。

  • 在物编器中给探险者添加雷电技能作为其通用技能。

在这里插入图片描述

3.8.2 触发编写

此技能有两个阶段:

  • 施法开始到施法引导阶段:播放施放技能的动作
  • 施法引导到施法结束阶段:创建施法效果的投射物表示产生技能效果,识别技能范围内的所有单位,对其中的敌对单位造成群体伤害并显示伤害数据。
    在这里插入图片描述

在工具栏-技能中,也可以编辑触发器,它会编写技能触发的具体过程。整个逻辑实现过程为:

  • 技能物编器中新建触发器,重命名为stage1
    • 创建施法开始事件:选择技能->施法开始
    • 创建施法动画播放动作:单位->动画->播放动画,参数“单位”选择“函数->技能拥有者”,参数“播放动画字符串”选择“值->attack1”(单位内置动画名称),参数“速率”设为1,即正常播放速度。从0秒播放到-1秒(表示动画播放到最后)。
  • 技能物编器中新建触发器,重命名为stage2
    • 创建施法引导事件:选择技能->施法引导
    • 创建动作1——投射物动作(施法):选择投射物->投射物-在点创建,参数“投射物类型”选择刚刚自定义技能“雷电”,参数“点”选择“函数->技能(当前技能)获取到点”,参数“所属”选技能拥有者。在可选参数中选择持续时间为3秒。
    • 创建动作2:——筛选单位组:新建动作,设置单位组->函数->筛选范围内所有单位,以技能选取点为圆心半径300内的所有单位做动作。
    • 创建动作3——对敌人造成技能伤害:新建if条件动作->如果所有条件成立
      • 创建if条件: 在if条件中选择单位->是敌对关系,两个参数分别选择“获取单位组中遍历到的单位”和“技能拥有者”。
      • 创建Then动作:选择单位->造成伤害。对遍历单元组中的单位造成500点法术伤害,伤害所属设置为技能拥有者,所属当前技能。
      • else代表同盟或者友方单位,不需要做任何动作。

在这里插入图片描述

技能默认消耗MP,而生物和建筑单位默认是没有MP的,装备了主动技也使用不了。

3.9 运动器

  运动器可以为单位或者特效等添加运动效果,比如沿着直线运动或追踪某一个单位等,是制作技能、特效等场景中十分常用的功能。

  在Y3编辑器中,运动器分为追踪运动器、曲线运动器、直线运动器、环绕运动器(对单位)、环绕运动器(对点)

在这里插入图片描述
您可以设置运动器的方向、距离、初始速度和加速度,以及一些可选参数。

在这里插入图片描述
下面是《触发器:运动器》中,使用环绕运动器(对单位),实现电球的环绕和爆炸效果。

在这里插入图片描述

  1. 触发组件设置
    • 在物编器中创建一个自定义投射物"Electric ball"(球形蓝色电流攻击)作为环绕的球体,设置缩放0.4倍大小,勾选循环播放,让特效一直播放。
    • 设置自定义投射物"Explosion"(蓝色电流冲击波,0.3倍缩放)作为结束时的爆炸效果。
    • 在主界面地图上放置一个英雄单位作为主角
  2. 触发编写
    • 新建事件:硬件输入->键盘按下A
    • 新建电球投射物:创建一个投射物变量"Electric ball",投射物类型选择预设的投射物"Electric ball",选择在点创建,创建的位置点,选择探险者所在的点。
    • 新建运动器:选择运动器->环绕运动器对单位,两个参数分别设为变量"Electric ball"和探险者,环绕半径为200,角速度为100。在可选参数中,添加环绕时间5s和环绕高度100
    • 新建投射物爆破动作:在运动完成动作列表下添加动作,在探险者所在的点创建投射物"Explosion",持续时间1s
    • 优化游戏内存:销毁投射物"Electric ball"并移除运动器(为单位移除运动器,单位选择探险者)。

在这里插入图片描述

  如果不移除Electric ball,则5s后只是停止环绕,这个投射物还在。如果写了同时移除Explosion,则这个爆炸效果不会触发,而且这里只有一个电球在环绕。

相关文章:

Y3编辑器文档4:触发器1(界面及使用简介、变量作用域、入门案例)

文章目录 一、触发器简介1.1 触发器界面1.2 ECA语句编辑及快捷键1.3 参数设置1.4 变量设置1.5 实体触发器1.6 触发器复用 二、触发器的多层结构2.1 子触发器(在游戏内对新的事件进行注册)2.2 触发器变量作用域 三、入门案例3.1 使用触发器实现瞬间移动3.…...

echarts图表自定义配置(二)——代码封装

下图是初版,火山图的代码。可以看出,里面的变量,逻辑,函数存在冗余,基本上都是改了参数,同样的get和set,去刷新图表;对于往后继续开发十几二十个图表,会很麻烦。因此需要…...

02、10个富士胶片模拟的设置

二色彩 1、色彩的加减控制全局的饱和度增减; 2、色彩效果只提升暖色系饱和度; 3、FX蓝色大幅度提升蓝色系饱和度; 4、三个参数都不改变颜色的色相。 2.1 色彩 色彩调整的是拍摄画面整体的色彩饱和程度 2.2色彩效果 调整的是画面中暖色…...

鸿蒙系统-前端0帧起手

鸿蒙系统-前端0帧起手 先search 一番 找到对应的入门文档1. 运行项目遇到问题 如下 (手动设计npm 的 registry 运行 npm config set registry https://registry.npmjs.org/)2.运行后不支持一些模拟器 配置一下(如下图,运行成功&am…...

211-基于FMC的1路1.5G ADC 1路 2.5G DAC子卡

一、板卡概述 FMC-1AD-1DA-1SYNC是我司自主研发的一款1路1G AD采集、1路2.5G DA回放的FMC、1路AD同步信号子卡。板卡采用标准FMC子卡架构,可方便地与其他FMC板卡实现高速互联,可广泛用于高频模拟信号采集等领域。 二、功能介绍 2.1 原理框图 2.2 硬件…...

获取微信用户openid

附上开发文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 开发之前,准备事项 一个已认证过的服务号|基本信息配置js域名和网站授权域名配置最后确认当前账号网页授权功能是否开通,没有开通的无法获取到用户授权开发人…...

MultiRECloudSim使用

MultiRECloudSim使用 简介 MultiRECloudSim是一个用于云计算环境下的模拟器相关工具,它主要用于模拟和评估云计算中的资源分配、任务调度等多种场景。它可能是基于CloudSim这个基础的云计算模拟器进行扩展而来,CloudSim提供了基本的云计算模拟功能,如数据中心、虚拟机、任务…...

智能设备安全-固件逆向分析

固件逆向分析实验报告-20241022 使用固件常用逆向分析工具,对提供的固件进行文件系统提取,并记录逆向分析实验过程,提交实验报告(报告要求图文并茂,对涉及到的关键步骤附截图说明)。具体任务如下&#xff1…...

【小白包会的】使用supervisor 管理docker内多进程

使用supervisor 管理docker内多进程 一般情况下,一个docker是仅仅运行一个服务的 但是有的情况中,希望一个docker中运行多个进程,运行多个服务,也就是一个docker容器执行多个服务。 调研了一下,发现可以通过**super…...

使用navicat新旧版本,连接PostgreSQL高版本报错问题图文解决办法

使用navicat新旧版本,连接PostgreSQL高版本报错问题图文解决办法 一、问题现象:二、出现原因三、解决方法:1、升级Navicat版本:2、使用低版本的postgreSQL:3、修改Navicat的dll二进制文件:navicat版本15nav…...

IDEA 未启用lombok插件的Bug

项目中maven已引用了lombok依赖,之前运行没有问题的,但有时启动会提示: java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy8 Lombok support…...

认识GO--gRPC的metadata

参考: 写给go开发者的gRPC教程-metadata-CSDN博客https://blog.csdn.net/kevin_tech/article/details/129395177?ops_request_misc%257B%2522request%255Fid%2522%253A%25221f2f2e26f48c755c33344ccb171a49fc%2522%252C%2522scm%2522%253A%252220140713.130102334…...

2024年安徽省职业院校技能大赛信息安全管理与评估

一、赛项名称 赛项名称:信息安全管理与评估 英文名称:Information Security Management and Evaluation 赛项组别:高职组 赛项归属:电子信息大类 二、竞赛目标 通过赛项检验参赛选手熟悉信息安全行业标准规范和信息 安全测试员新职…...

Perl 引用

Perl 引用 Perl,作为一种灵活而强大的编程语言,广泛用于系统管理、网络编程、GUI开发等领域。在Perl编程中,引用(References)是一个核心概念,它允许变量引用其他数据,从而创建复杂的数据结构&a…...

RT-Thread启动过程 :从汇编开始的启动流程

这个系列参考了《嵌入式实时操作系统RT-Thread设计与实现》,会详细介绍RT-Thread的启动流程,即是如何从零开始在开发板上运行起一个RTOS内核的。本文将会以 ch32v307VCT6 开发板为例展开进行详细介绍。主要包括:startup.S、初始化与系统相关的…...

Scala—“==“和“equals“用法(附与Java对比)

Scala 字符串比较—""和"equals"用法 Scala 的 在 Scala 中, 是一个方法调用,实际上等价于调用 equals 方法。不仅适用于字符串,还可以用于任何类型,并且自动处理 null。 Demo: Java 的 在 J…...

$route和$router的区别

在 Vue.js 中,$route 和 $router 都是 Vue Router 提供的对象,但它们有不同的用途和功能。 1. $router $router 是 Vue Router 实例的引用,它允许你通过 JavaScript 进行路由的控制和导航。你可以通过 $router 来执行路由的操作&#xff0c…...

[工具升级问题] 钉钉(linux版)升级带来的小麻烦

本文由Markdown语法编辑器编辑完成。 1. 背景: 今日钉钉又发布了新的升级版本。由于我工作时使用的是Ubuntu 20.04版本,收到的升级推送信息是,可以升级到最新的7.6.25-Release版本。根据钉钉官方给出的历次更新版说明,这个新的版本&#xf…...

Leetcode经典题13--接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 输入输出示例 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1…...

yarn修改缓存位置

查看缓存位置 以下三个命令分别为:bin是yarn存储命令的二进制文件,global存储全局node_modules ,cache存储用下下载缓存,查看本机目前的目录: 查看bin目录命令:yarn global bin 查看global目录命令&…...

OpenHarmony-3.HDF input子系统(5)

HDF input 子系统OpenHarmony-4.0-Release 1.Input 概述 输入设备是用户与计算机系统进行人机交互的主要装置之一,是用户与计算机或者其他设备通信的桥梁。常见的输入设备有键盘、鼠标、游戏杆、触摸屏等。本文档将介绍基于 HDF_Input 模型的触摸屏器件 IC 为 GT91…...

RabbitMQ 消息持久化/镜像队列/lazy对时延影响

测试背景: 不同条件下RabbitMQ不同队列类型的生产时延测试: 测试环境: 机型:rabbimtq.2u4g.cluster 背景流量:1000 TPS 测试条件: 消息大小 4k,消息条数为1000条,时延取值为平均…...

【深度学习】深刻理解Swin Transformer

Swin Transformer 是一种基于 Transformer 的视觉模型,由 Microsoft 研究团队提出,旨在解决传统 Transformer 模型在计算机视觉任务中的高计算复杂度问题。其全称是 Shifted Window Transformer,通过引入分层架构和滑动窗口机制,S…...

[2015~2024]SmartMediaKit音视频直播技术演进之路

技术背景 2015年,因应急指挥项目需求,我们实现了RTMP推送音视频采集推送(采集摄像头和麦克风数据)模块,在我们做好了RTMP推送模块后,苦于没有一个满足我们毫秒级延迟诉求的RTMP播放器,于是第一…...

redis 使用Lettuce 当redis挂掉重启之后 网络是怎么重新连接

Lettuce是一个高性能的Java Redis客户端,支持同步、异步和反应式编程模式 Lettuce的核心功能包括: ‌高性能‌:通过使用Netty作为底层网络通信框架,实现了非阻塞IO,提高了性能。‌丰富的API‌:提供了丰富…...

【IntelliJ IDEA 集成工具】TalkX - AI编程助手

前言 在数字化时代,技术的迅猛发展给软件开发者带来了更多的挑战和机遇。为了提高技术开发群体在繁多项目中的编码效率和质量,他们需要一个强大而专业的工具来辅助开发过程,而正是为了满足这一需求,TalkX 应运而生。 一、概述 1…...

二叉搜索树Ⅲ【东北大学oj数据结构8-3】C++

二叉搜索树 III B:在二叉搜索树II中加入delete指令,创建程序对二叉搜索树T执行如下指令。 插入 k:将key k 插入到 T 中。 find k:报告T中是否存在key k。 delete k:删除key为 k 的节点。 打印:使用中序树遍…...

【面试笔记】CPU 缓存机制

CPU 缓存机制 1. CPU Cache 与 MMU1.1 MMU 是什么?TLB 又是什么?他们是怎么工作的?2.2 简述 Cache 与 MMU 的协作关系?2.3 简述 Cache 与 MMU 的协作工作流程? 2. CPU 多层次缓存2.1 什么是 CPU 的多层次缓存结构&…...

MySQL基础函数使用

目录 简介 1. 单行函数 1.1 字符串函数 1.2 日期函数 1.3 数值函数 1.4 转换函数 1.5 其他函数 2. 多行函数 示例: 3. 数据分组 示例: 4. DQL单表关键字执行顺序 示例: 5. 多表查询 示例: 6. 表与表的外连接 示例…...

解决docker环境下aspose-words转换word成pdf后乱码问题

描述 环境&#xff1a;docker 部署工具&#xff1a;Jenkins 需求&#xff1a;本地上传的word文档需要转换成pdf 问题&#xff1a;转换之后的pdf文档出现小框框&#xff08;乱码&#xff09; 转换成PDF的操作 pom&#xff1a; <dependency><groupId>org.apach…...