一、新建项目
在启动页面,可以直接打开最近制作的地图或新建空白地图。你可以选择新建一个完全空白的新工程,或使用内置的模板(如TD、ACT)开始创建游戏。新建时,可以选择地图大小和UI模板来作为初始的UI风格,点击放大镜可以预览UI风格。
- 进入项目后,你也可以通过细节-地图设置-地图大小(Alt+M)进行更改地图尺寸;
- 可以在界面编辑器中进行自定义UI修改
默认游戏中可使用的地形和悬崖纹理,点击下拉框,我们可以选择不同场景的地形纹理。
“新建项目”完毕意味着在指定路径下按照所选模板(我这里是空白模板)生成项目文件:
以空白模板创建项目时,初始只有一张名为 “EntryMap”
的地图。你可以从 文件>项目管理>新建关卡 这里创建一个新的地图。创建的时候要指定地图名字(项目信息)
创建完成后,可以看到在项目文件夹的maps目录中,多了一个地图文件夹:
一个项目包含一个或多个地图,因此,需要留意自己所编辑的数据,是属于哪个地图,还是属于项目间地图通用的(比如项目插件)。
二、 编辑器主界面
2.1 游戏场景
中间界面是游戏场景,可以使用右边的工具面板添加游戏角色、编辑地形等。
- 滚动鼠标滚轮即可移动主视角的视距;
- 按住鼠标右键可以自由挪动地形
- 按住鼠标左键进行单位选择
- 按住Ctrl+鼠标右键旋转鼠标即可进行场景的旋转效果。
2.2 导航栏/菜单栏
主界面顶部是导航栏/菜单栏,提供针对编辑器和项目的基本设置功能。分为文件(git版本管理和多关卡管理)、编辑( 通用设置和 键位设置)、窗口、细节、调试、发布、插件、帮助和AI客服。
- 插件功能可以快速获取其他人提供的成套逻辑或资源,或者扩展编辑器功能。
- 帮助可以快速进入开发者学院和开发者文档
菜单栏下方设置了撤销,恢复以及保存的快捷按钮。点击左上角运行按钮,或按下Ctrl+F9
即可测试游戏,有三种测试方式可供选择。
-
编辑器内运行游戏
复用当前编辑器窗口进行测试,编辑窗口会变成游戏运行窗口,所以无法再执行游戏编辑操作。 -
独立进程运行游戏
唤出一个额外窗口运行游戏,不会阻塞编辑器本身的编辑项目操作。 -
本地多开运行游戏
如果当前游戏是多人游戏,你可以通过本地多开功能为每一个玩家运行一个窗口,借此测试多人游戏功能。
在测试状态下,游戏就会按照设定的逻辑开始运行,可以自由控制人物行走。此时运行按钮会变成测试退出按钮,再次按下Ctrl+F9
回到编辑器页面。游戏制作完成后,可以通过点击发布按钮上传游戏到平台
2.3 功能栏
游戏场景顶部是功能栏,包含了几个核心功能的入口:
功能模块 | 功能描述 |
---|---|
物体编辑器 | 编辑和管理游戏中的单位、物品、技能、投射物、可破坏物、科技等,包括模型和属性等。 |
触发器 | 所有游戏逻辑的诞生地,比如怪物的刷新、人物升级奖励等。 |
界面编辑器 | 实现人机交互界面美化的整体UI编辑。 |
资源管理器 | 查看管理所有地图资源,包括模型、音效、特效、图标、鼠标样式、天空球、字体、地形纹理、序列帧、Spine和Live2D,支持导入本地资源文件。 |
资源商店 | 支持下载或购买各种能用于项目的资源,比如模型,特效,界面组件乃至触发器逻辑。 |
表格编辑器 | 一个数据管理工具,可以借由表格保存一些数据,并且快速地调试。 |
三、菜单栏详细介绍
3.1 文件
3.1.1 版本管理
- 在Git官网下载并安装Git for Windows,安装过程详见《Git下载安装教程》。
- 在Github上注册Github账号
- 配置本地Git信息和SSH ,创建本地项目并上传到Github。详见GitHub官方课程、《GitHub 详细教程》、《一文搞懂git版本库管理》。
配置完成后,你可以上传本地项目内容,下载在线项目内容,实现协同开发。
3.1.2 项目管理(多关卡)
3.1.2.1 多关卡功能说明
多关卡是指多个关卡互相独立,特别适合协作开发与项目管理。通过合理利用多关卡功能,可以在开发效率、游戏性能和玩家体验之间找到良好的平衡点。
类别 | 优点 | 说明 |
---|---|---|
模块化开发 | 关卡完全独立 | 各关卡互不干扰,便于分模块编写、调试和维护。 |
协作开发提升效率 | 不同开发者专注单一关卡,减少代码冲突和依赖,提高协作开发效率。 | |
灵活设计 | 可以开发剧情逐步推动的线性关卡,也支持开放世界类游戏的动态切换场景的非线性关卡。 | |
灵活扩展 | 新增关卡不影响现有关卡逻辑,降低维护成本。 | |
性能优化 | 降低内存消耗 | 仅加载当前关卡资源,无需一次性加载全部游戏内容,特别适合大地图或复杂场景游戏。 |
优化加载速度 | 缩短初始加载时间,提升玩家体验。 | |
增强游戏体验 | 便捷的切换机制 | 通过触发器或条件设置,灵活实现场景切换(如任务完成切换)。 |
数据传递支持 | 利用存档功能,保证玩家数据在不同关卡间的连续性。 |
在y3编辑器中,通过主界面 - 文件 - 项目管理可以找到多关卡功能的入口。你可以新建关卡、为现有的关卡重命名、移除关卡、设置主关卡以及切换关卡。主关卡是项目开启时编辑器默认加载的关卡以及玩家进入游戏时默认加载的关卡。
为了降低自动保存造成的效率损耗,2.0版本编辑器不会将整个工程进行自动保存,只会保存正在编辑的关卡。需要复原你的进度时,需要将自动保存目录下的关卡备份粘贴到原工程对应的关卡文件夹中进行覆盖。
3.1.2.2 关卡切换与关卡存档
你可以在触发器 - 动作 - 游戏分类中找到切换关卡的语句。
- 执行切换关卡时,所有的玩家会同时切换到新的关卡。建议将切换的语句写在游戏结束的条件中,或制作类似地下城与勇士的房间切换时的投票规则。
- 在切换关卡时,若不进行保存,在当前关卡做过的既有修改将会丢失。
- 进入新的关卡时或回到老的关卡时,游戏进度都将会从游戏初始化开始重新运行。
- 如果在不同关卡中存在需要传递和共享的数据,需要在游戏过程中将这些数据放入存档中,再在切换关卡后从存档加载保存的游戏数据。
- 在关卡切换过程中,若处在上传存档的CD过程中,也会在切换前强制保底上传一次。
存档相关详见存档须知及表格存档、表格加密的使用说明。
3.2 编辑
3.2.1 通用设置
在编辑器菜单栏中点击编辑-通用设置,您可以设置编辑器的自动保存、语言设置、主题、调试以及场景表现,并获取编辑器的版本号。
功能 | 描述 |
---|---|
自动保存 | 设置和修改自动保存的间隔、路径、备份数,支持查看历史记录路径,快速定位历史文件。 |
语言设置 | 设置编辑项目时使用的语言以及预览时的游戏语言。 |
主题 | 设置Y3编辑器的主题。 |
调试 | 设置是否显示调试信息、调试信息的位置和画面质量 设置鼠标是否限制在游戏内、编辑器内远景裁切距离 |
编辑设置 | 设置游戏帧数、渲染设置(抗锯齿、垂直同步)以及声音设置。 |
触发器 | 设置触发器编辑界面的各种属性。 |
调试参数说明:
- 运行时鼠标限制在游戏内,表示在调试状态下,鼠标的移动仅限于编辑器的范围内。如果没有勾选,则鼠标的移动不受范围的限制。
- 编辑器内远景裁切距离,即在编辑器中开发游戏时从摄像机可以看到的最远距离。您也可以通过战争阴影中的模型渲染距离来设置游戏运行时的最大镜头距离
3.2.2 键位设置
键位设置选项可以对主界面、物体编辑器以及触发器的快捷按键进行个性化定制以方便项目开发。选择√
表示开启当前快捷键,点击右侧输入区后,就可以开启编辑。
- 辅助键包含
ctrl ,alt ,shift
,不区分左右。 - 功能键包含字母、主键盘数字、小键盘数字、标点符号、F1-F12、方向键,不区分大小写 。
- 有效键位包括:
1/3
个辅助键、1
个功能键加0/1/2
个辅助键。
3.3 窗口(日志)
通过勾选来决定是否显示一些组件,例如物件预览、已放置物件、工具面板、日志、调试窗口、小地图、状态栏。
3.4 细节
细节菜单可以调整项目的语言设置、游戏规则、属性定义、玩家设置、美术效果、地图设置以及存档设置。
3.4.1 语言设置
点击菜单栏的细节-语言设置,可以为项目中的各类摆件重新命名。
3.4.2 游戏规则
在开发复杂项目时,有很多功能看似简单,却可能需要大量代码才能实现,而编辑器已经把许多常用的经典设计内置在项目规则里,方便用户直接使用、调试。比如设置镜头控制、攻防属性、伤害公式、复合属性、经验等等。
-
单位相关:可以在单位相关中对项目中的单位进行基础设置:
-
物品相关:设置物品碰撞范围(物品与物品之间隐形的间隔距离)、物品被拾取后是进入物品栏还是背包栏
-
镜头控制:调整项目运行中镜头随着鼠标或者键盘移动的速度。
-
局内键位:除了在键位设置中个性化定制项目开发时的热键,也可以在局内键位中设置游戏运行时的操作热键。
-
小地图设置:设置各个生物与英雄所属阵营的小地图颜色,支持自定义颜色。
-
战争阴影:有经典和简易两种战争阴影模式,也支持自定义模式,自行设置视野阻挡的细节。你还可以通过模型加载范围来设置运行状态下的镜头距离。
3.4.3 属性定义(单位、玩家、攻防属性/公式、主属性、英雄经验)
在开发简单项目时,大可略过此处,但如果你的游戏设计里涉及伤害与护甲关系、复合属性如何影响角色具体属性(例如角色的力量值同时影响其近战伤害和生命上限)等,在细节-属性定义里进行设置更加高效。
-
单位属性:属于每个地图所有(不能跨地图),属性值可以直接绑定到UI文本或者进度条上。使用多地图功能时,需要将地图
attr.json
复制到其他地图中来使用(?)。
-
玩家属性:全项目通用的,修改会跨地图生效。
-
攻防属性:可以勾选是否启用攻防类型。在默认的示例数据有穿刺、切割、轻甲、重甲,穿刺对轻甲只有0.8倍伤害效果,但对重甲有1.2倍伤害效果,你可以对这些数值进行自由修改。
-
复合属性:点击
√
开启后,你可以设置并增加各复合属性的具体内容,还可以设置并增加主属性的额外收益。开启复合属性后,你可以在物体编辑器-单位-单位属性-复合属性中设置单位的初始复合属性,从而确定当前单位的主属性。
-
英雄经验:
- 全图获得经验:勾选该选项,游戏角色可以在项目的全地图范围内获得经验。
- 获取经验距离:游戏角色可以获得经验值的半径范围。
- 最大等级:游戏角色的最高等级。
- 公式:每次等级提升所需的经验值,点击f(x)按键可以通过复杂公式进行设定。
- 所需经验:从上一个等级升级到当前等级所需要的经验值
-
伤害公式:编辑器在攻防系统中提供了预置的伤害公式,你可以点击笔型按钮修改伤害公式的具体数值,或者点击重置按钮恢复默认设计。
3.4.4 玩家设置
玩家设置页面可以设置游戏内玩家人数和玩家之间的关系。新增玩家,可以添加新势力,也可以为游戏添加裁判位,让好友进行观战(裁判也会被打啊)。另外通过调色板自定义玩家代表色:
单位摆放前后都可以进行势力的修改,Ctrl+Z
可以取消上一步的操作。另外我们还可以将单位设置为中立敌对或中立友善。
- 中立友善:玩家的同盟单位,不会主动攻击,受到玩家攻击也不会反击。
- 中立敌对:与地图上所有玩家都是敌对关系,在攻击范围内会主动攻击玩家。
3.4.5 美术效果
参考文档《美术效果》
3.4.5.1 风格
风格包括画风、滤镜效果、镜头辉光和暗角。
- 镜头辉光能够模拟用肉眼观察非常明亮的物体时看到的泛光效果,从而凸显三维物体的真实感。其中辉光强度选项能够调节泛光的强度,衰减范围选项则能够调节光线随着与光源的距离增大而导致的光线强度减弱的幅度。在设计过程中你可以可尝试填入不同的数值以获取最好的视觉效果。
- 设置暗角参数,使画面四周变暗,营造紧张惊险、悬疑神秘等氛围。
3.4.5.2 天空盒
天空盒(天空球)是包裹整个游戏场景的立方体,其定义了地面之外的空间背景。点击天空盒的缩略图即可选用,或者点击进入到资源管理器-天空球分类中,选择或者导入新的天空盒。
3.4.5.3 雾效
雾效可以增加场景的真实度,比如下雨场景、山谷之中会有雾气。当相机高度大于为雾效设定的最低高度时,会产生迷雾效果,高度越高浓度越大。衰减速度指当游戏角色走进迷雾中时,迷雾的退散速度。
3.4.5.4 战争阴影
- 置灰迷雾:你可以设置灰色阴影的颜色、浓度、扰动开关与扰动强度。
- 置灰:表示获取过视野然后又失去的状态
- 扰动:是指灰色阴影具有一种类似火焰燃烧的效果,能够给玩家带来视觉扭曲的体验。
- 未探索迷雾:当一个区域中没有己方队友时,游戏玩家看不到该区域的具体内容,只能看到一片未探索迷雾。你可以设置未探索迷雾的颜色,浓度与衰退幅度。
3.4.5.5 特效
用于设置玩家升级时、杀死怪物获得货币时与复活时的特效,可以决定是否开启以及杀死怪物时所获得的货币是所有人可见还是仅该玩家可见。
使用特效编辑器可以编辑特效效果,点击文件夹图标可以打开资源管理器-特效,更换相应的特效。
3.4.5.6 全局天气
此处设置的是全局天气,该天气会覆盖整个项目场景,与工具栏中逻辑区域内的区域天气互不影响。天气共有15种:大雨(Heavy rain)、小雨(Light rain)、魔力上升(Magic rise)、蓝雾(Blue fog)、绿雾(Green fog)、红雾(Red fog)、白雾(White fog)、暴风雪(Snowstorm)、大雪(Heavy snow)、小雪(Light snow)、日光(Sunshine)、月光(Moonshine)、沙尘暴(Sand storm)、大风(Gale)、小风(Breeze),详细效果见《天气》。
3.4.5.7 指示器外观
- 鼠标状态:设置各种状态下鼠标在悬浮、选取和禁用时的的鼠标样式
- 技能指示器:技能释放前显示技能的指向和区域,点击右侧编辑按钮进入资源管理器-特效进行编辑,点击刷新按钮可 重置特效。
3.4.5.8 阴影质量
你可以选择开启级联阴影,并设置开启自适应距离、级联阴影级数、级联阴影距离,以及各层级之间的阴影距离。在某些场景中,方向光产生的实时阴影在靠近摄像机时会出现像素化,阴影级联有助于解决因此而产生的透视锯齿问题。
注意:阴影级联仅对方向光有效;使用的级联越多,透视锯齿对阴影的影响就越小,但是增加级联数量会增加计算机的渲染开销
3.4.5.9 受击表现
使用受击表现可以大大的增强游戏的打击感,以及命中反馈,其设置如下:
比如设置单位在受到大于0点伤害(结算前)后会自动触发一次闪白效果:
- 受击时长:闪白的持续时间
- 闪光间隔:两次闪白之间的最小时间
- 受击颜色:闪白效果的颜色
- 受击闪光单位类型:受伤后会触发闪白效果的单位类型
3.4.5.10 植被参数(略)
3.5 日志与调试
3.5.1 游戏日志
在编辑器上方菜单栏-窗口选项中,可以打开游戏的日志信息。这样运行游戏时会自动弹出一个窗口以显示日志,帮助你掌握项目运行的情况。
在日志窗口中点击“运行日志”可切换到游戏的日志信息中。
使用“打印日志”函数在需要调试的地方输出日志
在日志窗口中,我们可以通过点击右侧的箭头按钮,快速导航至触发对应日志的ECA处。利用这个功能我们可以快速定位问题出现的地点并且进行修正。
3.5.2 调试信息
在使用ECA开发的过程中,可以通过“向玩家发送调试信息”函数来打印调试信息,输出的调试信息将直接打印到游戏界面上
3.5.3 使用火焰图分析ECA性能
在编辑器上方菜单栏-调试选项中,可以打开游戏的触发器火焰图窗口。火焰图用于对ECA逻辑进行性能的查看和分析,它显示了每一帧所用的CPU时间。通过观察每个逻辑的ECA耗时,可以帮助我们快速定位到找到耗时过高的帧或函数,再根据合适的优化策略进行性能优化。
在编辑器运行地图后,会出行如下所示的火焰图:
- 柱状图区域:以柱状图的形式展示各帧的消耗,点击可选中该帧
- 导航栏区域:可拖动帧的显示区域
- 详细信息区域:选中某一帧后,以甘特图形式显示该帧的具体消耗信息,
- 找到耗时过高的帧:在柱状图或导航栏区域观测各帧的耗时情况,找到找到耗时过高的帧,点选该帧
- 查看耗时过高的函数:
-
在详细信息区域中,查看各函数色块,鼠标悬浮于甘特图色块上时,会显示该色块对应函数的信息,包含函数名和耗时。
-
找到耗时过高或与预期严重不符的函数色块,点击后可以直接跳转到该函数所在区域,便于开发者定位卡顿发生的位置。
-
3.5.4 常见ECA性能优化思路
- 分帧执行:将高开销行为分散到多个帧中执行,以避免单帧耗时过长导致的卡顿。
比如周期性的刷怪,或在玩家做出某个操作后,一次性创建大量单位或特效。这会造成个别帧耗时过长(卡顿),如果这个卡顿还是周期性的,那将是灾难性的体验。针对这类情形,我们可以考虑在不影响游戏逻辑的情况下,将大量的高消耗行为分散到多帧中执行,比如每帧创2-3个单位。
- 巧用加载界面:在执行不允许分帧执行的高开销操作时,使用加载界面来遮掩卡顿,提升玩家体验。
有些业务逻辑不允许我们进行分帧执行,比如进入副本时,怪物不应该是一批批刷新出来,而是玩家一进去就全部已经刷新了。此时可以进行全部怪物的创建,而卡顿效果会被加载界面遮挡。如果整个时长不长,加载界面可以是没有进度条的展示界面。比如当前副本的宣传画+背景介绍文字。
- 对象池:复用已创建的单位,减少因频繁创建和销毁单位带来的性能开销。
对于一些割草类玩法的地图来说,会需要大量创建重复的单位,使玩家有割草般的战斗体验,这就需要频繁进行单位创建->被击杀->系统回收销毁单位的循环,而创建单位行为的开销是比较大的,大量创建会导致游戏始终处于一个卡顿状态。
对象池是一种设计模式,用于管理和重用对象实例,以提高应用程序的性能和内存使用效率,尤其是在对象创建成本较高或对象生命周期较短的情况下。其主要理念是通过预分配一组对象,并在需要时从池中借用对象,而不是每次都创建和销毁对象。
具体来说,我们可以在怪物死亡后将其移动至地图角落,需要创建该单位时,再将其移动至需要创建的位置,并重置属性。根据需要,还可以提前分帧创建未来可能需要的单位,放在对象池中待命。
y3在对象池的基础上做了优化,从对象池创建对象只会初始化下列数据:
位置、朝向、关联技能、(投射物拥有者)、阵营、可见性、触发器
其他的数据是需要手动初始化的,如:自定义属性,表现层相关特效等。
-
合并执行:将一帧内多次执行的逻辑合并为一次执行,减少不必要的性能损耗。
在制作界面逻辑时,设为当受到伤害事件则触发界面刷新。当敌方单位较多时,很可能一帧触发多次,实际上用户只能看到帧结束前最后一次刷新的结果,所以造成了不必要的性能开销。
优化后,引入一个全局参数来控制界面刷新。当受到伤害时间时,将该全局参数设置为true
。在帧计时器中进行判断,如果参数为true,则刷新界面并重置参数为false,从而确保每帧界面只刷新一次。 -
增量更新:仅刷新界面上发生变化的控件,避免不必要的界面刷新。
在一些需要高频刷新界面信息的情景,或单次刷新的控件数量较多时,可以使用增量更新的思路。使用变量将控件当前的数据状态进行缓存,在刷新时,只对数据变化的控件进行刷新操作,实现增量刷新的效果。要注意的是,大量的拼接字符串行为也会造成不小的开销。
-
预创建:在游戏启动或加载时预先创建好触发器和元件,以减少在高性能压力下的动态创建开销。
创建子触发器、创建元件都是有一定性能开销的行为。如果在战斗逻辑已处于高性能开销的情况下,频繁地去创建,极有可能导致卡顿。我们可以提前创建好触发器、拼制静态界面等,让开销转移至游戏启动时或加载界面时。
-
简易普攻:尽可能使用简易普攻代替自定义普攻,减少不必要的ECA和事件消耗,提升战斗性能。
-
最简存储方式:数组、一维表、自定义键值(多维表)5000次存取,性能比例大约为:
1:5:20
。所以业务逻辑允许的话,优先使用全局数组,其次是一维表。另外局部变量的消耗也低于全局变量。
3.6 游戏插件上传教程(略)
官方文档只介绍了游戏插件上传审核发布的过程,完全没介绍插件的功能和制作方式,差评。