进入官网
教学视频

学习点命令,让式神移动

学习连续点命令

学习创建中立单位,制作敌人

学习建造防御塔抵御敌人御敌

学习使用刷兵、连续点命令

学习用循环来创建单位,在场景中洒满“豆子”

学习让单位实现“吃豆子”并获得钱的效果

学习给玩家、单位增加属性

学习让敌方死亡后扣分,并在一段时间后复活

学习显示计分板,并在计分板刷新对应的数据

学习制作抽卡功能-数组变量、随机、运行触发器

学习运行触发器、点击单位事件

学习if判断、局部变量和循环

学习“画格子”、嵌套型循环

学习使用计时器、简要信息面板

学习自定义buff、式神技能diy

学习定义物品、单位死亡掉落

学习主动技能的制作

学习蓄力技能的制作

学习普攻技能的制作

学习被动技能的制作

实现冲锋、击飞与多等级技能

学习装备被动技能的制作

新手引导

作者: 2021-09-29

PC版安装流程进入网址:http://moba.163.com/2019/wf/bjq/根据电脑选择要下载的安装包。对下载下来的文件进行解压,解压后直接运行exe文件即可,OnmyojiArena-64-2.8.0-1.7z这个文件无需解压Uni编辑器占用空间约7G,请提前选择有足够空间的磁盘位置。

安装指引

一、PC版安装流程

进入网址:http://moba.163.com/2019/wf/bjq/

根据电脑选择要下载的安装包。

对下载下来的文件进行解压,解压后直接运行exe文件即可,OnmyojiArena-64-2.8.0-1.7z这个文件无需解压

图片2

Uni编辑器占用空间约7G,请提前选择有足够空间的磁盘位置。

图片1

确认路径后,点击“确认”进入安装流程。

二、多开说明

Uni编辑器支持同时打开多个客户端登陆不同的账号。建议复制多份安装好的Uni编辑器到不同的路径下,避免本地资源在编辑时出现冲突。

三、卸载流程

如果需要卸载编辑器,推荐使用安装目录下的卸载程序进行操作。这是因为卸载程序会将Document文件夹保留下来,该文件夹保留着用户的本地地图和自定义素材,在同一路径下再次安装编辑器,则可以将本地地图找回

四、移动版安装

进入决战平安京,打开【娱乐】模式,点击左下角的【Uni编辑器】。

如果是首次使用UNI编辑器,则需要额外下载资源包

五、特别注意

在运行PC版编辑器之前,请先确保PC上包含运行游戏必备的运行环境库(VC、DX、Net.Framework等)

在登录PC版的Uni时需要先在手机版登录一次Uni。

由于编辑器在不断更新迭代,所以最好每隔一段时间更新一次,以便体验到最新的功能。

启动教程

一、PC版启动Uni编辑器

打开Uni编辑器后,您将会看到如图扫码界面:

请用《决战!平安京》游戏内的扫码功能,扫二维码进行PC版Uni编辑器的登陆:

决战!平安京:

在《决战!平安京》中可使用以下两种扫码方式:

1.1、好友二维码

1、使用手机,从应用商店搜索“决战!平安京”进行下载;

2、登陆《决战!平安京》;

3、点击左上角您的头像,进入个人资料页面;

4、点击“二维码”,进入您的二维码界面;

5、点击“扫一扫添加好友”,并扫Uni编辑器的二维码;

1.2、Uni对战平台扫码

1、 使用手机,从应用商店搜索“决战!平安京”进行下载;

2、使用网易通行证账号登陆《决战!平安京》;

3、打开Uni对战平台,并点击左下角的“登陆PC端”进行扫码登陆;

二、移动版启动Uni编辑器

1、启动《决战!平安京》你会看到下面的界面,点击【娱乐】。

2、点击左下角的Uni编辑器

3、点击右下角的成为作者开始进行创作。

编辑模式

一、登陆大厅

欢迎来到Uni编辑器,本文档仅对Uni编辑器的功能做初步介绍。

若对于具体的功能有任何疑问,请参考触发器、剧情模式或自定义的对应说明文档,内有更为详细的介绍。另外,随时欢迎您联系Uni编辑器的官方反馈人员!

若您已经在《决战!平安京》内拥有角色,扫码后将直接用对应的角色登陆;若您是第一次登陆大厅,需要创建一个新的角色。

填写姓名、创建角色后,您将看到如图的大厅界面。

【设置】:内含《决战!平安京》的手游相关设置及PC版Uni编辑器专属的快捷键目录;

【创作】:可在这里使用新建作品、提审、申请作者认证和云盘功能;另外您也可以在这里编辑个人签名;

【资源管理】:可在这里管理本地的资源,包括图片、语音、共享场地、模型、界面模板、音乐;

【分享大厅】:可在这里通过输入分享名或分享编号查找他人以及自己分享的游戏作品;

二、新建作品

点击“+”新建一个作品吧!首先会弹出一个游戏开发者合作协议,在阅读后,如果同意协议,则会弹出以下界面,您可以选择剧情模式或游戏模式,当然,在接下来的选择中也可以重新选择作品类型。

【剧情模式】和【游戏模式】将会有不一样的选项设置;

【剧情模式】:可以在填写作品名字后,选择剧情动画模板(带有已编辑好的电影事件)或自定义创建、使用阴阳师场景;

【游戏模式】:可以在这里填写作品名字,选择游戏模板(带有已编辑好的触发器)或查看新手教程;

三、新手教程

点击游戏模式-右下角的教程可进入游戏模式的教程界面

新手教程包含塔防、吃豆大作战和Uni战棋三个章节,点击对应章节可开始学习

观看一段剧情后,需要使用游戏触发器解决一个需求,成功实现需求则可过关

四、游戏模式的编辑界面

游戏模式的编辑界面包含以下三部分:

1、场景编辑

2、触发器逻辑编写

3、自定义属性、运行、测试、游戏设置

剧情模式的编辑界面包含以下三部分:

1、场景编辑器

2、时间轴电影事件编写

3、运行、测试、游戏设置

五、退出地图编辑

1、在退出地图编辑器前,先要点击主界面的【保存】按钮

2、然后点击主界面的【设置】按钮,弹出以下界面

3、点击【退出编辑】

六、云盘存储

当我们的作品在没有发布前,都是存在本地的,所以如果当我们换了一台电脑或手机进行登陆的时候,是看不到我们的作品的,这种情况由两个解决办法

1、将作品分享至分享大厅

2、将作品上传云盘

在大厅界面中点击【创作】,找到我们要上传到云盘的作品,点击【上传云盘】如下图

点击【上传云盘】后弹出下面的界面,点击【上传】

上传完毕后,我们可以在大厅界面的【创作】-【云盘存储】中找到我们刚刚上传至云盘的作品,如下图

这个时候,就算更换设备,也可以在云盘存储中找到我们刚刚上传的作品,点击【下载】即可将作品下载至本地,然后继续编辑

正常上传至云盘的作品的有效期为30天

七、资源管理

资源管理的作用是帮助我们管理所有从本地上传的资源,包括图片、语音、共享场景、模型、界面模板。上传的所有资源,作品与作品之间是可以相互共用的

在大厅界面,点击【资源管理】会显示如下界面

7.1、图片

【1】:点击后在“默认”页签下新增一个页签,我们可以把它理解成一个新建文件夹,在这个文件夹里放着我们新增的图片

【2】:点击后便可上传本地的图片资源

【3】:可以批量将图片移动至图片下的其他分组中

【4】:图片的排序方式

【5】:符合筛序以及排序的图片资源

【6】:可以通过分类清理未引用的资源

7.2、语音

【1】点击后可增加语音资源,编辑器支持录制语音(30秒)、文字转语音(50字)、上传语音(60秒的m4a文件)

【2】是地图总大小,未进行作者认证的地图总大小不可超过50MB

【3】按照全部、未引用、作品名对语音进行筛选

【4】筛选后的语音资源

7.3、共享场景

共享场景可以帮助我们将摆好的装饰以及它们之间的位置存储起来,方便我们重复使用,起到快速搭建地图的效果

1、点击“+”新建共享场景,弹出以下界面

2、选择共享场景的大小,这里可以选择3*3、10*10、20*20、自定义大小

3、点击【确认创建】后就可在场景中摆放装饰了,这里只能摆装饰,不能摆放单位,如下图

4、点击主界面的【保存】后,便可点击【设置】退出编辑了

5、为共享场景改名和更换封面可以帮助我们在资源管理中更好的找到它们

6、打开任意一张作品地图,在【装饰】-【共享场景】中便可找到我们刚刚创建的内容,具体如下图

7.4、模型

编辑器支持外部导入的模型文件,如果想在作品中使用自己的模型,那么我们要先将这个模型上传

点击“+”新建模型,弹出如下界面

点击【选择模型文件夹】选择要上传的模型资源,然后将“头像设置”配置好后,点击【新增】即可,这里主要,上传的模型资源要符合下面的上传规范才能正常上传

模型上传规范:https://moba.netease.com/thread-20610-1-1.html

7.5、界面模板

界面模板中【我的模板】会罗列出所有共享界面模板,具体如下,我们可以对这些模型进行重命名、添加备注、删除模板

测试与提审

一、本地测试

制作了一个游戏/剧情作品后,您可以随时点击右上角的“运行”来查看它的效果

如图为运行中的界面示意:

【1】如需结束运行,您可点击如图小齿轮,打开游戏中的设置界面,并点击“退出游戏”;退出游戏后,您将直接回到编辑模式;

【2】运行过程中,有一个Debug界面,可提示您在运行中的报错;当您返回编辑模式后,依然能在Debug面板中看到上一次运行的报错,并直接跳转到对应的触发器节点;

二、联机测试

运行模式默认以玩家1的身份运行,如您需要测试多人游戏,请退出编辑模式,并在作品详情右侧点击“联机测试”

注意当游戏中只有一个队伍或只有一个玩家1时,【联机测试】的按钮将不会出现

进入开房测试后,您可以点击选择任意玩家位置(如玩家2、玩家3),并点击“开始游戏”,以对应的玩家身份运行游戏。

开房测试相当于私人房间,可以邀请好友一起来测试您做的游戏,记得要在《决战!平安京》内先添加一些好友哦!

三、提审

点击作品详情的【提审发布】可将作品提交到服务器。待运营人员过审后,作品的状态将会变成“已过审

为你的作品配置投稿分区,这里要注意,作品在过审后将无法修改分区。进行作者认证后每日可提审次数增加至10次

分享大厅

一、分享地图

1.1、如何分享自己的游戏

在大厅界面中点击【分享】页签,进入该界面,点击“+”号进入选择作品界面

在作品列表中选择要分享的作品

如果作品不符合分享要求,可根据提示补全配置,如果你希望自己的作品只有部分人可以下载,可以设置分享密码,这样只有拥有分享密码的人才可以下载

提交审核后待官方工作人员检验通过后,便可在分享大厅中找到了

1.2、如何下载他人的分享作品

在大厅界面中点击【分享大厅】页签,进入如下界面

每个作品左上角的次数都代表下载次数,我们可以通过下载次数或者时间对作品进行重新排序

也可以在右上角的输入栏中输入作品的名字、分享编号、话题标签进行作品查找

在找到要下载的作品后,点击作品封面便会弹出该作品的介绍、更新记录、作品信息以及下载按钮,如下图

下载完成后我们就可以在【创作】-【本地】页签中找到下好的作品了,如下图

提审后的状态:

过审后的状态:

关卡编辑

作者: 2021-10-12

地表与地形一、预制地图与绘制地表的区别在新建游戏中,地表主题编辑器提供了预制地表和绘制地表两种。预设地表通过预选的地表主题和随机生成的装饰物来生成整张地图。

地表与地形

一、预制地图与绘制地表的区别

在新建游戏中,地表主题编辑器提供了预制地表和绘制地表两种。

预设地表通过预选的地表主题和随机生成的装饰物来生成整张地图。预选地表提供了【浅草】、【初雪】、【黄砂】、【青石】共四种。

02

也可以在主界面的【设置】中重新更换地表主题。

绘制地表中地表的修改需要进入编辑后进行。编辑器总共提供了16种,也可通过新增添加属于自己的地表。建议使用大小512*512的四方连续图效果最好。

图片1

在绘制地表中可以通过笔刷将不同主题的地表自然的拼接在一起。具体方法如下:

1、点击【地形】,选择【地表】

2、在地表1中选择要拼接的地表样式

3、点击地表1使用笔刷在要绘制的地表进行涂抹。

二、绘制地表纹理

1、在【地形】中选择【纹理】

2、选择想要的纹理笔刷,编辑器总共提供了34种笔刷。

3、笔刷的大小可通过右侧进行修改,共有【小】、【中】、【大】三种笔刷。点击【绘制完成】将纹理保留。

4、绘制后,如果不满意,可以通过【清理纹理】将绘制的纹理擦除。

另外触发器中也提供了实时修改地表纹理的动作

在区域这个动作类型下有一个“区域内使用纹理”的触发器动作可以在游戏运行的过程中修改地表纹理

三、修改地表高度

在预制地表上绘制地形高度是固定的,棱角较为明显,操作简单。而绘制地表的高度变化更为自然,表现力更强。

1、点击【地形】,选择【高度】

