Y3编辑器地图教程:ORPG教程、防守图教程

文章目录

  • Part1:ORPG教程
    • 一、章节人物选择
      • [1.1 Logo与界面动画](#1.1 Logo与界面动画)
      • [1.2 章节选择与投票](#1.2 章节选择与投票)
        • [1.2.1 设计章节选择完毕后的操作](#1.2.1 设计章节选择完毕后的操作)
        • [1.2.2 玩家投票统计](#1.2.2 玩家投票统计)
      • [1.3 多样化的人物选择系统](#1.3 多样化的人物选择系统)
        • [1.3.1 异步模型显示](#1.3.1 异步模型显示)
        • [1.3.2 双击和键盘选人](#1.3.2 双击和键盘选人)
        • [1.3.3 UI选人](#1.3.3 UI选人)
      • [1.4 简易存档](#1.4 简易存档)
    • 二、对话与任务系统
      • 2.1对话UI与触发函数
      • [2.2 功能对话](#2.2 功能对话)
      • [2.3 实现可变对话(不同阶段对话内容不同)](#2.3 实现可变对话(不同阶段对话内容不同))
      • [2.4 异步对话(这视频看的我头疼)](#2.4 异步对话(这视频看的我头疼))
      • [2.5 游戏任务的对话与任务系统](#2.5 游戏任务的对话与任务系统)
    • 三、技能与战斗系统
      • [3.1 单位物编设置](#3.1 单位物编设置)
        • [3.1.1 自定义血条](#3.1.1 自定义血条)
        • [3.1.2 特效添加与特效编辑](#3.1.2 特效添加与特效编辑)
      • [3.2 技能](#3.2 技能)
        • [3.2.1 指向性技能](#3.2.1 指向性技能)
          • [3.2.1.1 物编设置](#3.2.1.1 物编设置)
          • [3.2.1.2 触发编写](#3.2.1.2 触发编写)
        • [3.2.2 地面类技能](#3.2.2 地面类技能)
          • [3.2.2.1 物编设置](#3.2.2.1 物编设置)
          • [3.2.2.2 触发编写](#3.2.2.2 触发编写)
        • [3.2.3 直线穿透类技能](#3.2.3 直线穿透类技能)
        • [3.2.4 多段技能](#3.2.4 多段技能)
        • [3.2.5 D闪和传送](#3.2.5 D闪和传送)
          • [3.2.5.1 传送技一段(强制移动)](#3.2.5.1 传送技一段(强制移动))
          • [3.2.5.2 传送技二段(瞬移)](#3.2.5.2 传送技二段(瞬移))
          • [3.2.5.3 D闪](#3.2.5.3 D闪)
      • [3.3 战斗与升级设置](#3.3 战斗与升级设置)
    • [四、刷怪与BOSS AI](#四、刷怪与BOSS AI)
      • [4.1 练功房刷怪](#4.1 练功房刷怪)
        • [4.1.1 刷新小怪](#4.1.1 刷新小怪)
          • [4.1.2 制作BOSS血条](#4.1.2 制作BOSS血条)
      • [4.2 野怪刷新](#4.2 野怪刷新)
      • [4.3 BOSS技能制作](#4.3 BOSS技能制作)
    • 五、装备系统(这部分视频里讲的太烂了)
      • [5.1 装备栏制作](#5.1 装备栏制作)
        • [5.1.1 UI制作](#5.1.1 UI制作)
        • [5.1.2 装备物编设置](#5.1.2 装备物编设置)
        • [5.1.3 触发编写](#5.1.3 触发编写)
      • [5.2 装备强化](#5.2 装备强化)
        • [5.2.1 思路一(失败)](#5.2.1 思路一(失败))
        • [5.2.2 思路二](#5.2.2 思路二)
      • [5.3 装备洗练](#5.3 装备洗练)
      • [5.4 装备合成](#5.4 装备合成)
      • [5.5 套装系统](#5.5 套装系统)
    • 六、存档(待补)
  • Part2:防守图教程
    • 一、游戏开发引导
    • 二、游戏模式/英雄选择
      • [2.1 游戏难度选择](#2.1 游戏难度选择)
        • [2.1.1 UI制作](#2.1.1 UI制作)
        • [2.1.2 触发编写(遍历控件列表)](#2.1.2 触发编写(遍历控件列表))
      • [2.2 英雄选择](#2.2 英雄选择)
    • 三、技能制作
      • [3.1 投射物技能](#3.1 投射物技能)
      • [3.2 范围伤害技](#3.2 范围伤害技)
    • 四、刷怪机制
    • 五、练功房制作
      • [5.1 物编和界面设置](#5.1 物编和界面设置)
      • [5.2 触发编写(计时器暂停和恢复、不同玩家刷怪差异化)](#5.2 触发编写(计时器暂停和恢复、不同玩家刷怪差异化))
    • 六、副本设定
      • [6.1 物编设定](#6.1 物编设定)
      • [6.2 触发编写](#6.2 触发编写)
    • 七、物品设定(测试掉落事件)
      • [7.1 物品掉落](#7.1 物品掉落)
      • [7.2 物品合成](#7.2 物品合成)
      • [7.3 物品说明修改](#7.3 物品说明修改)
      • [7.4 添加物品功能(增益属性、动态触发器)](#7.4 添加物品功能(增益属性、动态触发器))
      • [7.5 如何创建背包系统](#7.5 如何创建背包系统)
    • 八、Boss设定
      • [8.1 BOSS血条](#8.1 BOSS血条)
      • [8.2 触发编写](#8.2 触发编写)
      • 九、存档
      • [9.1 通关难度存档](#9.1 通关难度存档)
      • [9.2 物品存档](#9.2 物品存档)
    • [十、商城道具(待补)](#十、商城道具(待补))

Part1:ORPG教程

一、章节人物选择

参考《海豹ORPG教程》

ORPG是一种在KK对战平台非常火的游戏形式。ORPG是在线角色扮演游戏,其中剧情的代入感是非常重要的一部分。 通过几个课程,我们会简单介绍一下ORPG制作过程中最需要的一些模块。下面是作者制作的一个游戏地图选人模块。当点击UI选择人物后,还可以存储一些装备。本节课暂不涉及装备存储,重点讲解数值存储。


1.1 Logo与界面动画

本节将实现以上现章节选择及界面切换效果 ,主要涉及图标的缩放与移动。比如:

  • "符文之语"图标从中间缩放并挪到左上角
  • 左侧弹出章节选择界面,右侧弹出人物选择界面

下面实现一个简单的案例,虽然画面较简陋,但效果相似。

  1. 创建画板 :打开UI编辑器,创建画板,简单设置Logo和背景图标,并填充画板。

  2. 制作界面选择按钮

    • 使用按钮模块制作章节一和章节二两个图标。按钮的好处是可设置按钮在不同状态下(进入、离开、点击、禁用)的图标。
    • 添加按钮的点击事件,并设置点击音效及对应动作。
  3. 动画制作

    • 点击动画编辑,在弹出的窗口中点击加号添加动画组。

    • 新建"控件轨道",选择需要制作动画的控件,拉动帧条,可以查看每一帧的参数。

    • 在第30帧插入关键帧,调整变换后logo的大小,通过帧的位置可修改动画速度(一帧是0.03秒)。 另外除了简单的线性移动,还可以选择更复杂的非线性方式。

    • 在第60帧插入关键帧,调整变换后logo的位置

  4. 动画优化 :我们想要实现的一个效果是,两个章节按钮在游戏开始的时候是不显示的,当我们图标移动到一定位置之后才显示,下面是调整之后的帧动画:

  5. 触发器绑定 : 在触发器中设置界面动画为本地玩家触发(本地玩家指的是所有玩家)。

1.2 章节选择与投票

1.2.1 设计章节选择完毕后的操作
  • 在地图上放置模型并设置镜头,调整俯仰角、距离和高度,展示模型的最佳视角。
  • 设置章节选择触发:倒计时结束后应用此镜头,并隐藏章节选择UI。

1.2.2 玩家投票统计
  1. 倒计时模块 :设置一个30秒倒计时,强制玩家做出章节选择
  2. 统计玩家数量 :遍历本地玩家,判断是否是用户玩家(非电脑玩家)且未掉线。
  3. 统计投票结果:根据统计结果判断是否所有玩家已投票完成,若已完成,做出选择章节之后的操作(代码看个大概吧)。
  4. 投票强制机制 :倒计时结束后,强制未选择的玩家做出选择。


1.3 多样化的人物选择系统

1.3.1 异步模型显示
  • 异步显示模型 : 使用本地玩家条件实现异步模型显示,保证每位玩家的选择互不干扰。 异步也可以用来做引导箭头等等。
  • 异步限制 : 避免异步逻辑与伤害事件挂钩,也不要异步创建单位,以免造成不同玩家之间的战斗结果不一致。
1.3.2 双击和键盘选人
  • 建立一个简单的一维表,1-6映射不同的英雄类型。

  • 玩家按键后更新当前显示的英雄模型,仅本地玩家生效,其他玩家的显示保持独立。


  • 投票完成后才进入选人环节,此时玩家ID不为0;玩家目前没有确认英雄,其选择索引为空

  • 当玩家按下⬅,将当前玩家选择的英雄的索引-1;对应的按下➡,将当前玩家选择的英雄的索引+1。

  • 一共只有6个英雄,当索引减到0的时候,将其重置为6;当索引加到7的时候,将其重置为1

  • 异步判断:显示模型前,添加一个判定条件:获取当前事件的玩家是否是本地玩家 ,这样显示操作就是异步的,只有按了键盘的玩家才会执行后续的动作。

  • 当玩家确认选择后,隐藏选择的英雄模型。由于没有这个ECA语句,所以直接将模型缩放为0

投射物在没有碰撞前可以异步,不碰撞就没有碰撞事件,模型和路径可以不一样。但是投射物碰撞了就会有问题,模型可以不一样,但是大家的碰撞体积得一样,大家碰撞时候的移动路径得一样。

下面是双开测试结果,只在模型显示上异步,对模型的鼠标移动等操作是一样的:

1.3.3 UI选人
  • 图标裁剪与高亮 : 使用UI编辑器制作圆形裁剪图标,鼠标悬停时高亮显示。
  • 触发器批量注册 : 使用触发器批量生成UI按钮,并绑定对应的触发事件,减少手动重复操作。

使用遮罩功能,可简单实现英雄的头像图标 。

  • 插入空节点,选择一个圆形头像框,勾选是否裁剪,选择框体裁剪
  • 插入图片控件,将其作为空节点的子节点,选择角色图像

通过这种方式,实现鼠标悬停时高亮显示(头像周围显示圆形白色边框):

通过循环创建6个英雄头像:

通过子触发器实现进入、离开、点击逻辑:

按下回车键或者在UI界面点击确认选择后,更换模型,隐藏UI选择界面:


1.4 简易存档

存档可以保存玩家的选择状态,比如每个英雄被选择的次数。Y3的存档的槽位是100个,测试结果:存1万个字符串根本就没有任何延迟,存10万个字符串可能延迟了1秒,存100个字符串会死机。

选择表格存档,英雄被选次数预设为0。要注意的是,多维表不保存的话游戏中是读不到的,一定要保存之后才是有效的。


二、对话与任务系统

2.1对话UI与触发函数

首先实现最基础的功能------点击NPC弹出对话框:

在ORPG游戏中,一般设置玩家只有一个英雄,那么当玩家点击非英雄单位的时,应该弹出对话框而不是显示这个单位的控制面板,所以定义了以下触发:当玩家选择的单位并非自己的英雄,而是NPC时,关掉单位选择触发器,让玩家强制选回自己的英雄,然后再打开选择触发器,防止出现玩家无法操作自己的英雄(点击NPC不影响我们操作英雄)。

接下来,我们可以使用多维表存储和调用对话内容,比如:

但是为了统一NPC对话接口,改用统一函数更方便。

  1. UI设计

添加两个选项的进入、离开、点击事件:

  1. 定义NPC统一对话函数
    • 避免重复对话:先通过玩家自定义键值,判断一下当前是否有正在进行的对话。如果没有,我们就可以把当前NPC设置为我们正在对话的NPC。
    • 设置对话界面NPC模型和名称
    • 根据对话NPC单位类型,获取其对应的对话多维表;
    • 根据对话级别获取多维表中的对话内容,没有这个级别就隐藏对应选项。没有给出级别时,默认级别为1。



在选中事件中,添加NPC对话函数的调用:

  1. 定义初始化对话函数:用子触发器的形式把进入、离开、点击三个事件注册出来。之所以用子触发器主要是因为它可以对这个事件名做一个字符串便利拼接,多个对话选项注册很快。


  • 定位:点击事件先定位触发对话的NPC,然后定位是哪一级对话,最后定位此NPC这一级下对应的对话多维表中的对话内容
  • 跳转:如果这一级表下面有跳转功能,就跳转到对应级别的对话。如果没有,就点击后隐藏对话界面。

通过以上方式,可快速实现多个NPC的对话系统。最后,在玩家确认选人1秒后,自动弹出新手指导对话:

2.2 功能对话

可以在对话中实现一些功能,比如打开商店:

如果对话中存在功能字段,就执行对应的功能,比如打木桩,或者打开商店。


在触发玩家对话函数中,添加功能效果:

2.3 实现可变对话(不同阶段对话内容不同)

无论对话中选了哪个选项,都执行功能3------改变一下默认的对话层级,比如改为4,其对应内容假设为:你真帅。这样我们在第一次对话之后,无论再和他说什么,她都会回答你真帅。这种设计较适合于我们做那种剧情的变化,在不同的时间阶段,NPC会说一些不同的话。

2.4 异步对话(这视频看的我头疼)

游戏中玩家之间的对话不是同步的,因此需要设计不同的引导步骤来适应不同玩家的进度。

  • 将引导和不同引导的功能号分别设置为4和3,以便区分不同的引导步骤。2级对话内容改成了请你找一下商店NPC,然后并不需要给它回答,这样的话我们点击它就消失了,因为这个对应的是功能1,对应的是动作4。

  • 创建引导图标 :在玩家点击"我要引导"后,执行功能四,创建一个引导图标(橙色标记),表示需要与NPC对话。

  • NPC商人对话修改:因为是新手指导过来对话,所以需要设置NPC商人的默认对话,使其与正常购买商品时的对话不同。每个NPC自带一个多维表,其索引为玩家ID,值(对话等级)设为2,这样不同玩家显示的对话不一样。

    多维表中的默认值用于在没有玩家特定值时提供默认参数。交互时,每个玩家的参数不同,因此需要带上玩家的所有参数。

  • 确认选择的修改 :为了保证这个功能的实现,在确认选择时,需要判断NPC是否存在当前对话单位的表,以及玩家是否与NPC有过交易。如果有交易,则跳转至特定对话;如果没有,则不跳转。

  • 对话结束处理:在对话结束时,需要删除强制对话级别或将其设置为零,以确保对话只发生一次。

  • 任务系统UI与函数实现:修改商人的第一次对话内容,使其在第一次对话时提供特定的信息,并在功能5中移除头顶的箭头。

2.5 游戏任务的对话与任务系统

任务系统一般有一个更清晰的任务栏,让我们能够看到任务的进度。下面是完整的新手任务代码及其实现效果(这里一次只能接一个任务):

  1. 任务表

  2. 发布任务

    • 设置玩家当前任务为对应的任务索引
    • 将玩家添加任务完成进度和任务要求两个自定义键值,方便后续调取
    • 设置关键字符串和原始字符串,设置当前任务面板为展示字符串,#000000表示文本为白色。
    • 在商人对话中添加发布任务的代码
  3. 监测任务完成进度

    如果任务current+1≥任务max,表示任务完成。如果还有下一个任务(任务表中存在id+1),则继续派发下一个任务。

  4. 发放任务奖励:根据当前完成任务的id,直接发放奖励

如果希望完成任务后NPC还能说几句对话,任务多维表中可以再加一列:

任务完成时检测是否还有对话:

三、技能与战斗系统

3.1 单位物编设置

3.1.1 自定义血条

血条在游戏中不仅仅只是显示角色的生命值,优秀的血条设计还能提供战斗反馈、衡量战斗能力并增强游戏沉浸感。本教程将介绍怎么利用编辑器制作出我们想要的血条效果。

首先在物编中选中任意单位,在表现页面点击血条样式后的编辑按钮,呼出血条编辑器。点击+即可新建一个血条,点击对应按钮添即可加组件(进度条、图片、文本)。

  • 进度条:封装多张图片实现血条、蓝条等进度条的显示功能,包括过渡效果(渐变效果)、区分敌我显示、护盾效果、刻度显示等功能,勾选后即可使用。
  • 图片:常用来制作类似血条背景、连击点等血条内容
  • 文本:常用来显示角色名称、玩家名称、等级等信息

要实现进度条的过渡效果和护盾效果,一定要选择几个原始尺寸完全一致的进度条,否则会有bug(不兼容)。

生成顺序调整:血条严格按照由上往下的顺序生成,后生成的内容会放在上面,可自行调整。制作完成后点击保存,就得到了一个自定义血条,可以用ECA进行相关显隐以及内容的调整。


下面是做的一个区分敌我的自定义血条,除了显示血量,还显示英雄等级。

3.1.2 特效添加与特效编辑

开启菲涅尔效果,模型会有发光的感觉,可以设定精英怪开启此效果。

设置普攻类型后,可以编辑普攻相关属性。

你也可以在这里直接加普攻出手特效:

比如想做一个飞剑类的特效(资源管理器-特效),下面这个是紫色剑气,效果不错,但想改成一把火剑,可以右键单击,点击编辑,列出很多组件,此时可以进行自定义修改。

改完另存一个特效名。右键点击,选择创建到物编,即可在投射物中看到此新建特效:

3.2 技能

3.2.1 指向性技能
3.2.1.1 物编设置

下面是张飞的一个指定目标冲锋技能:

点击公式图标,在弹出面板中,可以设置伤害等数值和单位的各种属性挂钩。比如选择当前生命值和技能等级,就可以做成一个血牛类的技能。

  • 施法开始:可简单理解为施法前摇,还没有真正的触发伤害,一般是播放一个动画效果
  • 施法引导:真正的施法开始过程
  • 施法完成:施法后摇,可以做一些效果
3.2.1.2 触发编写
  1. 施法开始
    • 施法开始时播放张飞的攻击动画2(ability_2),播放到-1秒表示无论动画持续多久都播放到最后。"结束后是否回到默认动画"一般选择True,否则播放完单位就卡着不动了。
    • 给张飞添加一个刀光拖尾的特效,可选参数中选择持续时间为1秒,这样1秒后特效自动消失(为什么设置的是特效类型的组变量而不是局部变量呢?)
  2. 施法引导:指向性技能,一般使用追踪运动器。对作用到的单位会创建一个受击特效 ,这里挂接点选的root

      勇冠三军魔法效果如下,这里是对单位创建运动器,所以是单位飞出去 ,以达到击飞的效果。另外还添加了晕眩魔法效果。

3.2.2 地面类技能
3.2.2.1 物编设置

比如刘备的龙皇降世技能,对地面一定范围内的敌人造成攻击,并群体回血。指示器选择圆形指示器(地面):

可以在物编中通过设定一些自定义键值,在后续触发中进行调用:

3.2.2.2 触发编写

简单一点的地面类技能,也可以不使用投射物,直接在点创建特效,然后造成伤害就可以了。

3.2.3 直线穿透类技能

这类技能比较简单,一般使用箭头指示器。下面是黄忠的技能,有造成伤害和后跳两个效果,所以创建了两个直线运动器。

  • 直线运动器1:是为技能拥有者创建angle+180方向的直线运动器,也就是黄忠后跳。后跳时碰到障碍物会被打断。
  • 直线运动器2:会对碰撞到的单位造成法术伤害。如果碰撞范围设置的太小,就比较难打到人,也就不会造成伤害,一般设置100以上(也就是一个格子) 。这里还可以添加受击特效,比如加上:

    下面是代码中创建的强弓箭矢投射物:
3.2.4 多段技能

以赵云的技能龙枪为例,这个技能分为龙枪和龙枪-出,使用技能点学习的时候,会同时学习这两个技能。然后在技能龙枪施法之后,会交换一下技能的位置,隐藏龙枪而出现龙枪-出。

  1. 龙枪:

    当获得龙枪时,同时获得了龙枪-出,方式是为单位添加龙枪-出隐藏技,学习时效果也一样。


  2. 龙枪-出

  3. 投射物龙枪

  4. 魔法效果:龙枪-击飞

3.2.5 D闪和传送

D闪和传送的关键是快捷键的放在哪个位置,注意判断目标位置是否可以通行。在施法开始时可以创建一个传送特效,然后在施法引导阶段直接移动单位。单位的移动分为强制和瞬移,两种都可以用。强制的好处是它可以加一个平滑移动,如果你用计时器移动的话,可以看到画面是很平滑的。

  • D闪:一般是直接闪现到鼠标位置,所以不需要使用指示器。
  • 传送:可以传送到某个单位身边或者传送到某个地点,所以指示器可以选圆形指示器(目标)、圆形指示器(地点),以及单位或地点。
3.2.5.1 传送技一段(强制移动)

以周瑜的传送技为例,有两个阶段,第一阶段为出奇制胜:

  1. 为此技能添加两个自定义键值StartXStartZ,存储传送前周瑜的位置,二段技能会返回此位置。
  2. 移动前创建蓝色上升 特效和投射物------出奇制胜-火海 ,持续4秒,火海会对275范围内的敌对单位造成FireDamage点伤害。
  3. 将周瑜移动到圆形指示器位置。
  4. 移动后0.2秒创建魔法扩散 特效,并为周瑜添加魔法效果:出奇制胜-标记 ,后者持续2秒,其作用为:
    • 获得时:将隐藏技------出奇制胜(二段)的等级设为英雄技------出奇制胜的等级,然后将这两个技能交换位置。
    • 失去时:再次交换这两个技能的位置



移动前创建特效-蓝色上升光效和投射物-出奇制胜-火海,伤害在投射物火海中体现:


移动后过0.2秒,生成魔法扩散特效,并为周瑜添加魔法效果:出奇制胜-标记

下面是周瑜的技能位,有四个英雄技和一个隐藏技。所以出奇制胜-标记 ,会先将隐藏技------出奇制胜(二段)的等级设为出奇制胜的等级,然后将这两个技能交换位置。

3.2.5.2 传送技二段(瞬移)


  • 一段技能中,将隐藏技出奇制胜(二段) 的技能等级设为英雄技出奇制胜 的技能等级,这里同样将隐藏技出奇制胜 的技能等级设为英雄技出奇制胜(二段) 的技能等级。
  • 2秒内可使用二段技能,将周瑜传送回原位置(StartX,StartZ)
  • 使用后移除出奇制胜-标记 ,移除时,会再次交换出奇制胜(二段)出奇制胜的位置,也就将两个技能重置回原位置。
3.2.5.3 D闪

D闪设置为从单位点移动到鼠标点方向,偏移600。要注意的是,获取鼠标坐标时不能使用鼠标的屏幕坐标,而应该使用获取鼠标在游戏内所在点,后者才是一个在所有玩家中同步的量。


3.3 战斗与升级设置

在细节-属性定义-英雄经验中,可以进行一些基础设置。比如获得经验的距离,最大等级,每级公式等。另外在物编里,可以设置每个单位被击杀可以获得多少经验以及金币。

上面的伤害计算,都是通过技能的自定义键值中的公式完成的。另一种方式是通过伤害事件来完成。

  • 造成伤害(即将开始):还没有进行伤害公式计算
  • 造成伤害(计算加成):伤害公式计算完成,但还没有计算护盾减伤。
  • 造成伤害(结算完成):已经造成最终的实质伤害,此时可以进行伤害的统计

    以下是设置造成100点伤害,这样无论什么技能,伤害都锁定在100点。

四、刷怪与BOSS AI

4.1 练功房刷怪

4.1.1 刷新小怪

练功房刷怪是一个常见功能,简单一点的就是在地图一角设置地形,做一个练功房,玩家传送进去就可以刷经验:

然后新建一个法师模型的单位用作传送师。这里单位头顶的名字不太好看,直接使用没有进度条的自定义血条来显示。血条字体使用浅黄,描边使用黑色,做成如下效果:

然后为这个传送师添加NPC对话,类似之前商人的格式,做一个功能7,直接将玩家传送到练功房。设置秒计时器,场上不满10个怪就在练功房随机位置补满10个怪。设置刷怪总数为100,刷完就删除计时器,并关闭此刷怪触发器。

在此基础上,可以加入精英怪和稀有怪的设定,模型可以放大一点,并加入菲涅尔效果或者自带buff特效,加点属性值,设置不一样的血条,以作区分。可以每隔多少个刷出一个特殊的怪,或者使用随机数判定来刷特殊怪。每次刷怪获取一个0到99的随机数,如果随机结果>80就刷出稀有怪,随机结果>50刷出精英怪。全部怪打完之后刷出一个小BOSS。

4.1.2 制作BOSS血条

BOSS一般会配一个专门的BOSS血条,显示在屏幕正上方。制作时,先插入一个空节点铺满整个屏幕,锁住四个角,能够保证里面的东西不会偏移。

按照自定义血条的设计方式,插入一个底板图片和一个进度条,以及一个显示单位名称的文本框:

给BOSS加一个字符串格式的自定义键值"类型",值为"BOSS"。当结算伤害是,如果有这个键,就显示BOSS血条界面。然后将进度条的值和BOSS血量百分比绑定,并显示BOSS单位名称,就OK了。


4.2 野怪刷新

野怪和练功房刷怪不一样的点在于,野怪会一直复活刷新,一般会一直刷在其出生点。一种方式是直接在地图上放置所有野怪,并设置为中立敌对,或者加一个"野怪"的自定义键值方便筛选。自定义键值的好处是,单位死亡时不会被删除,只有死亡单位被删除时才会被跟着删除,这中间一般有一两秒的间隙,可以在这个时候进行一个存储操作。

下面先做个全图野怪复活的函数,记录全图中立敌对的野怪单位的复活点。

在地图初始化时,就运行此函数:

在单位死亡事件中,实现野怪刷新逻辑:

4.3 BOSS技能制作

BOSS的多个技能切换,可以简单的在普攻中实现。首先复制一个通用近战攻击,重命名为BOSS近战攻击,其原始触发如下:

设置BOSS近战攻击的施法开始时间为2秒,这样在施法开始和施法引导中间可以做一个预警效果。下面先在施法开始阶段,设置一个随机数,并将其添加到BOSS的自定义键值中。然后根据此随机数大小,分别判断BOSS出什么技能。施法开始阶段只是播放2秒的预警特效,在施法引导阶段,才使出真正的技能并造成伤害。



五、装备系统(这部分视频里讲的太烂了)

本章分为以下几个部分:

  • 装备栏:添加一个装备栏系统,每个玩家可以装备8种装备,鼠标悬浮时可以查看属性。
  • 套装:给每一套装备增加一个"套装"自定义键值,并在初始化时做好各个套装的属性值。当玩家集齐一定数量套装时,就增加其对应的属性
  • 装备合成:Y3自带装备合成系统,直接AB换成C,写几个公式就行。
  • 装备强化:添加一个强化石物品,使用时让物品对我们的装备放一个技能,提高装备对应属性表里的数值,或者是增加一个属性表里没有的属性
  • 装备洗练:赋予装备属性随机浮动。

5.1 装备栏制作

5.1.1 UI制作

首先使用官方的物品组件,制作一个装备栏UI,每一个装备位置都是唯一的。武器分主手和副手,双手武器会占用两个位置。


然后做一个同样的UI,当玩家鼠标移动到某个装备栏时,就会显示这个装备的信息,否则隐藏信息。

下面是原始的地图UI模板,在人物栏左侧有背包图标及对应的快捷键显示。

现在在背包栏按钮上面添加一个装备栏按钮E,后续再做一个相关的关联,就可以实现这个装备栏的呼入呼出。

5.1.2 装备物编设置

使用一个多维表,存储这8个装备栏的相关信息,方便后续组件的调用。

5.1.3 触发编写
  1. 初始化阶段:将装备属性进行随机,做成类似roguelike的效果。随机属性100%表示在原有基础属性上浮动0-100%。如果设为True,则在获得装备时会强制进行随机初始化,造成装备洗练的效果。

  2. 装备初始化函数:

  3. 装备获得和失去函数:获得装备时,如果装备有属性表,我们就遍历属性表,一个一个给它加;反之则一个个的减。

  4. 装备系统初始化函数:

    • 首先添加装备栏按钮E的触发,按下就可以切换装备栏显示状态。
    • 用单位使用事件进行触发,将装备放入装备栏。每个装备添加一个空技能,叫"使用装备"

    • 如果使用单位是装备,先将其丢到一个角落。然后判断装备栏是否有同类型的装备。如果有,先减去玩家原先此类型装备的属性(逝去装备属性),并将其卸载到物品栏(转移物品给单位)。
    • 更新玩家此类型装备的自定义键值和装备图标,并添加此装备属性
    • 使用一个循环,注册这8个装备栏装备的进入(显示装备信息)、离开(隐藏装备信息)、点击(卸载装备)事件。点击时失去装备属性,并将装备转移到物品栏,同时删去玩家对应的自定义键值,并将此装备栏图片设为空。


      下面是效果展示:

5.2 装备强化

5.2.1 思路一(失败)

新建一个强化石物品,设置最大堆叠数为99,并添加强化装备主动技。

在物编中,添加一个强化装备技能,只能对物品进行释放。强化等级上限为9,每次增加装备所有属性的30%,并更新装备名称为装备类型名+强化等级。



但是实验发现方式不好刷新文本,单位属性和字符串之间的关联导致导致定位不出来,所以改为在装备初始化函数里,进行强化文本刷新等功能,在里面添加一个强化等级的逻辑就行。不强化的时候,装备是一个浮动值;强化后,浮动值固定。

5.2.2 思路二

之前是手动写了遍历攻击移动等属性,现在将这些属性添加到一维表里面,直接进行表的遍历。

判断装备是否存在这个索引,如果存在,强化时就在浮动值基础上再乘一个数值,算出结果,最后更新装备描述信息。


强化装备这个自定义技能也更新一下,还是在施法引导阶段编写触发。如果物品有属性表键值,表示是装备。如果有强化等级键值,就将其+1;如果强化等级小于9,调用装备初始化函数强化装备。

5.3 装备洗练

新建一个装备洗练技能,根据装备强化等级,对其属性值进行随机浮动,然后在制作一个洗练石物品(和强化石一样)。

5.4 装备合成

Y3编辑器自带装备合成功能。比如使用小斧子合成大斧子,攻击力+1000。

然后制作一个合成师NPC,在对话中添加一个功能8,执行合成的判定和执行。这里简单的以大斧子为例,判定玩家具有所有的合成材料,就移除这些材料并给玩家一个大斧子。

5.5 套装系统

为新手鞋和新手小斧子装备添加一个套装自定义键值:

然后在装备获得和失去里,进行套装属性的添加的删除。因为存在多个套装的可能,还是做成一个表进行遍历比较好。获得套装时,可以在玩家或者玩家单位上添加套装属性自定义键值,再添加对应的属性。

如果是套装,获得时先判断玩家单位是否有自定义键值-套装(属性表),没有就进行添加,并设置套装数为0。然后判断套装表中是否存在这个装备,如果有就将套装数+1,对应的再失去装备函数中,将套装数-1。



失去装备时,套装数>1,就将套装数量-1,并设置此位置套装为Fasle。



制作套装属性表,然后根据此套装表,增加对应属性就可以了。在装备初始化里面可以增加套装属性的显示。


六、存档(待补)

Part2:防守图教程

一、游戏开发引导

参考《防守图教程》

二、游戏模式/英雄选择

2.1 游戏难度选择

2.1.1 UI制作

新建一个空白项目,然后新建一个空节点,作为整个UI的父节点。插入背景图,可以编辑九宫缩放,使边界部分不跟随当前的图片的大小进行缩放,这样就不会被拉伸导致边界失真。

上图中,中间区域是可以随分辨率被拉伸的,四个角是不可拉伸的。

插入一个方形按钮,并复制4份,调整好大小和位置。再插入一个空节点,作为这5个按钮的父节点。

设置按钮的常态文本,并设置按下缩放比例为0.98,这样当玩家点击时,会有一个按下的效果。

可以额外设置通关难度一才能选择难度二。

2.1.2 触发编写(遍历控件列表)

现在为5个难度选择按钮注册左键单击事件,可以用下面的语句,但是要重复5次:

另一种方式是遍历父节点的所有子控件进行注册,设置一个局部变量i(默认0)作为遍历的序号。然后使用子触发器,编写按钮点击选择难度的逻辑。使用字符串转界面事件 ECA,触发按钮i点击事件。玩家选择完难度后,隐藏次控件,并记录玩家的难度选择i

在子触发器的条件中,可以额外设置初始化或存档等操作时,如果没有通关难度一,就无法选择下一个难度。

2.2 英雄选择

下面制作一个英雄三选一的功能。首先制作UI。在空节点中插入三张图片作为英雄展示背景。插入模型,镜头选择智能全身模式。对齐时,点击画布上方的刻度部分,拖住鼠标往下拉,会出现一个辅助线,可用于控件的辅助对齐;另外按上下左右方向键,可以进行位置的微调。插入两个文本框,用于显示英雄名称和简介,你也可以继续添加技能、天赋等文本介绍。

设置整个画板为隐藏,然后勾选拦截英雄选择图,表示鼠标事件不会穿过这一个图片控件,响应到底下去。

复制刚刚难度难度选择的触发,进行对应修改。这里就不是点选游戏难度,而是选择英雄类型,然后在英雄出生点创建英雄。

点击对应的英雄后,就在出生点创建了对应的英雄:

下面增加一个随机刷新的功能,先创建一个随机刷新按钮,因为只需要注册这一个,所以直接创建左键点击事件。

下面是对应的刷新触发,作者应该也是随便写的,封装成函数更好一点,或者直接轮着展示所有英雄。


三、技能制作

3.1 投射物技能

复制曹操模型到自定义文件夹,删去其原本的通用技能和英雄技能。首先制作一个投射物类技能,比如斩出剑气并附带加速效果 。观察模型动作,ability_2的0.28秒生成一道剑气是比较合适的,所以设置施法引导为0.28秒(可以拖动时间轴,查看具体的动作定格)。

创建一个剑气投射物:

创建一个加速魔法效果,重命名为测试超级加速,特效选择白色风漩涡。覆盖时间不变,表示即使新的魔法效果覆盖旧的,总的持续时间还是不变。循环周期影响的是触发器事件-循环周期到期。比如此效果持续10秒,循环周期设为10,那么每个周期持续时间为1秒。

设定属性并编写触发:

施法出手事件中,为什么创建的变量发射的剑气 是一个组变量而不是局部变量?组变量表示此变量从施法开始到结束都会存在。下面是编辑器中AI的回答:

  • 组变量是触发器中的一种变量类型,它们通常与特定的集合相关联,如单位组、玩家组等。组变量允许开发者对一组对象进行操作,而不是单个对象,这在处理涉及多个单位或玩家的复杂逻辑时非常有用。例如,当在施法引导阶段创建投射物时,使用组变量可以确保对所有相关单位或玩家同时执行相同的操作,而无需为每个单位或玩家单独创建变量。
  • 在技能触发器中,创建投射物时使用组变量而不是局部变量,主要是因为投射物往往需要与多个单位或玩家交互。组变量能够更好地管理这些交互,确保所有相关单位或玩家都能正确地受到投射物的影响。此外,组变量的操作会同步影响到外部,这意味着对组变量内的单位属性的修改会立即反映在所有关联的单位上,这在处理如投射物这样的动态元素时是必要的。
  • 例如,当在施法引导阶段创建投射物时,如果使用局部变量,那么每次施法可能都需要创建新的变量实例,这不仅消耗资源,而且难以管理。而使用组变量,可以一次性创建并管理,即使在施法过程中有新的单位加入或离开,组变量也能确保所有相关单位都能正确地与投射物交互。

创建投射物之后,需要创建一个直线运动器,让剑气动起来。设计运动器的范围时,可以使用编辑器中的测距工具。按下G键两次后,地图出现方格(边长200),点击左上角测距工具,就可以简单地测量地图上的距离。

如果要设置剑气斩到悬崖等地形障碍时停下,可以设置一下运动其打断时的判定和效果。

3.2 范围伤害技

拖动时间轴,此动作0.87秒时发动范围伤害技比较好。新建一个技能,设置施法引导为0.87,这样0.87秒之后会进入施法出手步骤。


施法开始时创建的蓄力特效和施法出手时创建的剑气特效,都不会在技能触发器的其他地方出现,所以设为一个局部变量就行。这里设置范围伤害是技能自定义键值伤害(公式)对应的数值。

四、刷怪机制

防守图中,刷怪机制一般是每隔一段时候(进攻倒计时显示),刷新怪物进攻玩家基地,可以具有多条进攻路线,甚至是立体进攻(空中单位进攻)。

先在物编中创建小怪类型,小地图图标选择简易模式,也就是只有一个点。再随便创建一个boss和基本单位,设置怪物出生点和三条进攻路径。

在UI编辑器中创建一个倒计时UI和一个boss血条。倒计时UI中boss来袭的字体使用了红色和黑色,使之更有压迫感,并设置初始位置为屏幕中央。然后创建一个时间轴动画,一会指定波次boss出来说,这个字幕滑动到屏幕外面。

编写倒计时触发,当剩余时间为1时,发送一个回合到期的自定义事件,并发送自定义参数:当前回合。

当每个回合倒计时结束时,创建15只小怪,并随机沿着三条路径进攻玩家基地。测试第一回合刷出一个boos,播放boss来袭字幕动画。

五、练功房制作

练功房是一种可以使玩家快速变强的机制,比如在1小时的防守图中,不需要编写额外的剧情和逻辑,玩家可以通过练功房快速成长。

主要功能:

  • 点击传送NPC之后,传送到练功房,并切换传送面板图标
  • 不同的玩家选择不同的怪物类型,进行对应的怪物刷新。每3秒判定一次,场上没有怪物才刷新。
  • 金币怪和木头怪击杀后获得对应的奖励
  • 离开练功房暂停刷怪计时器,传送后恢复此计时器,继续刷怪。

5.1 物编和界面设置

在物编中,创建一个练功房传送NPC,设置一些单位状态,使之不会参与到游戏事件中。然后创建一个简单的练功房地形。

创建一个练功房操作面板,包括初始传送面板-显示传送图标,以及传送后面板-显示练功房刷怪图标。

5.2 触发编写(计时器暂停和恢复、不同玩家刷怪差异化)

  1. 点选NPC:设置点选传送NPC事件,弹出初始传送面板。
  1. 点击传送:玩家点击传送图标之后,创建传送特效,持续0.5秒。0.5秒之后,关闭切换传送面板显示的内容,并将玩家镜头移动过去。这里的自定义键值"英雄",是当时玩家选择英雄时,创建在玩家身上的自定义键值。最后恢复此玩家的刷怪计时器(玩家离开练功房时被暂停)。
  1. 练功房功能初始化:为每个玩家添为每个玩家添加自己的刷怪计时器、怪物类型和怪物组,设置每3秒刷怪计时器到期,发送自定义事件,刷新怪物。(应该是玩家点了之后,再开始进行计时)

这里遍历的玩家组应该是阵营内的玩家,而不是同盟玩家。同盟玩家是不包括玩家本身,这样回调玩家就会被设置为别的玩家。

  1. 刷怪类型:当玩家按下不同的怪物刷新按钮,设置其对应的自定义键值:
  1. 刷怪逻辑:每隔3秒计时器到期,进行刷怪判定。如果场上没有这个玩家的怪物,则刷新一批对应的怪物,并将其添加到怪物组中。
  1. 击杀奖励和单位移除:设置金币怪和木头怪的击杀奖励,击杀时,从怪物组中移除此怪物:
  1. 离开功能:离开时暂停此玩家的练功房刷怪计时器。

六、副本设定

副本一般用于刷取材料、装备等等。上章实现了练功房功能,而副本一般是有多个的,一个个重写很麻烦,可以换一种思路。

6.1 物编设定

创建几个副本地形,以及副本传送消耗品。创建副本挑战NPC,出售这几个消耗品。

如果要设置购买时消耗的资源,可以点击左下角自定义,先设置额外的玩家属性,再在物品商店相关中设置耗量:

一开始就算设置了消耗木材,测试时也只会显示消耗金币,木材消耗的显示功能需要自己添加。

6.2 触发编写

根据玩家购买的传送道具,决定传送区域:

如果传送区域存在,将玩家传送至传送区域中心点,并在1秒后跟随镜头。为传送区域加上一个自定义键值-区域内单位列表,用于识别初次传送。如果是第一次传送,就随机刷出10个怪。

七、物品设定(测试掉落事件)

7.1 物品掉落

在物编中随便创建三个掉落物品和一个掉落区域。新建触发器,事件设为发送"测试掉落"信息,这样玩家在聊天框中输入"测试掉落"时,触发此事件。然后设置掉落物品列表和掉落物品随机池,进行随机掉落:

7.2 物品合成

编辑器自带了物品合成功能,当玩家集齐了合成材料,自动合成该物品。比如设置刑天斧合成材料为三把刀,当玩家获得了三把刀之后,自动合成刑天斧,并销毁对应的合成材料。

7.3 物品说明修改

游戏中,有些物品升级/强化后,其物品说明也应该进行对应的修改,下面是简单演示:


7.4 添加物品功能(增益属性、动态触发器)

简单的为小刀添加一个+20点物理攻击力的功能:

要注意的是,这里添加的应该是单位的增益属性,而非基础属性。基础属性一般在物编中而非触发器中进行修改,它会和三种属性都挂钩。增益,而增益属性只影响增益属性和总属性。

新版编辑器中,可以直接在物编中设置属性加成:

获得中刀后,普攻时伤害+2000:

这里的动态触发器就是指子触发器,子触发器设置为变量后,后续可以销除。

7.5 如何创建背包系统

  1. 创建背包栏:在界面编辑器中,可以使用元件(prefab)来创建背包栏。每个背包格都可以作为一个元件,这样可以方便地进行复用和修改。创建一个背包格作为元件,将其复制多份放入背包中。以后修改只需要在元件中进行修改,修改会自动同步到所有元件实例中。
  2. 在2.0.77版本更新中,单位物编新增了"开启物品背包栏"的属性。对于不需要物品背包系统的单位,可以关闭此属性,以提升性能。
  3. 装备拾取与限制:参考《Y3编辑器教程6:触发器进阶案例》第7章:装备限制(自定义键值传递信息)

八、Boss设定

8.1 BOSS血条

  • 创建一个空节点,并插入背景图,并设置好九宫缩放
  • 插入进度条,设置背景色和进度条颜色,然后插入文本框,设置好大小:

8.2 触发编写

在回合到期触发器中,到指定回合时,播放boss来袭动画,发送自定义事件及boss类型参数:

刷新boss时,关闭刷怪触发器,防止玩家压力过大。将boss血条与其生命值绑定,每0.1秒监测一次,死亡后移除。

代码中,boss最大生命值应该选择实际属性,即计算所有加成后的最终属性。所有控件显示的是本地玩家的控件。

物编中,创建boss技能:

设置boss攻击时,50%概率释放boss技能:

九、存档

本章使用存档功能,分别存储玩家的当前通关难度和获得的物品。前者只需要使用整数进行存储,后者则是使用表格。在细节-存档设置中,新建两个存档槽位,点击查看表格编辑器:

新建一个物品存档表,然后将其设为物品表存档的初始值。

点击"查看本地存档",可以看到存档的具体情况:

9.1 通关难度存档

  1. 初始化难度设置。根据玩家存档槽获取游戏难度,一开始玩家只能选择难度1。

使用遍历i遍历6个难度,如果已通关难度+1≥i,表示难度i解锁,其界面控件可用性为真,可以选择此难度;否则未解锁。

  1. 选择难度 :玩家选择难度后,发送自定义事件"选择难度完毕"及参数"当前难度"。

  2. 难度选择完毕,存储当前选择难度,初始化物品表

  3. 游戏胜利,显示游戏胜利界面,存档通关难度并上传存档

9.2 物品存档

  1. 在游戏胜利触发器中,设置保存玩家物品栏的物品:
  1. 在下次游戏开始时,加载玩家存档的物品

十、商城道具(待补)

相关推荐
纪伊路上盛名在3 小时前
用vscode写latex-1
ide·笔记·vscode·编辑器·知识图谱·学习方法
9毫米的幻想4 小时前
【Linux系统】—— vim 的使用
linux·运维·开发语言·c++·编辑器·vim
莲动渔舟5 小时前
国产编辑器EverEdit - 一个优秀的文本编辑器该有的删除功能
编辑器·notepad++·emeditor·everedit
爱lv行19 小时前
VSCode 插件
ide·vscode·编辑器
骜蛟20 小时前
VSCode 更好用的设置
ide·vscode·编辑器
Lysun0011 天前
在vscode中已经安装了插件Live Server,但是在命令面板确找不到
ide·vscode·编辑器
电子云与长程纠缠1 天前
UE5中制作地形材质
开发语言·缓存·ue5·编辑器·材质
纪伊路上盛名在1 天前
R、python all in one jupyter
ide·人工智能·python·jupyter·r语言·编辑器·学习方法
关关钧1 天前
【Linux】sed编辑器二
linux·运维·编辑器