2、选择要对地图高度的处理方式,这里分别有【抬高】、【降低】、【平整】、【斜坡】、【浅水】、【深水】

3、将想要的地势高度在地表中绘制出来,以下是在预制地表中,不同高度笔刷绘制出来的效果

在绘制地表中,地形高度笔刷分别有【抬高】、【降低】、【平整】、【平滑】

笔刷的大小、硬度、影响力可以通过右侧属性面板调节,笔刷中心部分硬度最大,越往边缘扩散,硬度越小

以下是绘制地表中不同高度笔刷绘制的效果

四、修改地图大小

1、新建好的地图任然可以调整其大小,点击主界面的【设置】按钮,找到【地图与镜头】,在“地图设置”找到“地图大小”,点击【修改】按钮

2、通过拖动滑块来修改地图大小

放置场景实体

一、场景装饰摆放

编辑器内置了很多装饰,并将它们分为【树】、【神社】、【围墙】、【庭院】......

我们可以从这些分类中将自己想要的装饰物,用拖拽的方式将其放置于场景中。在场景中点击这个装饰,在右侧属性中可以对它的名称、尺寸、朝向进行配置。

点击主界面的【设置】按钮,找到【编辑器设置】中的“显示设置”,可以看到在场景中的“摆放上限”

编辑器支持多选单位并进行批量复制或移动,下面我们来看下如果进行多选操作。

在场景中点击一个单位,点击【多选】按钮,然后点击场景中需要多选的单位即可,或者点击【选择列表】,将需要多选的单位进行勾选

多选单位后的对齐方式分别是:【聚集】、【左右居中】、【上下居中】、【水平分布】、【垂直分布】

【聚集】:多选的所有单位全部聚集于一点

【左右居中】:多选的所有单位全部左右对齐,形成一排

【上下居中】:多选的所有单位全部上下对齐,形成一列

【水平分布】:多选的所有单位全部水平分布,保持水平方向间距一致

【垂直分布】:多选的所有单位全部垂直分布,保持垂直方向间距一致

通过右侧属性面板可以调整整体多选单位的所有朝向

二、战斗单位的摆放

战斗单位的摆放同装饰摆放方法一致,点击【战斗单位】,编辑器总共将战斗单位分为了以下几类【式神】、【建筑】、【士兵】、【野怪】、【物品】、【自定义】

将需要的单位拖拽至场景中即可放置成功,点击场景中的战斗单位可设置单位属性

在单位的属性面板中,可设置战斗单位的尺寸、朝向、归属于哪个玩家,AI逻辑,是否显示队伍颜色,是否可操控以及战斗单位游戏名及血条

【所属玩家】:只有指定玩家才能获得该单位的控制权

【AI逻辑】:选择该单位没有成为主控单位时的ai状态,可选的ai状态有,没有ai;主动攻击ai;被动攻击ai;不会移动的ai

没有ai:不会主动攻击,除非发布攻击相关的触发器命令

主动攻击ai:主动攻击攻击范围内的敌方单位

被动攻击ai:收到攻击时才会发起攻击

不会移动的ai:主动攻击攻击范围内的敌方单位、但不会移动、也不响应移动相关的触发器命令

【显示队伍颜色】:战斗单位的模型颜色会和队伍颜色一致,具体表现如下

【可操控】:勾选后,该战斗单位的所属玩家拥有其操控权,如果同一个玩家拥有多个可操控的战斗单位,则游戏开始后,玩家可以在多个主控单位中进行来回切换,效果如下

【设置游戏名及血条】

其中可配置的有:是否显示指定命名、是否显示控制玩家名称、是否显示等级及血条,具体效果可在配置时可在上方展示栏中显示

三、单位与单位类型的区别

【单位】:单位指的是一个实例化的数据对象,每一个单位都是独立的,就好比每一个人都是不一样的

【单位类型】:指的是一类单位,它是抽象的,并不特指某一个单位,就好比你我都是中国人,而中国人就是一个单位类型

场景表现效果

一、修改关卡的美术表现

在编辑器中,提供了修改整个关卡美术表现的功能,点击主界面的【设置按钮】,打开配置界面后,找到【画面与音乐按钮】,修改“画面设置”下的配置项来修改关卡美术表现

天空默认使用晴朗的天空盒,并且提供了【乌云】、【星空】、【晚霞】、【晴朗】四种类型的天空盒

地图边缘的配置项提供了多种地形边缘效果,不同的边缘不会影响地图的实际大小

天气默认是不使用,也可以切换为下雨或下雪

以上效果切换以后,即可在编辑的状态下实时看到效果,并且在游戏运行的过程中也会一直保持所配置的效果

另外触发器中也提供了实时修改这些场景效果的动作

在游戏这个动作类型下有一个“改变天气”的触发器动作可以在游戏运行的过程中修改天气

在游戏这个动作类型下有一个“改变天空”的触发器动作可以在游戏运行的过程中修改天空盒

二、修改地图大小与镜头

在编辑器中,提供了修改修改地图大小与镜头的功能,点击主界面的【设置按钮】,打开配置界面后,找到【地图与镜头】

地图大小中宽度与长度的单位是格,一格等于20码,比如长*宽均为15格的地图,在游戏中实际的大小为300码*300码。最大只能创建50格*50格的地图。

在创建地图的时候,可以选择地图的初始大小,如果对地图大小不满意,可以在“地图大小”的配置项中进行修改

修改地图大小时,既可以扩大地图范围也可以缩小地图范围,但是需要注意的是,地图中被修改过高度的地形无法缩小

另外,绘制地图有特殊规定,其长度与宽度必须是5格的倍数。预制地图则无此限制

在默认镜头设置中可以修改进入游戏时摄像头的角度与距离,从而实现俯视角、越背视角以及类似第一人称视角的效果

在触发器中,提供了修改镜头的动作,可以在游戏运行的过程中实时切换不同的镜头

在切换镜头之前,需要在主界面添加了不同的镜头后,才能够选择得到,创建并修改镜头的方法见下图

触发器使用说明

作者: 2021-10-12

自定义动作与函数一、函数说明在触发器中,可以使用官方给出的动作来实现效果,对于那些官方没有提供的动作,则可以通过自定义动作以及自定义函数来实现自定义动作,顾名思义,是用户自己实现的触发器动作。而函数,我们在使用触发器时,早有接触,在配置触发器的参数的时候,常会借助函数来实现效果。

创建触发器

触发器用于管理游戏规则、游戏逻辑、游戏流程等等,可以对地图副本的游戏玩法进行高度的自定义。每个地图包含都可以包含任意数量的触发器。

进入Uni编辑器后,只需按顺序点击下图所示按钮,即可创建触发器。

1

2

一个触发器通常由3部分组成:事件、条件、动作。

事件:确定触发器在什么时候执行。更多信息请参考『事件』。

条件:可以选择是否添加触发器执行条件,只有条件成立时才会在事件触发时执行触发器动作。更多信息请参考『条件』。

动作:当事件触发、条件成立时会执行的动作列表。更多信息请参考『动作』。

一、事件

事件会确定当前触发器会在什么时候执行。通常情况下,都需要为触发器添加事件,才能保证触发器的执行。

例如上图所示事件,表示当前触发器会在游戏时间过去10.0秒时执行。

多数情况下,一个触发器只有一个事件。当为触发器添加多个事件时,任意一个事件触发都会执行触发器。

关于事件,有2个比较重要的概念:事件注册、触发器副本。

1. 事件注册

在游戏运行的过程中,事件必须注册后才会生效,而且事件只会注册一次。

事件在游戏运行的过程中都是在创建触发器时注册的。而我们目前所讨论到的触发器都是在游戏初始化时创建的。因此我们目前所讨论到的事件都是在游戏初始化时注册的。使用这种事件可以理解为“静态触发器”。关于“动态触发器”,请参考『进阶功能-动态创建触发器』。

2. 触发器副本

在游戏运行的过程中,当事件触发时,就会创建一个触发器副本,每个触发器副本都会评估条件并独立地执行。

例如上图所示事件,当同时有2个单位unit_0和unit_1进入地图区域时,这2个单位都会触发这个事件,因此就会创建2个独立的触发器副本,这2个副本分别对应unit_0和unit_1的触发器副本,它们是独立执行的,彼此之间不会相互影响。

二、条件

为触发器添加了事件后,可以选择为触发器添加一个或多个条件,也可以选择不添加任何条件。事件触发后,只有所有条件都成立时,触发器才会执行动作列表。

若触发器中没有添加条件,则动作列表会在事件触发后立即执行。

若需要任意一条条件成立时执行动作,则需要将这些条件添加到『或』中。

例如上图所示条件表示:当全地图内单位的数量大于5且游戏逝去的时间小于10.0秒,或全地图内单位的数量大于5且游戏逝去的时间大于10.0秒时,条件成立。

三、动作

当事件触发、条件成立时,触发器就会从上到下依次执行所有动作。

大多数动作都是立即执行且立即完成的。动作完成后,才会执行下一条动作。因此动作列表在执行过程中,不断地执行:『执行、完成、执行、完成、执行….』这个过程。

部分动作执行后会停滞,直到触发某些特殊事件时才会完成并执行下一条动作,这些动作称为『停滞型动作』。关于停滞型动作的更多信息请参考『进阶功能-停滞型动作』。

关于动作,有2种比较特殊的动作:判断动作和循环动作。

1. 判断动作

判断动作会在动作执行的过程中判断该动作下的条件。若条件成立,则依次执行『则运行下列动作』中的动作;若条件不成立,则依次执行『否则运行下列动作』中的动作。

例如上图所示动作:若游戏逝去的时间大于10.0秒,则弹出Debug消息『111』,否则弹出Debug消息『222』。

若不添加任何条件,则执行『则运行下列动作』中的动作。

2. 循环动作

循环是一个在触发器编辑过程中只出现一次,但在游戏运行的过程中可能会连续执行多次的动作列表。循环中的动作列表会执行特定的次数,其执行顺序也是从上到下依次执行,执行到最后一个动作时,若仍未达到设定的执行次数,则会继续从动作列表中的第一个动作开始执行。

例如上图所示动作:会为玩家1弹出10条内容为『111』的系统提示。

需要注意,在使用循环的过程中,请尽量避免高频执行会影响客户端显示的动作(例如循环1000万次显示图片),避免在游戏运行的过程中造成客户端闪退的现象。

四、参数

参数是事件、条件、动作中的输入值,是一种信息,或如何获取信息的指令。

参数的类型非常多,有整数、浮点数、字符串、单位、玩家、区域、点、物品等等。

例如上图所示的事件中,『10.0』就是为这个事件输入的一个参数,它是一个浮点数参数,其值为10.0。这个『10.0』就是一种信息,通过编辑者的直接输入而获取。

有的时候,参数并不直接输入信息,而是输入信息的获取指令(使用变量或函数)。

例如上图所示的条件中,『((全地图 内所有单位)中单位的数量)』是一个参数,它是一种信息的获取指令,是一个函数,一个整数参数,其值为全地图区域中单位的数量。『(游戏逝去的时间)』也是一个函数,一个浮点数参数,其值为游戏已经逝去的时间。

变量也是一种信息的获取指令,更多信息参考『变量』。

五、变量

变量用于储存参数的值。绝大多数参数的值都能以变量的形式储存。

Uni编辑器中有4种类型的变量:全局变量、数组变量、局部变量、自定义属性。

1. 全局变量

全局变量是一种在整个游戏运行的过程中都能被获取或修改的变量。一个独立的全局变量,在游戏运行的过程中是唯一的,其值被修改后,再次获取其值时,获取到的是被修改后的值。

使用全局变量前,需要先声明全局变量。只需在触发器界面中点击右下角的『X』,然后在二级界面中点击『新建』,再在变量分类中勾选『全局变量』,并配置相关变量信息,即可声明全局变量。

声明全局变量后,可以对全局变量实现以下2种操作。

赋值:使用『变量-变量赋值』动作即可对全局变量进行赋值、修改。

读取:在配置参数时选择『读取全局变量』,即可读取全局变量的值。

需要注意的是,在游戏运行的过程中,全局变量是在游戏初始化、创建触发器之前就已经创建了。也就是说,全局变量的创建和初始值的赋值比事件注册还要早,因此可以在事件中引用全局变量。尽管如此仍然需要注意,由于事件只注册一次,即使在游戏过程中改变了全局变量的值,也不会改变事件。如果确实需要改变事件,则需要动态注册新的事件,详情请参考『进阶功能-动态创建触发器』。

2. 数组变量

数组变量是多个同类型全局变量的有序列表。

使用数组变量前,需要先声明数组变量。流程与声明全局变量基本一致,但需要在变量分类中勾选『数组变量』。数组变量的创建与赋值时机与全局变量相同。

关于数组的初始值:在游戏初始化进行数组变量的创建与赋值时,会为数组的每一个位置的值都设为初始值。

数组可以实现以下8种操作。

赋值:使用『变量-数组变量赋值』动作即可对数组变量进行赋值、修改。

读取:在配置参数时选择『读取数组变量』,即可读取数组变量的值。

添加对象:使用『变量-数组添加对象』动作即可在数组的末尾添加一个对象,并对该对象赋值,使用后数组的大小会增加1。

移除对象:使用『变量-数组移除对象』动作即可移除数组中特定下标(特定位置)的对象,同时原本在该下标之后的对象会保持原来的顺序整体前移1个位置,使用后数组的大小会减少1。

插入对象:使用『变量-数组插入对象』动作即可在数组的特定下标中插入一个对象,并对该对象赋值,同时原本处于该下标位置的对象以及该下标之后的对象会保持原来的顺序整体后移1个位置,使用后数组的大小会增加1。

数组翻转:使用『变量-数组翻转』动作即可将数组原地翻转。

数组排序:使用『变量-数组排序』动作即可根据数组中储存的值的大小进行排序,但需要数组中所储存的是数字时才能实现这种操作。

随机重排数组:使用『随机-随机重排数组』动作即可将数组中储存的值随机打乱顺序,其中数组中的每个值在数组中每个位置的概率是相等的。

关于数组,还有2个需要注意的点:

1) 在Uni编辑器中,数组的下标从1开始;

2) 声明数组变量时,数组的大小不能大于128,如果需要更大的数组,需要进行『添加对象』、『插入对象』等操作;

3. 局部变量

局部变量是一种只在当前触发器执行过程中可以被获取或修改的变量。

使用局部变量前,需要先声明局部变量。使用『变量-设置局部变量』即可声明局部变量。

局部变量可以实现以下2种操作。

赋值:使用『变量-设置局部变量』即可对局部变量进行赋值、修改。

读取:在配置参数时选择『读取局部变量』,即可读取局部变量的值。

关于局部变量,有2个比较重要的概念:局部变量独立于各个触发器副本、局部变量在创建触发器时会进行快照。

1) 局部变量独立于各个触发器副本

在『事件』中有提到,在游戏运行的过程中,当事件触发时,就会创建一个触发器副本,每个触发器副本都会评估条件并独立地执行。而局部变量在每个触发器副本中是彼此独立的,每个触发器副本中的同名局部变量并不会互相影响。

2) 局部变量在创建触发器时会进行快照

在创建触发器时,若使用已经声明过的局部变量,会对局部变量的值进行快照。详情请参考『进阶功能-动态创建触发器』。

4. 自定义属性

自定义属性是一种在获取信息时,除了变量名,还需要一个key的全局变量。自定义属性实现了一种key-value的映射关系。

数组变量可以理解成一种特殊的自定义属性,因为我们在获取数组变量的值时,除了变量名,还需要一个下标,这个下标可以理解成一个类型为整数的key。而在自定义属性中,key除了可以是整数,也可以是浮点数、字符串、单位等等。

使用自定义属性前,需要先声明自定义属性。使用『变量-设置自定义属性』即可声明自定义属性。在这个动作中,第2个参数就是key,第5个参数就是value,第3个参数就是变量名。

自定义属性可以实现以下2种操作。

赋值:使用『变量-设置自定义属性』即可对自定义属性进行赋值、修改。

读取:在配置参数时选择『读取自定义属性』,即可读取自定义属性的值。

进阶功能

一、 动态创建触发器

在游戏运行的过程中,通常情况下触发器都是在地图初始化时创建的,因此事件也通常是在地图初始化时注册的。然而有时会遇到需要在非游戏初始化时注册事件的情况。例如在游戏运行的过程中创建了一个单位,并为这个单位注册一个『任意单位进入其范围』的监听事件。在这种情况下,就需要用到动态创建触发器的功能。

使用『触发器-创建触发器』动作,即可动态创建触发器。

在动态创建触发器的过程中,需要注意使用不同类型的变量的区别。动态创建触发器的过程中使用全局型变量(全局变量、数组变量、自定义属性),使用了这些变量的参数所使用的仍然是这个变量的引用(即信息的获取指令),而不是变量的值;创建过程中使用局部变量,则会进行快照,使用了局部变量的参数所使用的是变量的值,而不是变量的引用。

要理解这个区别,可以看下面的这个例子。

如上图所示创建触发器,所创建的其实是一个这样的触发器:

可以看到,在创建触发器时,由于『unit』是一个全局变量,在使用了『unit』的事件和动作中保存的仍然是这个变量的引用。因此,在注册事件时,『unit』使用的是注册事件时『unit』的值,即『犬神_1』。而事件触发时,播放死亡动作的是『unit』,至于到底是哪个单位播放死亡,取决于事件触发时『unit』的值。

然而,另一种情况下,如果创建触发器时使用的是局部变量:

如上图所示创建触发器,所创建的其实是一个这样的触发器:

可以看到,在创建触发器时,由于『unit』是一个局部变量,在使用了『unit』的事件和动作中保存的是这个变量的值。因此,在注册事件时,直接把『犬神_1』作为参数用于注册事件。而事件触发时,播放死亡动作的也一直是这个『犬神_1』。

综上,在动态创建触发器时,需要根据具体需求合理运用不同类型的变量。

二、计时器

计时器是一种特殊的触发器,其事件为计时器到期事件。计时器到期后,就会和触发器一样,从上到下依次执行动作列表中的动作。

计时器可以实现以下4种操作。

运行:使计时器进入运行状态。

暂停:使运行中的计时器暂停。

重置:重置计时器以运行的时间,原本运行中的计时器重置后会继续运行,原本暂停的计时器重置后会继续暂停。

设置计时周期:重新设置计时器的计时周期,但使用后会重置并暂停计时器。

需要特别注意的是,因为计时器是一种特殊的触发器,所以在创建计时器的过程中,如果需要使用父触发器中的参数,需要利用局部变量的快照功能,先设置局部变量,再在计时器中调用局部变量。

要理解这一点,可以看下面的这个例子。

这个例子中想要实现的规则是,当父触发器的事件触发时,让触发单位在10.0秒后播放死亡动作。

这个例子的写法看起来似乎没问题,然而其实是错误的。因为计时器是一种特殊的触发器,像这样创建并运行计时器,实际上是创建了下图所示的触发器。

这样就能看出问题了:这个事件触发时并没有触发单位,不能这么实现。

因此当需要使用父触发器中的参数时,就要利用局部变量的快照功能,先设置局部变量的值,再在计时器中调用局部变量。这样在创建的计时器中才能读取到正确的值。如下图所示。

三、 停滞型动作

大多数动作都是立即执行且立即完成的,部分动作执行后会停滞,直到触发某些特殊事件时才会完成并执行下一条动作,这些动作称为『停滞型动作』。

停滞型动作目前有如下4种:时间-等待、显示-停滞型单位对话框、显示-停滞型立绘对话框、触发器-运行触发器。

时间-等待:执行后停滞,直到停滞后的时间达到动作中所设定的时间时,才会完成并执行下一条动作。

显示-停滞型单位对话框、显示-停滞型立绘对话框:执行后停滞,直到对话框被关闭时,才会完成并执行下一条动作。

触发器-运行触发器:执行后停滞,直到被运行的触发器的最后一个动作执行完成时,才会完成并执行下一条动作。

由于停滞型动作的执行逻辑比较特别,在设计触发器的过程中需要谨慎使用这些动作。因为大多数情况下我们都希望触发器动作是立即执行且立即完成的,当停滞型动作使用不恰当时,很容易出现触发器动作执行时机不符合预期的情况。

四、随机分类中的动作

随机分类中的动作可以有效地实现一些常见的随机抽样算法。

随机-以概率运行动作:执行该动作时,根据动作中所设定的概率决定是否执行子动作列表。

随机-以权重运行动作:执行该动作时,根据子动作列表中所设定的权重,执行该动作中所设定的对应组数的子动作列表。

例如下图所示的动作,其执行结果为:『unit』有10.0 / (10.0 + 30.0) = 0.25的概率播放死亡动作,有30.0 / (10.0 + 30.0) = 0.75的概率播放受击动作。

对于更为简单的随机抽样算法,可以在数组的下标中使用『范围内的随机整数』来实现。

五、计分板

计分板是Uni编辑器已经实现好的一个用于在游戏中记录玩家游戏信息的UI组件,只需要执行计分板的相关动作,即可在游戏中记录玩家的游戏信息。

计分板的本质是一个二维表格,行的信息为玩家信息,列的信息可以自定义。一个完整计分板的显示,通常需要以下操作。

创建计分板:使用『计分板-创建计分板』动作即可创建一个计分板。

设置数据项名称:创建计分板后,需要设置数据项的名称,即计分板的每一列分别为什么数据。使用『计分板-设置计分板数据项名称』即可完成这项操作。

显示玩家数据:创建计分板后,还需要将想要展示数据的玩家加到计分板中,即计分板的每一行分别是哪位玩家的数据。使用『计分板-计分板显示玩家数据』即可完成这项操作。

设置显示内容:定义好行和列的信息后,接下来就是填充每个格子的显示内容。使用『计分板-设置计分板显示内容』即可完成这项操作,这里还需要注意3点:

1) 第3个参数需要填写『计分板-设置计分板数据项名称』动作中所设置的数据项名称,用来定位格子的位置。

2) 每个格子的显示内容可以包含多项数据,每一项数据可以是字符串或者图标,数据的索引值只用于排序,不一定从1开始,最终显示的内容会将该格子内的所有数据按照索引值从小到大的顺序串联起来,需要注意相同索引值的数据会被顶替。

3) 设置好显示内容后,若需要修改显示内容,需要再次执行该动作,才会主动刷新计分板显示内容。

显示计分板:设置好计分板后,需要将设置好的计分板显示出来。使用『计分板-管理计分板显示』即可完成这项操作。

计分板还可以自定义排序规则。在定义好每一列的数据项名称后,可以根据该列的某一索引值的对应数据进行排序。使用『计分板-设置计分板排序规则』动作即可完成此项操作。该动作只需执行一次即可,之后每一次主动刷新计分板都会根据这个排序规则对计分板进行排序。需要注意的是,当任意一名玩家的对应索引值的内容无法转换为数字或不存在对应索引值的内容时,该动作会失效。

六、简要信息面板

简要信息面板是Uni编辑器已经实现好的一个用于显示一些游戏中的简要信息的UI组件,只需要执行简要信息面板的相关动作,即可在游戏运行的过程中在游戏界面的右上角显示出来。

简要信息面板的显示,通常需要以下操作。

创建简要信息面板:使用『创建简要信息面板』动作即可创建一个简要信息面板。

设置显示内容:使用『设置简要信息面板显示内容』动作即可设置显示内容,设置规则与计分板的显示内容设置规则相同,详情请参考『进阶功能-计分板』。

显示简要信息面板:设置好简要信息面板后,需要将其显示出来。使用『管理简要信息面板的显示』动作即可完成这项操作。

简要信息面板还可以显示计时器信息,『简要信息面板显示计时器』、『简要信息面板隐藏计时器』这2个动作中提供了相应的接口。

七、Debug与调试

Uni编辑器中的触发器提供了Debug的功能,该功能可以方便地定位到触发器中所存在的编写错误,可用于触发器的Debug。

若要使用该功能,需要先在编辑器设置中打开Debug模式的开关。

开启Debug模式后,在游戏运行的过程中,当触发器执行错误时,Debug面板就会抛出Debug信息。

遇到Debug信息时,回到编辑器中打开触发器界面,就可以看到最近一次游戏运行过程中的Debug信息。打开该界面,并点击对应Debug信息的放大镜按钮,就可以准确地定位到错误节点的位置。

当不知道触发器为何没有依照预期执行,却又没有任何Debug信息时,也可以使用『游戏-弹出Debug消息』动作主动地弹出一些必要的Debug消息进行调试,从而找到错误所在。

八、注释

触发器中提供了注释的功能,触发器的事件、条件、动作中也提供了注释的功能。多写注释、把注释写清楚,可以帮助自己在下一次查阅自己所设计的触发器时,更清楚地看懂当时的实现。

自定义动作与函数

一、函数说明

在触发器中,可以使用官方给出的动作来实现效果,对于那些官方没有提供的动作,则可以通过自定义动作以及自定义函数来实现

自定义动作,顾名思义,是用户自己实现的触发器动作。而函数,我们在使用触发器时,早有接触,在配置触发器的参数的时候,常会借助函数来实现效果。比如通过“单位的等级”这个整数函数来给局部变量赋值

使用自定义动作和自定义函数有什么好处?

1.自定义动作和自定义函数可以将一系列官方动作进行封装,后续只需要一条调用函数的触发器动作即可运行封装在函数内的所有动作。使触发器编辑的效率更高,触发器内容更简洁

2.自定义动作与自定义函数允许自定输入的参数,在自定义动作和自定义函数内部进行触发事件信息的传递,实现触发器做不到的效果。

二、自定义动作的使用

创建自定义动作的流程见下图

使用流程见下图

在上述的例子中,创建了一个显示倒计时数字的自定义动作,在触发器中输入不同的数字,倒数的总次数也会跟着变化

在触发器中使用时,只需要直接调用这个自定义动作即可,无需把自定义动作内的所有官方动作重新写一遍,节约了编写触发器的效率

假如自定义动作中的触发器动作被修改了,比如在原来的基础上添加了一条新的触发器动作,那么所有调用了这个自定义动作的地方,都会运行最新的触发器动作

形参在自定义动作的内部,通过同名的局部变量获取。所以在写自定义动作的逻辑时,需要注意,局部变量的名称不能和形参重复

形参可以理解为在调用这个自定义动作时,需要填写的参数。形参的数量是灵活的,在自定义动作写好之后,也允许添加和删改。但是要记得,每次增删形参之后需要及时更新函数描述

如果自定义动作已经在触发器中被调用,则删除已有的形参时,被调用的自定义动作会自动失效,需要重新配置

在上述图示的例子中,倒计时的文字只能给玩家1显示,假如希望可以指定任意的玩家都能看到倒计时,那就可以通过添加一个”玩家“类型的形参来实现

理论上,也可以添加一个形参,但是这个形参不参与自定义动作内部的任何逻辑运算,是否调用形参由使用者自己决定。

自定义动作内部也可以提前终止执行,只要添加一条”函数返回“的动作,即可令自定义动作马上结束,顺序在这条动作之后的其他触发器动作也不会执行。如下图例子,自定义动作被调用时将不再执行任何动作。

三、函数的使用

自定义函数的创建方式与自定义动作的创建方式类似,此处不再展示

自定义动作执行完之后,会告诉触发器,让触发器按顺序执行下一条动作,这点与官方提供的触发器动作是没有区别。自定义函数做的事情与自定义动作不同,自定义函数通过输入的参数,最终返回一个值,没有返回值的话,函数则会报错

下面给出一个函数的例子,该函数通过输入两个玩家参数,可以返回两位玩家之间的金币差值的绝对值

在创建好函数之后,就可以在触发器中随时调用它。下面展示如何使用自定义函数

在自定义函数中,形参同样可以有多个或者没有,但是必须要有返回值,而且返回值也只能有一个

另外,返回的值的类型也必须与函数的类型一致,不能在整数函数中将一个单位类型作为返回值,否则函数被调用的时候就会报错

一旦自定义函数返回了值,则函数就会退出执行,返回值后添加的触发器动作也都不会执行,所以一般情况下,返回值都是最后执行的动作

在创建函数以及调用函数的时候一定要先弄清楚函数的类型,因为函数创建之后,函数类型是不能更改的。如果函数写好之后发现类型错了,则可以通过批量复制到新函数的方式解决

四、共享触发器

在编辑地图的时候,经常会遇到以下两种情形:1,需要对自己地图的触发器功能进行移植,但是不想重写;2,在共享大厅下载了别人共享的地图,想要将其中的某个效果添加到自己的地图。这时就可以使用共享触发器的功能来实现

共享触发器的主要作用是本地进行触发器移植,所以,不同于共享地图,共享触发器的内容并不会发送到分享大厅,而是上传到个人的云盘,只有本人能够使用

在使用共享触发器功能之前,需要先引入共享库的概念。共享的流程是先将所有的触发器放到一个类似于文件夹的地方,然后进行打包,这个文件夹就是共享库。打包好的触发器数据需要手动上传到个人云盘,然后再从云盘下来,从而实现触发器的移植

下面展示将触发器添加到共享库的流程

本地暂存库界面显示的是已经添加共享,等待用户上传的触发器(或函数),并不是当前云盘上已经存储的共享触发器

本地暂存库只能保存同一张地图内的触发器,不能跨地图保存,如果未将暂存库内的触发器上传到云盘,就退出当前地图,再次打开地图时,暂存库内的内容将会清空。

本地暂存库内的触发器内容相当于复制了一份出来,所以暂存库内的内容不会影响原来的触发器

一次可以添加多个触发器到共享库中,但是同一个触发器如果已经添加到了暂存库中,则再次点击【共享按钮】,也不会有任何反应

在将共享库的内容上传到云盘时,云盘内已有的共享触发器会被清空,并置入新添加的触发器

在完成了将触发器上传到云盘的操作之后,就可以在其他地图中将其下载下来,操作见下图

粘贴到新地图的共享触发器实际上是从网络复制了一份拷贝下来,所以修改复制下来的触发器不会影响已经上传的触发器以及源触发器。

五、共享函数

自定义动作与自定义函数同样可以添加到共享库中,操作方法也类似于共享触发器,此处不再重复

自定义动作与自定义函数在被添加到共享库时,不仅其内部的触发器动作,连形参也会被添加到共享库,保证功能的完整性

在将共享库的内容粘贴到本地时,有可能会发生触发器内本来已经配好的参数丢失,无法正常运行的情况,这个参数的丢失,有可能源于以下情况:

1,触发器动作配置参数时,使用了全局变量

2,触发器动作配置参数时,使用了场景实例,如场景中的单位、物品、区域、装饰物

3,触发器、自定义动作、自定义函数,互相引用了对方,但是共享库中只添加了引用方,没有添加被引用方

对于第1点和第2点是地图的机制决定的,全局变量和场景实例都只能在具体地图中生效,不能跨地图使用,所以复制到另一张地图时会出现参数信息丢失的情况,在使用共享功能的时候需要尽量避免

第3点被称为触发器的引用关系,需要保证上传了所有相关内容,才能确保引用关系的完整

在上面讲解自定义函数时提到,自定义函数里面可以使用写好的自定义动作,而自定义动作需要真正起作用,则需要在触发器中调用。所以一般在实现一个复杂功能的时候,都会涉及三方的互相调用

想要避免复制下来的共享触发器丢失参数的情况,在添加到共享库的时候,就要将所有引用到的自定义动作和自定义函数都添加进本地暂存库,然后再一起上传到云盘,这样系统就会将引用关系保存下来

自定义界面说明
自定义界面说明
单位属性

单位属性页签用来编辑所有单位的自定义属性。

单位的类别分为:式神、建筑、士兵、野怪、自定义。不同类别的单位属性分类不同,可编辑的字段也不同,在这里,我们开放了编辑器中所需要的可编辑字段。以式神(英雄)为例,可编辑的属性有:基础属性、成长属性、高级属性、单位技能、死亡掉落以及更多属性。在所属分类下编辑式神属性,如基础属性中的攻击、护甲,死亡掉落中的物品配置。

值得注意的是,这里的单位属性指的是单位类型的属性。比如将大天狗的攻击设置为76,那么所有创建出来的大天狗攻击都为76,想要改变某个特定单位的属性值,则需要通过触发器实现。

自定义界面说明

每一个单位右上角都有一个复制单位的功能,复制后的单位将出现在自定义分类下,作为一个新的单位类型。如上图中的惠比寿_1与惠比寿_2在这里就是两种不同的单位类型。



自定义界面说明
装备属性

装备属性页签用来编辑所有装备的自定义属性。

自定义界面说明

装备的分类沿用了平安京的分类方法,分为:武器、法器、防具、猎具、足具、辅助、自定义。装备属性分为基础属性、售卖属性和被动技能。不同装备的 基础属性是不同的,比如有的武器为攻击加成,有的武器为暴击加成,有的足具为移速加成。

自定义界面说明

被动技能是可以更改配置的,比如可以给A装备应用B装备的被动技能,技能的个数也可以手动增加/删除。



物品属性
自定义界面说明

物品属性页签是用来编辑物品的自定义属性。

物品的本身的属性分为基础属性、售卖属性、使用属性、执行效果和建造属性。这里是抽取了物品在平安京中的原有效果,比如原本是一个回蓝药,那这个道具在这里的执行效果就是回蓝效果。但是如果想通过使用一个回蓝药实现更多其他的功能,比如吃了一个糯米饭团,使用单位的攻击力+50,这样的效果是通过触发器实现的。

自定义界面说明

物品也是支持复制的,所以糯米团子_1与糯米团子_2是两种不同的物品类型。



自定义界面说明
自定义技能

自定义技能页签是编辑技能的地方。

技能分为式神技能和装备技能。式神技能拆分为技能基础、技能数值、技能buff、建造属性,每一类属性下面都有对应技能的可编辑字段。如技能基础页签中的基本信息、命中特效、子弹特效;技能数值页签用来编辑技能的数值相关内容,如通用数值中的施法距离、CD,伤害数值、子弹数值。如下图中的技能伤害数值为322.5+(0.6*法强),322.5为基础伤害值,(0.6*法强)为加成伤害值,伤害类型为魔法伤害;

自定义界面说明

技能buff页签可以编辑该技能所带buff效果,如下图中的1级无懈之翼技能带有3个buff效果,这3个buff类型可以更改配置;不同技能所带的buff个数不同。

自定义界面说明

在建造属性页签中,可以勾选该技能为建造技能,并设置相应的建造属性,使所修改的技能变为一个建塔技能。建造属性包括建造单位的单位类型、建造范围、建造时间、金钱消耗以及建造的单位是否可操控。

自定义界面说明

自定义buff
自定义界面说明

自定义buff页签是编辑buff信息的界面。

自定义buff同样也分式神buff和装备buff。Buff的信息包括基本信息、影响属性、buff伤害、buff数值、护盾数值以及特效信息。

应用buff指的是把所想要编辑的buff覆盖到一个开放式自定义buff中,开放式自定义buff可编辑所有buff相关字段,当你想用某一个式神的某个buff时,同时又不想影响该式神的原本buff效果,那么可以把这个buff通过应用buff按钮抽取到开放式自定义buff中编辑。



自定义界面说明
商店属性

商店属性界面用来设置商店相关内容。

随身商店为平安京原有的售卖装备的商店,新建商店和新建分类则是新建全新的商店,自己可以编辑所需上架的装备和物品,商品的上下架也可以通过触发器动态改变。商店的功能更多的是在触发器中实现,如商品购买事件,商品售出事件,设置商品价格,数量等,往往需要配合触发器的相关节点,才能真正实现预期的商店功能。



自定义收费
自定义界面说明

自定义收费页签用来编辑收费项目。可编辑的信息为商品名称、出售价格、有效期、以及商品描述。具体规则如下图所示,值得注意的是,只有地图热度大于10000后才可以上架收费项目。

自定义界面说明

自定义界面说明
自定义合成

自定义合成页签用来编辑装备的合成方案。可以配置多套不同的合成方案,选择使用此方案后,游戏运行中将以这套方案去合成装备。还原功能可以将已编辑的合成方案还原为初始合成方案。



全局数值
自定义界面说明

全局数值包括式神升级经验、式神击杀经验和式神击杀金钱。这里的数值是全局数值,也就是所有1级式神的升级经验都为280点。

UI编辑器指引

一、基础概念

要编辑界面,首先我们要了解一些基础概念,这非常重要,你必须明白你在编辑的是什么,你才能完成编辑。这里主要将界面编辑和场景编辑做类比,希望可以帮助大家理解。


1.1 界面和布局

一个界面,其实就相当于一个场景。在编辑场景时,我们可以在场景中编辑单位;对应的,在编辑界面时,我们可以在界面中编辑控件。


界面布局,可能是个很陌生的概念,但是布局这个概念其实在场景编辑中就存在了。在编辑场景时,我们会定义每个单位的单位类型、单位名字、大小、朝向、位置等信息,一个场景中所有的单位的所有的以上相关信息的总和就是场景的布局。对应的,一个界面中所有控件的控件类型、名字、尺寸、旋转、位置等等信息的总和,就是界面的布局。所谓拼界面,其实就是编辑界面的布局。


编辑界面和编辑场景其实非常相似,当你用久了你就会发现,编辑界面其实就是在编辑一个2D的场景而已。如果你现在就已经有这种程度的理解,那么恭喜你已经入门了。


1.2 控件和控件事件

一个控件,其实就相当于场景里的一个单位。在编辑单位时,我们可以编辑单位的位置、大小等信息;对应的,在编辑控件时,我们也可以编辑控件的位置、大小等信息。


在编辑场景时,我们可以给单位注册一些事件:比如点击单位事件、进入单位范围事件、单位死亡事件等等;对应的,在编辑界面时,我们也可以给控件注册一些时间:比如点击控件事件、拖拽控件事件等等。


在编辑场景时,注册单位事件后就可以编辑单位的逻辑;对应的,在编辑界面时,注册控件事件后就可以编辑控件的逻辑。


二、界面布局编辑

这部分主要为大家讲解界面布局编辑的相关要点。


2.1 新建界面

在副本编辑器的右上角,点击『界面』按钮,即可进入当前副本的界面管理界面。


在这里可以选择已制作的界面进行编辑,也可以点击『新建界面』按钮,新建一个界面。


2.1.1 根节点root


每新建一个布局,都会有一个根节点root。这个根节点是必须的,不要随意删除,官方已经为这个root节点做好了一些适配,你可以直接把这个root当作是玩家的屏幕。


2.2 控件树

控件在界面布局中是以树的结构组织起来的。你可以不用了解树到底是什么结构,你只要明白几个树的基础概念:


  • 子节点(子控件):在某个控件内的新建的任何控件,都是这个控件的子控件,我们可以认为在界面编辑器中新建的任何控件都是根节点root的子控件或孙子控件;
  • 父节点(父控件):与子控件相对应,A是B的子控件,那么B就是A的父控件;

控件树非常关键,它决定了控件所使用的控件坐标系。我们在界面编辑器中所编辑的任何控件的位置,都是相对于其父节点的控件坐标系的位置。在这里只需要理解到这个程度就可以了,更多信息请参看【进阶阅读 -> 世界坐标系与控件坐标系】。


2.3 控件

界面编辑器左下角列出了我们能使用的各种控件,点击控件可以在预览区创建该控件,也可以将控件拖动到预览区来创建控件。


每种控件有若干可编辑属性,通过编辑这些属性来编辑控件。


可以在预览区或控件树上选择一个已有控件来编辑、删除。也可以通过拖拽来简单改变控件位置、尺寸。


2.3.1 按钮


按钮是最常使用的控件之一,一个按钮可由3个状态的图片、一组文字组成。按钮可以注册点击、拖拽等事件。


2.3.2 图片


图片是最常使用的控件之一,一个图片仅有一张底图构成,底图支持九宫切分。图片不能用来注册事件。


2.3.3 文字


文字是最常使用的控件之一,一个文字控件包含一段文字,此外也可以指定文字的字体、字号、颜色以及是否支持富文本等属性。文字不能用来注册事件。


2.3.4 层


层是一个特殊控件,它没有可见的外观(可以想象成一个透明图片),但是它却能用于注册一系列事件。例如点击、拖拽事件。


通常情况下,可以用层来整理各控件之间的父子关系。例如在制作一个包含图片、文字、按钮的小界面时,用层做父控件,方便管理。


2.3.5 输入框


输入框控件可以让玩家输入文字,并且获取玩家输入的文字。例如玩法中需要玩家给角色起名,就可以调用输入框来实现。输入框可以注册编辑内容确定、开始编辑、编辑内容改变三个事件。


2.3.6 进度条


进度条控件支持条形和环形进度条,你可以改变进度条的百分比来控制进度条的显示。进度条不能用于注册事件。


2.3.7 多选按钮


多选按钮可以用于制作一组多选选项,也可以用来制作标签页。多选按钮能注册的事件与按钮是相似的。


与按钮不同的是,多选按钮存在两个状态:truefalsetrue表示按钮的下压状态,false表示按钮的抬起状态。正因如此,多选按钮比按钮多了一种可注册的事件:多选状态改变。


2.3.8 滑动条


滑动条可以让玩家拖拽滑动,并获得滑动的比例数值。例如制作一个声音大小控制功能,可以使用滑动条。滑动条可以注册被滑动、点击开始、点击结束事件。


2.3.9 裁剪节点


裁剪节点可以对它的子节点进行裁剪。裁剪节点是一张图片,它的子控件被图片的透明部分裁剪,例如说,可以用一个裁剪节点将方形头像裁剪为圆形。


2.4 模板

选中节点树上的一个控件,可以将该控件以及它的所有子控件储存为模板,供其它界面调用。


从控件区的『导入模板』按钮,也可以将模板导入到控件树中。


我们也提供了一些官方模板供大家使用。


三、界面逻辑编辑

这部分主要为大家讲解界面逻辑编辑的相关要点。


3.1 注册控件事件

在界面编辑器中,我们就可以直接为控件注册事件。当事件触发时,就会运行我们在界面编辑器中所配置的对应触发器。


不同的事件的触发时机是不一样的,每个事件的触发时机如下表所示。

事件名称 触发时机
点击开始 手指或鼠标在控件范围内下压时触发
拖拽 手指或鼠标下压后没有抬起,且手指或鼠标的位置有变化时触发
点击结束 手指或鼠标抬起时触发
点击 手指或鼠标下压后在控件范围内抬起时触发
移动取消 移动取消时触发
在控件外抬起 手指或鼠标下压后在控件范围外抬起时触发
多选状态改变 多选按钮的开关状态改变时触发
被滚动 列表被滚动时触发
滚动结束 列表结束滚动时触发
翻页 列表完成翻页时触发
开始编辑 开始编辑文本内容时触发
编辑内容改变 编辑内容发生变化时触发
编辑内容确定 编辑内容确定时触发
被滑动 滑动条被滑动时触发
3.2 控件事件参数

控件事件触发时,我们可以在运行的触发器中,使用一些参数来获取事件的相关信息。可以使用的事件参数如下表所示。

参数类型 参数名 参数功能
玩家 触发玩家 获取触发控件事件的玩家
控件 触发控件 获取触发控件事件的控件
界面坐标 触发界面坐标 获取触发控件事件时手指或鼠标的位置
布尔值 触发控件的多选状态 获取触发控件事件的多选按钮的当前多选状态
整数 触发控件在多选按钮组中的索引值 获取触发控件事件的多选按钮在多选按钮组中的索引值
整数 触发滑动条的百分比 获取被滑动事件触发时滑动条的百分比
整数 触发翻页列表的当前页码 获取翻页事件触发时列表的当前页码
字符串 触发控件内已输入的内容 获取触发控件事件时控件内已输入的内容
触发界面坐标对应的场景点 获取触发控件事件时手指或鼠标的位置映射到场景中的位置

当然,需要注意,不同的事件触发时,可使用的事件参数是不同的。详见下表。

事件名称 可用事件参数
点击开始 触发玩家、触发控件、触发界面坐标、触发界面坐标对应的场景点
拖拽 触发玩家、触发控件、触发界面坐标、触发界面坐标对应的场景点
点击结束 触发玩家、触发控件、触发界面坐标、触发界面坐标对应的场景点
点击 触发玩家、触发控件、触发界面坐标、触发界面坐标对应的场景点
移动取消 触发玩家、触发控件、触发界面坐标、触发界面坐标对应的场景点
在控件外抬起 触发玩家、触发控件、触发界面坐标、触发界面坐标对应的场景点
多选状态改变 触发玩家、触发控件、触发控件的多选状态、触发控件在多选按钮组中的索引值
被滚动 触发玩家、触发控件
滚动结束 触发玩家、触发控件
翻页 触发玩家、触发控件、触发翻页列表的当前页码
开始编辑 触发玩家、触发控件、触发控件内已输入的内容
编辑内容改变 触发玩家、触发控件、触发控件内已输入的内容
编辑内容确定 触发玩家、触发控件、触发控件内已输入的内容
3.3 注册界面事件

除了注册控件事件,我们还可以注册界面事件。界面的事件类似于,我们在编辑场景时有『游戏初始化』、『游戏开始』事件。对应的,在编辑界面时,我们有『界面初始化』事件、『界面销毁』事件。


3.3.1 界面初始化


这个是一个非常重要的事件,我们可以直接在触发器中新建一个触发器来注册这个事件。当界面被显示时,就会触发这个事件。


为什么这个事件很重要的?因为只有注册了这个事件,你才能以更便捷地方式完成界面的编辑。举个例子,我们现在想要在某个界面的某个label控件中显示当前玩家的名字。这个信息我们不可能在界面编辑器中就编辑好,我们只能在游戏运行时才能获取玩家的名字。因此如果你要实现这个需求,最好的方式就是注册这个界面的初始化事件,在每次界面初始化时,都将这个界面的label控件的文本设置为玩家的名字,这样一来我们就实现了这个需求。


3.3.2 界面销毁


这个事件同样也非常重要,会在界面被关闭时触发。如果你记录的一些玩家的信息需要在界面被关闭时被改变,那么这个事件就会派上用场。


四、界面视觉设计

4.1 界面适配

通过设置控件的锚点、位置x、位置y,可以将界面控件进行挂靠适配,以保持所有控件能够在不同分辨率下保持与挂靠点的相对距离。


4.1.1 锚点


锚点是控件的一个重要属性,是子节点相对于父节点设置位置时候的一个基准参考点,它决定了节点以自身约束框中的哪一个点作为整个节点的位置。也就是说,控件的锚点的位置就是控件的位置


另外,锚点也会作为控件缩放、倾斜、旋转的基准点。


4.1.2 位置的计算方法


控件的位置和尺寸提供了3种计算方法:


1. 数值: 纯粹数值,没有特殊的计算方法,即相对于父节点的控件坐标系的坐标;

2. 百分比: 父节点尺寸的百分比,例如某个控件的尺寸设置为(80%, 60%),该控件的父控件的尺寸为(1000, 1000),那么该控件的实际尺寸为(800, 600)

3. 百分比偏移: 父节点尺寸的百分比偏移一定的数值,例如某个控件的尺寸设置为(80%20, 60%-40),该控件的父控件的尺寸为(1000, 1000),那么该控件的实际尺寸为(820, 560)


4.1.3 官方战斗界面适配信息

官方战斗界面适配信息

官方战斗界面适配信息

4.2 九宫缩放

在使用图片资源时,可以通过勾选『九宫缩放』,并在『九宫切分』中设置图片资源拉伸区域,将图片资源只保留边角,拉伸选中的像素达到放大资源的目的。勾选『九宫缩放』后,控件可以通过修改尺寸x和尺寸y进行尺寸的变更。九宫的拉伸规则如下图,建议将水平/垂直同时拉伸区域设置在无纹理的区域,以达到最佳的拉伸效果。

九宫切分

九宫切分

图片、按钮、多选按钮等控件,在不勾选『九宫缩放』时,是不可以更改控件的尺寸的。因为不勾选九宫缩放的情况下更改图片的尺寸会导致图片变形。若要改变这类控件的尺寸,均需要勾选『九宫缩放』,并确保控件所使用的图片资源是适合进行九宫缩放的资源。


4.3 《决战!平安京》文本字色参考
文本字色参考

文本字色参考

五、管理界面层级

在副本编辑器的右上角,点击『界面』按钮,即可进入当前副本的界面管理界面。


在界面管理界面中,点击『管理界面层级』按钮,即可管理界面层级。


在这个界面中,我们可以编辑我们在当前副本中创建的自定义界面的层级以及部分官方界面的层级。其中,自定义界面的名称会被标注为橙色,官方界面的名称则是黑色的。


界面层级的管理较为简单,只需要注意以下2点:


1.界面层级越大,界面越高,会盖住层级比它低的其他界面;

2.层级相同的界面,后显示的界面会高于先显示的界面;


六、进阶阅读

这部分会为大家讲解一些比较进阶的功能。


6.1 世界坐标系与控件坐标系

界面上的一个点,通常我们都用『界面坐标』来表示。在坐标系确定的前提下,坐标才有意义,因此我们需要知道在UI编辑器中,世界坐标系和控件坐标系分别是什么。


首先是控件坐标系,如果你用过UI编辑器,那你已经用过控件坐标系很多次了,只是你可能还没有感受到。举个例子,当我们要在下图这个image下创建一个button,并将button的位置设为(0, 0),你会发现buttonimage的左下角:

世界坐标系与控件坐标系:图1

世界坐标系与控件坐标系:图1

这是因为,当我们在UI编辑器中设置控件的位置时,我们所使用的都是该控件的父控件的控件坐标系。button的父控件是imageimage的控件坐标系的原点在这张图片的左下角,所以button也位于这张图片的左下角。


同样的,当我们在触发器中设置控件的位置时,我们所传入的界面坐标也必须是相对于该控件的父控件的控件坐标系的坐标,才有意义。

世界坐标系与控件坐标系:图2

世界坐标系与控件坐标系:图2

某个控件的控件坐标系,都是以该控件的左下角为坐标原点,当控件没有发生旋转、缩放、倾斜时,控件坐标系的基向量与世界坐标系相同。也就是说,正常情况下,控件坐标系的x轴和y轴就是我们目前所理解的x轴和y轴。


在以下情况下,控件坐标系会发生变化:


1.修改控件的位置:原点平移,基向量没有变化;

2.修改控件的尺寸:当锚点不在左下角时原点会平移,基向量没有变化;

3.修改控件的锚点:原点平移,基向量没有变化;

4.修改控件的缩放:当锚点不在左下角时原点会平移,且基向量伸长或缩短,当缩放为负数时,基向量会沿着反方向伸长或缩短(本质上就是用缩放量点乘基向量得到新的基向量,水平翻转、垂直翻转其实就是在缩放x、缩放y的数值上加一个负号);

5.修改控件的倾斜:当锚点不在左下角时原点会平移,且基向量倾斜;

6.修改控件的旋转:当锚点不在左下角时原点会平移,且两个基向量同时旋转对应角度;


以上6点内容作为一个了解就好,不理解也没关系,感兴趣的同学可以拼一个和图1一样的界面,然后依次修改image的上述属性,观察button的变化,就能明白了。


明白了什么是控件坐标系,世界坐标系相对来说就简单很多了。简单一点理解,世界坐标系就是以屏幕左下角为坐标原点,朝右为x轴,朝上为y轴。或者将你的右手摆成下图这个姿势,大拇指的方向就是x轴,食指的方向就是y轴。

世界坐标系与控件坐标系:图3

世界坐标系与控件坐标系:图3

世界坐标系比控件坐标系简单,是因为他是不会变的,永远都是相对于整个游戏客户端界面的坐标。


这部分内容即使不理解也没关系,你只要知道什么时候是世界坐标系、什么时候是控件坐标系就可以了:


  • 触发控件坐标,使用的是世界坐标系;
  • 设置控件位置,使用的是控件坐标系;
  • 将世界坐标转换为控件坐标,使用触发器参数:界面坐标-转换屏幕坐标为相对控件坐标;
  • 将控件坐标转换为世界坐标:使用触发器参数:界面坐标-转换相对控件坐标为屏幕坐标;

详见示例: 控件坐标系


6.2 列表和列表项

列表是UI编辑器中一种相对复杂的控件,类比到触发器的话,列表就是一个数组。数组大家应该比较熟悉,数组是由多个对象按某种顺序排列起来的,我们可以获取整个数组,也可以获取数组中的某一项,改变数组的大小等等。同样的,列表就是由多个列表项所构成的,列表也有大小、其大小也可以被改变,列表中的每一项就是一个列表项。列表项可以很简单(比如一个按钮、一张图片),也可以很复杂(复杂的树状结构)。


无论列表还是列表项,在UI编辑器中都是一种控件。


列表在UI编辑器中不能直接创建,必须由某个原有的控件,通过『转列表』操作,转换而来。


目前共有以下5种类型的列表:水平列表、垂直列表、水平滚动列表、垂直滚动列表、水平翻页列表。控件转列表后,所创建的列表的类型默认为水平列表,可以根据实际需求修改列表类型。


列表项根节点的配置非常关键。列表项根节点的配置决定了列表项在列表中的显示大小。对于垂直列表,列表的『尺寸x』是不能编辑的,因为垂直列表的『尺寸x』是由列表项的尺寸x、列数、水平边距、水平间距这4个因素共同决定的;对于水平列表,列表的『尺寸y』是不能编辑的,因为水平列表的『尺寸y』是由列表项的尺寸y、行数、垂直边距、垂直间距这4个因素共同决定的。


详见示例: 队友信息界面


强烈推荐阅读上述示例,包含了设置列表大小、遍历列表、获取列表项子节点、获取列表项在列表中的索引值的方法。


6.3 多选按钮组

多选按钮组指的是一组多选按钮,这一组多选按钮最多只允许有1个按钮为true状态,当其中一个按钮变成true状态时,原本true状态的按钮会转为false状态。


多选按钮组主要用来实现标签页,详见 Tab页的实现


6.4 通过触发器注册控件事件

和界面编辑器注册控件事件不太一样,通过触发器可以为某个特定的控件注册事件。


通过界面编辑器中注册事件,可以理解为这个事件变成了这个控件的一个属性。例如,当我们为列表项的某个子控件在界面编辑器中注册了事件后,通过触发器在运行过程中扩充列表的大小时,新的列表项的对应子控件也会注册这些事件。


通过触发器注册控件事件则与之不同,触发器是在运行的过程中为某个特定的控件注册事件,因此可以达到同一个列表的不同列表项子控件交互效果不同的目的。但是需要注意,由于触发器是在运行的过程中为某个特定的控件注册事件,当界面关闭时,界面中的控件随之销毁,对应的通过触发器注册的事件就会失效。所以如果想要在界面再次打开时仍然保持上一次的交互效果,需要通过触发器再注册一次事件。


七、案例

这部分会给大家带来一些案例。


7.1 拖拽建塔的实现

详见 拖拽建塔的实现


7.2 列表和列表项

有很多案例都是用了列表和列表项,可以参见: Tab页的实现GUI形式输出矩阵自动切换的广告位关卡选择界面单位升星面板


下面这个案例详细说明了列表和列表项在触发器中的相关操作,包含了设置列表大小、遍历列表、获取列表项子节点、获取列表项在列表中的索引值的方法。


队友信息界面



技能编辑器指引

作者: 2021-03-15

技能编辑器指引

自定义技能

1.技能类型定义

我们回忆一下在游戏中施放一个主动技能的过程:我们按下对应技能的按钮,然后造成技能效果,技能进入冷却时间。我们按下按钮的时候,其实是通过技能孔上的技能类型生成了一个技能实例,并且在游戏地图上实例化。

技能类型也可以称为技能模板,通过技能类型来创建技能实例,类似于单位类型和单位的关系,我们需要通过单位类型来创建单位实例,而通过同一个单位类型创建的单位都是一致的。在编辑器中创建并进行编辑的,都是技能类型。

2.创建技能类型

我们在UNI编辑器的编辑主界面点击【技能按钮】,进入技能编辑器的界面,点击【新建按钮】,并进行基本配置,就可以得到一个新的技能类型。

我们可以通过配置不同的技能效果来实现不同的技能类型,技能的具体配置会在后续的教程中进行说明。

3.分配技能类型

我们已经拥有了一个技能实例,接下来要做的就是指定哪个单位能够施放这个技能。点击编辑器主界面的【自定义按钮】,在“单位属性”分页中找到需要施放技能的单位类型,往下拖,找到单位技能的配置。

点击对应的技能孔位可以配置技能,在弹出的窗口点击【式神按钮】,可以选择已有的式神技能或者自定义的技能。

4.施放技能

上一步的作用是将技能类型装配到技能孔上。在进入游戏地图的时候,技能1~技能4的技能孔以及普攻技能孔上的技能会通过猫爪UI的形式展示在战斗界面上。玩家注册技能按钮UI的释放事件时,就会通过UI找到技能孔位上的技能类型,通过技能类型生成技能实例。如下图所示,大天狗的一技能换成了自定义技能。

技能的生命周期

在配置技能的具体效果前,我们需要先了解技能从没有,到在地图上产生,最后从地图上消失的整个过程。

在进入地图的时候,会初始化技能界面,这时候猫爪UI上配置的技能也会被初始化,会注册这个技能的“技能初始化”事件。事件注册时,在这个事件下的所有触发器都会运行一遍,下面的所有注册事件同理。技能初始化只会注册一次。下面以常规主动技能为例,讲述一下整个技能的生命周期经历了哪些事件。

  • 进入游戏加载战斗主界面时,会初始化技能槽(也称技能孔)上,这时候会将相应的技能类型装到技能槽,这时候会注册“技能初始化”事件

  • 此时技能仍处于不能使用的状态,因为仍未学习技能,经过第一次加点之后,才能够被使用,技能第一次加点的时候,会注册“技能解封”事件

  • 技能解封之后,后续每次再加点的时候都会注册“技能升级”事件

  • 每次点击技能按钮的时候,程序会根据技能类型来产生一个技能实例,也就是说其实每次技能发出时都是一个独特的个例,他们的关系类似于单位类型与单位,技能实例是通过技能类型产生的。对于主动技能,一般释放技能的单位都会播放动画,在播放动画的过程中产生技能伤害。在播放动画时,动画的不同阶段,会依次注册技能的“技能开始”、“发出打击”或“发射子弹”、“技能结束”事件

  • 技能在播放动画时被打断还会注册“技能被打断”的事件,打断一般包含施放单位的死亡、被异常状态如眩晕,冰冻等控制住的情况。还有一种特殊的打断事件“技能被强制打断”是专门指技能被触发器动作打断

  • 技能整个流程产生完作用之后就会被销毁,对于主动技能一般动作播放,技能机会被销毁。特殊情况比如技能会产生一个力场,持续作用很久,则技能的销毁会晚于技能结束。

在了解技能什么时候会注册什么事件之后,我们就可以在需要的注册事件下添加触发器,来实现技能效果。不同类型的技能可以注册的事件略有不同,在技能编辑器中提供了逻辑页面,可供查看技能有什么注册事件。比如我想做一个技能,每次使用的瞬间都会回复自  身血量,并且获得提升移动速度的buff,则操作方式见下图

在一个事件下,可以添加多个触发器,事件被注册时,多个触发器会同时触发。

下面表格给出注册事件的具体触发时机以及运行的触发器中可用的事件信息

事件

事件信息

触发时机

技能初始化

触发技能

技能被创建出来时

技能解封

触发技能

技能可以被使用时,被动技能会在技能开始前,主动技能就是第一次加点的时候

技能开始

触发技能

技能开始时,被动技能会在技能学习后马上出发,主动技能是每一次释放开始时

技能升级

触发技能、技能等级

技能升级时

发出打击

触发技能

Timeline的hit点,没有hit点不触发

发射子弹

触发技能

Timeline的missile点,没有missile点不触发

蓄力技能释放

触发技能

蓄力技能释放时

技能被打断

触发技能

技能被异常状态打断时

技能被强制打断

触发技能

技能被触发器动作强制打断时(通常是代码强制打断)

读条被打断

触发技能

读条被打断时

读条结束

触发技能

读条结束时

技能结束

触发技能

技能结束时,被动技能在技能开始后,主动技能在Timeline的end点或者被打断时

技能销毁

触发技能

 技能被回收时

主动技能-时间轴

上面提到,技能是按照一定顺序进行事件注册,而事件注册本身并不会产生任何逻辑,具体的逻辑需要我们通过触发器去编辑。我们在创作主动技能时,角色动画和事件注册要统一,做出来的技能才会显得和谐,比如一个向前挥刀的动作,我们配置的效果是向右发射刀光,就会很奇怪。为了更好地了解角色的动画,以及动画的事件点,技能编辑器中提供了timeline窗口。

1.timeline是什么?

timeline可以理解为是以时间轴展示角色动画并添加事件回调点的一种形式,并不是一种文件类型

timeline主要包含两个内容:角色动画 and 事件回调点。角色动画比较好理解,就是式神播放的动作,事件回调点我们可以理解为一个标记。

在制作一个式神需要播放动画的主动技能时,尤其需要timeline和逻辑的共同配合,才能够达到想要的效果。下面给出制作带动画的主动技能的制作流程

image004 

由于不同的式神动画上面有不同的事件点,有可能出现同一个自定义技能,A式神能够正确施放,B式神不能够正确施放的情况。

2.timeline窗口

进入timeline窗口的方式有两种

image005

UNI编辑器中的timeline窗口分为5个功能区域:

1.切换式神:显示当前选中的式神,可以切换需要查看的式神

2.动作列表:显示当前选中的式神拥有的所有动画的纵向列表

3.动作展示:是一个3D的空间,可以旋转摄像头观察式神

4.事件点列表:显示当前式神播放的动作上添加的所有事件点

5.控制面板:控制式神播放动画的控件面板

以图片中的magic1这个动画为例,假如我们希望制作一个大天狗的圆形范围伤害技能,并且在技能开始时播放magic这个动画。则我们需要先在动作列表选中“magic1”这个动画,然后在事件点列表中查看该动画的事件点。

我们知道,施放技能时,并不是全程都有伤害的,而是先有动作前摇,再造成伤害,最后还有后摇。式神播放动画这件事件,本身并没有造成伤害的逻辑,只是通过在动画上添加了一个造成伤害的标记,也就是事件点,当动画播放到这个事件点的时候,告诉程序,需要做什么事情,程序再给敌人造成伤害或者添加buff。

回到大天狗的magic1这个动画,事件点中有一个missile点,表示这是一个可以发出子弹的事件点,这里强调,missile点本身不会发射子弹,只是对于magic1这个动画而言,missile点这个时间的表现效果最好。在技能编辑器中,对应missile点的是“发射子弹”这个事件。

编辑器内部规定,近战伤害的事件点一般用“hit”点来命名,对应事件注册中的“发出打击”,远程伤害的事件点一般用“missile”点来命名,对应事件注册中的“发射子弹”。一般情况下不会同时存在这两个事件点。

在“发射子弹”这个事件上可以添加一个触发器(或多个),然后在触发器上实现对大天狗周围敌人造成伤害的逻辑。

就这样,一个简单的主动技能就完成了。timeline窗口在制作技能过程中的作用就是确定式神有什么动画,以及动画上面有哪些事件点。

主动技能-技能指示器

1.什么是指示器

技能指示器是玩家使用主控单位,施放技能时用于给玩家预示技能作用范围的特效,与技能的手感和施法的精准度有很大关系,所以技能指示器在主动施放的技能中非常关键。见下图,雪女的大招就是很经典的圆形范围的技能

2.技能目标

在说具体的技能指示器之前,需要先讨论一下技能系统的目标类型,技能目标决定技能选敌的策略。我们一般描述一个技能的时候会说它是一个单体技能或者是一个AOE技能。在我们的技能系统里,由“技能目标类型”来决定一个技能是对单体造成效果还是对一片区域造成效果。

对单体施放的技能可以分为对自己和对其他单体目标,对一片区域施放的技能可以分为对面朝方向的范围和对玩家自选范围内的任意区域。

一个直观的例子:对单体敌人施放的技能,如果技能范围内没有任何敌人,则这个技能无法施放。这是因为没有找到技能目标,不允许施放。

3.指示器组合

 技能指示器的外圈大小由技能的施法范围决定,并不由指示器的参数决定,所以有可能出现外圈与指示器不匹配的情况。这种情况看起来比较怪异,见下图,指示器的条比外圈短很多的情况。除非有特殊需求,否则一般建议指示器大小要匹配施法距离。

常见的技能指示器的组合形式有4种:

  • 圆形指示器

 这种指示器可以自由地拖拽一个指示器特效移动(一般为圆形),指示器不能离开施法范围。

image009

image010

实现方式是 技能目标类型:选范围+指示器类型:圆形。配置指示器时,形状参数1

表示圆形的半径长度。一般用来指示圆形AOE技能。而且指示器形状参数2不能配置,否则系统会将形状装换为矩形

image011

image012

  • 扇形指示器

 这种指示器以技能施放单位为圆心,形成一个一定角度的扇形特效,围绕单位旋转。实现方式是 技能目标类型:对面向+指示器类型:扇形。配置指示器时,形状参数1表示扇形的半径长度,形状参数2表示扇形的角度。

  • 矩形指示器

 这种指示器以技能施放单位的坐标点为原点,形成一个矩形的特效,围绕单位旋转,与扇形指示器类型,只是特效的形状变成了矩形。实现方式是 技能目标类型:对面向+指示器类型:矩形。配置指示器时,形状参数1表示矩形的长度,形状参数2表示矩形的宽度。

image013

image014

  • 单体的扇形指示器

这种指示器是对单体起作用的,但是选敌的时候可以通过指示器范围选择技能目标,其表现与范围伤害的扇形指示器一样,不同之处在于使用这种指示器的技能在没有技能目标时无法施放技能,而使用范围伤害的指示器的技能可以空放。实现方式是 技能目标类型:对单体目标+指示器类型:扇形。在游戏中,被选中的单体目标身上会出现红色的竖线。

4.指示器范围

指示器所指示的范围并不等于技能起作用的真实范围,我们前面说到,技能指示器主要是给玩家一个预示的作用,实际上并不承担造成伤害的作用。比如一个技能先造成冲锋,冲锋结束之后在技能施放单位所在地造成一次圆形范围的爆炸伤害。这种情况下我们一般只会看到一个矩形的技能指示器。技能的伤害范围需要额外配置数据来实现。

5.指示器传递的参数

虽然我们在上面指出技能指示器主要是用于预示技能范围,不影响伤害范围,但是指示器还是可以进行传递一些参数,参与逻辑运算的。

  • 在技能目标类型是“选范围”的时候,可以通过点函数“技能目标点”来确定技能释放时,技能指示器所在位置的点坐标,再通过这个点播放定点特效、选中点范围内的单位组

  • 在技能目标类型是“对单体”的时候,可以通过单位函数“技能目标单位”来确定技能释放时,技能指示器选中的单位目标

技能数据配置

1.技能数据-基本信息

技能创建的时候需要填写基本信息,基本信息一般包括技能ID,技能图标、技能名称、技能、技能目标、技能总等级。

在创建的时候可以修改这些数据,如果创建之后想要修改的话,则可以通过技能编辑器主界面的“基本信息”栏下的按钮进行修改。

对于不同类型的技能,基础信息会有所差异。

  • 技能的ID格式内部规定必须是6位数字,且必须是90开头。

  • 技能总等级的范围是1~5。

  • 技能图标允许使用非圆形的图标,但是显示效果会不好。

2.技能数据-直接生效配置

在技能编辑器主界面,基本信息栏下方的技能设置栏,是需要使用者自己手动配置的数据。

技能设置栏的数据的特点是只要配置到技能上就会直接生效,如果不配置,则会以默认的规则赋予默认值。添加数据的方式见下图

以技能指示器为例说明

  • 每个技能只能添加一份技能指示器的配置,其他技能设置内的数据同样最多一份

  • 没有指示器配置的技能在施放时不显示指示器,数据配置不完整时,指示器显示错误

  • 部分复杂的数据需要配置两层或三层子数据,判断有没有再下一层数据的方式是看【新建按钮】是否灰掉,灰掉则没有再下一层子数据

  • 为了方便编辑,添加的数据会带有预置数据,需要根据父数据的实际情况判断是否需要添加更多其他子数据,如技能编辑器还需添加指示器类型、参数1、参数2

新建与插入的区别:

image018

新建:添加被操作数据的子数据

插入:添加与被操作数据同一级的数据

3.技能数据-逻辑数据

技能的逻辑数据类似于技能的自定义属性,给技能添加的逻辑数据,并不会马上生效,比如给一个技能添加了技能动画,则使用这个技能的时候并不会马上播放这个动画,而是需要作者通过触发器主动播放。

逻辑数据之所以这样设置是为了技能配置的灵活,比如一个技能想要在技能开始时造成一次圆形范围伤害,在技能结束时再次造成一次矩形范围的伤害,只需要通过在不同的注册事件下添加触发器就可以实现。

添加数据的操作方式与技能设置一致。需要额外注意的是,有一些数据的结构是数组,是可以有多份同样的子数据。比如伤害配置,可以在其下面添加多份伤害子数据。

image019

如上图所示的配置,「伤害」是一个数组,[伤害_1]是伤害数组中的第一个数据,[伤害_2]是第二个数据,以此类推。

还是以上面的例子来说明,一个技能在技能开始时造成一次圆形范围伤害,在技能结束时再次造成一次矩形范围的伤害。则可以通过第一次伤害读取[伤害_1]的数据,第二次伤害读取[伤害_2]的数据来实现。[伤害_3]因为没有被引用,则不会产生任何效果。

我们不根据位置判断伤害数据是第几组数据,而是根据下标。

如下图所示的情况,[伤害_1]在[伤害_3]之下,但是伤害数组的第一组数据指的还是[伤害_1],而非[伤害_2]

image020

被动技能

1.单位常规被动技能

单位常规被动技能是指可以加点的被动技能

上述时间轴、技能指示器都是主动技能常用的功能,被动技能的实现与主动技能略有不同,被动技能的实现更多情况是监听周围发生的事情来做出反应。

举个例子,有一个被动技能,效果是当自身受到物理伤害时,降低30点受到的伤害。这里的“单位受到伤害”在技能编辑器中被定义为一种“单位技能事件”。还有“单位升级”、“单位死亡”、“受到治疗”、“被击飞”等等,都是单位技能事件。

上述的“技能注册事件”,关注的是技能本身,技能在某个状态时会注册某个事件。“单位技能事件”则是通过技能去关注一个具体的单位,不论是施放技能的单位也好,被技能选中的单位也好。两种事件互相独立,互不影响。

大部分被动技能是通过单位技能事件来实现的。上面说到主动技能,每一次施放的时候都会产生一个技能实例,被动技能则是在加点的瞬间就会产生一个技能实例,并且长驻在学习技能的单位身上。

单位技能事件需要通过触发器动作注册之后,才会生效,默认情况下,技能不会监听任何单位技能事件。另外,根据设计需要,主动技能也可以注册单位技能事件。

被动技能在单位死亡时不会被销毁,只有技能被切换,或者退出游戏的时候才会被销毁。

2.单位天生被动技能

天生被动也就是特质技能,在单位被创建的瞬间就会自动生效,无需加点

天生被动的制作方式与常规被动一样,仅仅是加点的区别。

装备技能

装备技能的制作方式与单位技能的制作方式类似,但是配置装备技能的入口有区别

每个装备只允许添加一个主动技能,被动技能则允许有多条。

image021

单位普攻

普攻的基础配置方式与主动技能类似。不同的点在于

  • 普攻无需加点,默认学会

  • 普攻默认选择的目标类型是对单体

  • 普攻有动画连招的概念,所以普攻配置动画时,不同于平常的动画配置方式,是通过“普攻动画序列”这个字段来决定连招的动画。“attack1|attack2|attack3”就表示普攻第一击播放名为attack1的动画,第二击播放名为attack2的动画,第三击播放名为attack3的动画。播放完最后一击动画后,会自动返回第一击动画,进行循环。而且普攻无需在触发器中配置播放技能动画的动作。

image022

技能等级

单位猫爪上的四个技能有加点的概念,而且通常等级越高的技能,其数值效果越好。在技能编辑器中,同样有技能等级的概念。

1.切换技能等级配置

在新建一个自定义技能的时候,默认配置等级为1时的技能配置。如果想要切换等级,则操作如下图

不同技能等级的数据不共用,如上图,切换为等级2的技能之后,技能指示器的配置消失了。所以如果技能有多个等级的情况,不要忘记配置高等级技能的数据。

如何确定当前配置的是几级的技能?通过看title旁的文字来判断。

image024

2.复用配置

如果一个技能,不同等级用的数据都是一致的,或者说想要先复制一份到其他等级再修改,则可以使用“复用配置”的功能。复用配置会将当前等级的技能数据原样复制一份到目标技能等级。

3.注册事件

对于不同等级的技能,注册事件下配置的触发器是一致的。比如一个技能,技能开始时运行触发器A造成伤害,则不论这个技能的等级是多少,技能开始时都会运行触发器A

如果想要在同一个技能的不同等级做不同的逻辑,怎么办?官方提供了一个整数函数“技能当前等级”,可以在触发器里面读取技能的等级来实现不同的效果。

技能相关触发器

1.触发器节点

之前“技能数据”的相关章节提到,技能数据有三种类型,逻辑数据配置之后不会直接生效,需要通过在触发器中添加特定的动作来产生效果。

下面通过几个常用的动作来进行讲解。

2.播放技能动画

一般在技能开始注册事件下的触发器运行这个动作。在这个动作里,我们只需要配置指定的技能,而不需要配置具体的动画名称,触发器运行时会找到技能逻辑数据上配置的动画进行播放。若技能上没有配置动画,但是执行了这个动作,则触发器会报错。

image025

3.造成技能伤害

这个动作用来造成伤害,需要将指定的技能传进去,触发器会通过技能配置的伤害数据来造成具体类型的伤害数值。所以,再次强调,只有逻辑数据,没有通过触发器引用,则不会有任何效果。

image026

与动画配置不用,伤害配置需要指定伤害的值来自哪一组数据,这是因为同一个技能下可以有多个子伤害的配置。比如现在要做一个技能效果,技能开始时造成3段伤害,则我们不会去让角色施放3个技能,而是在同一个技能的伤害配置中添加3组配置,通过3个“造成技能伤害”的动作去读取不同组的伤害配置即可。

常见的伤害配置是“触发技能的施放单位”通过“触发技能”造成伤害,见下图:

image027

技能冲锋、击飞效果的配置方式与伤害效果类似,只要保证:技能上有配置相应的逻辑数据,以及传递给触发器动作的参数准确即可掌握这类触发器。

4.播放技能特效

我们在技能编辑器相关动作提供了多种类型的特效,供实现多种技能表现效果。

技能特效创建时都会被赋值到一个局部变量,可以通过局部变量引用技能特效。

下面给出四个特效相关动作的说明

触发器动作

说明

播放技能受击特效

一个单位受到伤害时会自动播放受击特效,「播放技能受击特效」这个动作一般用来实现非常规的受击表现

播放技能定点特效

一般用来实现在固定地点施放的如毒圈,一团持续燃烧的火这样的表现效果

播放技能绑定特效

常见的在使用某个强化技能时,在施放单位身上播放一个绑定特效,强化效果消失时,再把特效删掉

播放技能线性特效

在角色A和角色B之间产生一个相连的特效,而且特效长度会随着两个角色间的距离变化,如惠比寿的钓鱼。使用完后需要手动将特效删除

特效生命周期:特效资源在制作时,自身有一个是否循环播放的属性,受击特效大部分都是不循环的,播放特效之后就不用管它了,自动回被回收。而绑定特效和线性特效则大部分是循环播放的,播放之后会一直存在,需要手动管理回收资源。

5.技能发射子弹

技能编辑器提供了5种子弹动作,可以实现丰富的效果。子弹的伤害数值是通用的,只需要选择使用技能中的第几组数据,然后再配置必须的参数。下面,以追踪子弹为例进行分析。

追踪子弹常用于实现远程普攻,可以自动转向,在发射的瞬间,就决定了要飞向哪个单位。

image028

与触发器中发射子弹的动作不同的是,技能编辑器中发射的子弹是在指定位置发射,而非指定单位,意味着我们可以实现在某个地点直接生成子弹的效果,无需通过隐形纸人间接发射。至于子弹的具体效果是造成伤害,还是添加buff,则通过击中运行的触发器来实现,这点和触发器中发射子弹的动作是一致的。

编辑器子弹说明:

触发器动作

说明

技能发射追踪子弹

只能对单体造成伤害,而且在发射的瞬间就决定了要飞向哪个单位

技能发射直线子弹

直线子弹有体积,击中目标以及子弹到达目的地都可以添加触发器

技能发射扇形子弹

扇形子弹可以一次发射多个直线子弹,而且被1次发射的扇形子弹中的多发子弹击中也只会造成1次伤害

技能发射抛物线子弹

抛物线子弹只有在落地时才能添加触发器,而且需要在技能上额外配置“子弹高度”的参数

技能发射闪电链

闪电链可以在多个目标单位之间进行数次传递。传递时优先寻找式神其次寻找未被传递过的目标

6.注册单位技能事件

在前面的章节已经说过,注册单位技能事件主要用于实现被动技能,通过技能去关注某个单位发生了什么事情。

自定义技能默认不会注册任何单位技能事件,需要我们根据需求自行添加,添加之后会一直进行监听,系统不会自行撤销,所以如果希望不再监听单位技能事件,需要使用触发器动作取消注册。

image029

在注册事件触发时,会运行一个触发器,这个被运行的触发器可以根据注册的事件获取特定的事件信息。比如,选择“单位死亡”这个事件,触发器配置窗口的右上角会出现【事件信息】的按钮,点击可以看到里面有“技能事件施法单位”和“技能事件目标单位”两个参数,则在单位死亡事件触发时运行的触发器里面可以直接通过这两个参数来指代杀手和被害者。正如触发器中如果事件是“任意玩家点击地图时”,在动作中可以使用“触发玩家”指代进行点击的玩家。下面表格给出不同单位技能事件的事件信息

单位技能事件

事件信息1

事件信息2

事件信息3

事件信息4

事件信息5

单位升级

 (无)

 

 

 

 

单位复活

 (无)

 

 

 

 

单位死亡

技能事件施法单位

技能事件目标单位

 

 

 

击杀单位

技能事件施法单位

技能事件目标单位

 

 

 

受到普攻

技能事件施法单位

技能事件目标单位

技能事件普攻伤害

技能事件攻击是暴击

技能事件技能

造成普攻

技能事件施法单位

技能事件目标单位

技能事件普攻伤害

技能事件攻击是暴击

技能事件技能

受到伤害

技能事件施法单位

技能事件目标单位

技能事件受到伤害量

技能事件攻击是暴击

技能事件技能

造成伤害

技能事件施法单位

技能事件目标单位

技能事件受到伤害量

技能事件攻击是暴击

技能事件技能

受到暴击伤害

技能事件施法单位

技能事件目标单位

技能事件暴击值

技能事件技能

 

造成暴击伤害

技能事件施法单位

技能事件目标单位

技能事件暴击值

技能事件技能

 

造成治疗

技能事件施法单位

技能事件目标单位

技能事件治疗量

 

 

受到治疗

技能事件施法单位

技能事件目标单位

技能事件治疗量

 

 

吸血回复

技能事件治疗量

 

 

 

 

造成debuff

技能事件目标单位

技能事件技能

技能事件buffID

 

 

受到debuff

技能事件技能

技能事件buffID

 

 

 

释放技能

技能事件技能

 

 

 

 

技能消耗资源

技能事件技能

技能事件资源消耗数值

 

 

 

发出打击

技能事件技能

 

 

 

 

技能打断

技能事件技能

 

 

 

 

读条打断

技能事件技能

 

 

 

 

发射子弹

技能事件技能

 

 

 

 

技能结束

技能事件技能

 

 

 

 

技能进入CD

技能事件技能

 

 

 

 

普攻替换

技能事件技能

技能事件施法单位

 

 

 

技能替换

技能事件技能

技能事件施法单位

 

 

 

技能切换

技能事件施法单位

技能事件切换目标技能

技能事件技能格

 

 

自动切换回初始技能

技能事件施法单位

技能事件技能格

 

 

 

切换战斗状态

技能事件单位在战斗中

 

 

 

 

助攻

技能事件施法单位

技能事件目标单位

 

 

 

被击飞

技能事件施法单位

 

 

 

 

瞬移

 

 

 

 

 

最大生命值变化

技能事件原数值

技能事件新数值

 

 

 

最大法力值变化

技能事件原数值

技能事件新数值

 

 

 

攻击速度变化

技能事件原数值

技能事件新数值

 

 

 

法力值为0

 

 

 

 

 

需要注意的是,单位技能事件有专门的一套函数,不能和已有的函数混为一谈,比如上述的“技能事件目标单位”≠ “施法目标单位”。单位技能事件的可用函数都是以“技能事件”四个字开头。另外,技能也要注意,“技能事件技能”≠“触发技能”

下面通过例子展示实现效果:技能施放单位击杀其他单位时恢复自身5%生命值 的流程

image030

需要注意,主动技能也可以注册单位技能,可以根据技能效果灵活配置效果,并非只有被动技能可以注册单位技能事件。比如要实现一个技能“水月架势”,点击后施放单位进入防守状态,防守状态期间受到任意伤害都会使攻击者被击飞,则需要在主动施放技能后注册“单位受到伤害”的技能事件,并且在技能结束时取消注册技能事件。

编辑器进阶

作者: 2021-10-12

编辑器进阶内容一、自定义表格编辑器中提供了一种读取Excel表格的方式,便于数据的管理和数据的初始化自定义表格的创建和修改只支持在PC端上进行,在手机端上只能读取表格每个地图都可以创建一份对应的Excel表格文件。默认情况下创建地图时不会创建表格表格使用的总体流程是:创建表格->修改表格->转换数据创建表格的流程见下图创建了表格之后,点击【打开表格】,可以对表格中的内容进行编辑。

编辑器进阶内容

一、自定义表格

编辑器中提供了一种读取Excel表格的方式,便于数据的管理和数据的初始化

自定义表格的创建和修改只支持在PC端上进行,在手机端上只能读取表格

每个地图都可以创建一份对应的Excel表格文件。默认情况下创建地图时不会创建表格

表格使用的总体流程是:创建表格->修改表格->转换数据

创建表格的流程见下图

创建了表格之后,点击【打开表格】,可以对表格中的内容进行编辑。如果个人PC上没有安装Excel文件的编辑软件,则无法打开表格。另外编辑器只支持xlsx格式的表格文件,xls文件暂不支持

表格中有一套规定的配置方式,每份表格中都有给出具体的使用规则,在填写数据时需按照规则使用,否则会导致数据读取失败,使用规则如下

1.dataname、datatype、dafault,每个表格中都必须要有这三个单元格,而且不能有其他单元格的命名与其重复

2.当编辑器读取到dataname这个单元格时,才会开始进行数据的转换,在dataname之前的单元格可以填写任意内容,不会影响数据转换。比如当前表格,第一行,第一列都是不会被转换

3.dataname这一行表示数据名字,不同数据之间名字不能重复,如果dataname为空,则读取数据时整列都会读取失败

4.datatype这一行表示数据对应的数据类型,可用的数据类型有8种:整数(int)、浮点数(float)、字符串(string)、布尔值(bool)、单位类型(unittype)、点(pos)、物品类型(itemtype)、数组(list),可根据实际需要输入任意数据类型对应的英文。如果datatype为空,则读取数据时整列都会读取失败

5.单位类型、物品类型,输入的是编辑器中的ID,在编辑器中调用时会自动返回单位类型、物品类型等,无需额外进行转换

6.数组内的不同子数据之间,需要通过 | 竖线符号进行分隔。数组内只能使用:整数、浮点数、字符串、布尔值、点 这5种类型的数据

7.第一列有效的数据作为索引的依据,必须为string类型,而且该列的指不能重复。其他列无硬性规定,可以使用任意类型且值可以重复

8.default可以为空,如果填写了default,则该列下空白的单元格会使用default的值作为默认值

9.支持使用多个页面,每页最多9999行,9999列

10.目前仅支持xlsx类型的表格文件

在填写好数据之后,保存表格,然后需要回到编辑器中,点击【生成数据表格】,表格中的数据只有经过转换之后,才能够被编辑器识别使用,所以要养成每次改完表格之后生成数据的习惯

表格以及生成出来的数据,在上传游戏地图时,会同时被上传到云盘。玩家游玩地图时,则只会读取数据,不会将表格下载到本地,避免玩家修改游戏数据。

准备好数据之后,就可以在触发器中直接读取。编辑器中提供了两种读取表格的方式,一种是根据表格的行列位置进行读取,另一种是根据表格对应行列的名称进行读取,下面展示读取表格中的整数的步骤

配置后的效果如下图,实际上,这两种表达方式最终都指向了同一个数据,返回同样的整数

根据顺序读取表格的好处是方便进行遍历,而且配置简单;根据字段读取表格的方式则可以保持数据顺序的稳定,在表格中任意位置插入新的数据都不会影响原有的数据的相对位置。可以根据实际需要选择读取方式

同时,也可以将表格任意的行,以及表格中除第一列以外任意的列直接转换成一个字典数据,使用官方提供的字典函数即可

二、迷雾功能

迷雾功能涉及引擎功能,如果在编辑器中找不到相关设置,请下载最新的安装包覆盖安装最新的编辑器客户端

迷雾常见于RTS游戏中,用于限制视野,使游戏更加具有探索感,而且可以分别设置不同单位拥有不同的迷雾视野

在设置界面,找到“游戏设置“分类,再找到地图视野部分,即可找到迷雾相关的配置

战争迷雾开启,则只要探索过地图上的区域,就可以保留探索时看到的地形的情况,以及该处的装饰物的摆放。对于玩家来说,第一次探索相当于开图

地形迷雾开启,则只有单位当前的迷雾视野范围内的地形情况会被保留,其他没有视野的地方都会被黑色迷雾遮挡。需要玩家记住整个地图的情况

在单位属性的配置中,有两个视野配置:攻击视野 以及 迷雾模式下视野范围,这两个视野互相独立

攻击视野主要用于AI的攻击行为,AI只会攻击视野范围内的单位。迷雾视野则用于控制玩家屏幕的迷雾显示范围。迷雾视野比攻击视野大,则可以提前看到敌人,而敌人无法发现自己,反之,则自己没有看到敌人,就会被敌人先攻击

迷雾的总开关除了在设置面板进行配置,还可以在游戏中通过触发器实时修改。

在触发器动作的视野分类中,可以找到”设置战争迷雾“、”设置地形迷雾“、”清除历史视野“、”设置战争迷雾浓度“这几个触发器动作,实时修改迷雾效果

触发器动作的单位分类中,通过”设置单位属性“这个动作,实时修改单位的迷雾视野范围

玩家在游玩开启了迷雾效果的地图时,也会进行版本检测,如果玩家的客户端版本太低,就会无法开启带迷雾的游戏地图,需要安装最新的游戏客户端才能够进行游玩

三、式神染色

式神可以通过染色功能修改配色。

目前染色功能只支持式神原皮肤的替换

在“自定义”面板选中“单位属性”,再选中希望修改的式神,找到外观属性

使用染色功能需要两个步骤

1,“是否开启染色”这个配置需要勾选

2,点击“自定义染色”配置,进入预览界面,进行染色设置

每个可染色的式神都规定了3个区域可染色,每个区域的颜色各自独立

保存之后,直接将式神拖到场景中,或者通过式神类型创建式神单位,都会使用染色后的效果

建议每次染色时,都从原单位复制一个新的单位出来,专门用于染色的表现

单位染色功能也可用通过官方提供的触发器动作在运行时直接修改

四、自动拾取道具

在RPG游戏中,如果怪物会频繁掉落道具的话, 则玩家也需要频繁进行拾取,为了解决该问题,引入了自动拾取的机制

在设置界面点击“游戏设置”,然后找到“自动拾取物品”的相关配置

默认没有勾选任何可自动拾取的物品品质,勾选后则开启自动拾取功能,且可以勾选多个

设置界面中的自动拾取配置仅针对玩家主控的单位生效,只要启用了该功能,所有玩家主控的单位都会自动将拾取半径范围内的道具拾取到背包内

只有背包空间充足时,才能完成自动拾取,当背包已满,将无法拾取符合品质的道具

另外可以通过触发器动作“开启自动拾取效果”指定具体玩家开启效果。

五、富文本

编辑器中支持修改字体颜色的富文本效果,在配置游戏中显示的文字时,都可以尝试使用富文本

改变字体颜色的方法就是在文字前添加语句“#cffffff”,其中的ffffff表示16位的颜色代码,可以填写任意自己喜欢的颜色。颜色代码不区分大小写。

另外如果不再使用文字变色效果,则在文字后面添加“#n”即可

同时编辑器提供了实时预览文字效果的功能,无需运行游戏即可看到富文本表现。点击界面上的【预览】按钮即会弹出新窗口

六、参数复制与粘贴

在配置触发器参数的时候,经常与遇到一个参数非常难读取或参数写的非常长的情况,如果这个参数是需要在多处参与运算的话,就需要重复填写很多次,增加了工作量和失误成本,这时使用复制粘贴参数的功能就非常方便,尤其是在参数进行自增操作的时候。

如下图,造成伤害的伤害值是一个复杂的参数,既有数组又有自定义属性。我们可以把这个复杂的参数看作一个整体,进行整体的复制与粘贴

下面展示复制参数的流程

复制后的参数会完整地保存在编辑器粘贴板中,可以不限次数快捷赋值给新的触发器,下面展示赋值的过程

在粘贴参数之前, 需保证已经复制参数到粘贴板中,否则粘贴参数时,该选项为空

粘贴板中,每一种类型的数据都能够保存一个,而且每种类型都只能有一个,添加新的数据,会将老的同类型数据顶替。

举个例子,先将整数参数A复制到粘贴板,然后将浮点数参数X复制到粘贴板,因为两个参数数据类型不同,所以这两个参数都能够存下来。如果再将一个整数参数C添加复制到粘贴板,则A就会被顶替掉

七、触发器阻塞

假如一个触发器会在事件触发时执行很多动作,而事件又是频繁触发的事件,就会发现逻辑执行的顺序有可能会变得奇怪

举个例子,有这样一个触发器,当任意单位死亡时,会对一个全局变量进行+1,然后判断该全局变量是否大于等于50,如果等于50,则凶手单位所属玩家获得100金币,并且全局变量归零,如下图

在我们的预期中,杀死第51个单位时,全局变量应该=1,然而在实际游戏中却有可能出现全局变量killnum=51,发放了两次金币的情况。这是触发器的机制导致的

在触发器运行时,只要满足条件,就会复制该触发器,创建一个触发器实例,在触发器实例中运行动作。触发器与触发器实例的关系类似于单位类型与单位,一个是模板,一个是实际的对象

如果凶手单位施放了一个范围技能,同时杀死了10个单位,则会在一瞬间创建10个上述的触发器实例,并且这些触发器都会各自运行自身的动作,就有可能第一个触发器在将killnum归零的时候,第二个触发器已经通过了条件判断,也会执行接下来的动作

所以,在触发器事件容易并发时,我们需要添加触发器阻塞来阻止触发器实例同时运行,使用方法就是将所有触发器动作添加到“阻塞触发器副本”这个动作下

这样子做之后,触发器也会创建多个触发器实例,但是触发器实例会进行排队,只有在上一个触发器的所有动作都做完以后,才会运行下一个触发器副本,防止了多个触发器实例同时运行的情况

并不是所有触发器都适用于添加阻塞。比如上述的触发器,如果在任意单位死亡时不修改全局变量,只是给玩家添加金币,不涉及先后顺序判断的问题,则完全可以不使用阻塞触发器

平安京Uni对战平台