文章目录
- Y3编辑器文档1:编辑器简介及菜单栏详解(文件、编辑、窗口、细节、调试)
- Y3编辑器文档2:场景编辑(地形编辑、物件放置)
- Y3编辑器文档3:物体编辑器
- Y3编辑器文档4:触发器1(界面及使用简介、变量作用域、入门案例)
- Y3编辑器教程5:触发器进阶使用(镜头、UI、表格、函数库、排行榜、游戏不同步)
- Y3编辑器教程7:界面编辑器
参考官方教程《中级触发课程》
一、地形制作
1.1 地形制作流程
在进行游戏场景的开发时,需要对接上下游岗位的各种需求,了解制作的全局安排,以保证整个项目的方向不产生偏差,最终的成品符合目标预期。整个游戏场景开发的流程结构包括以下几个步骤:
- 策划:确认场景需求、画面表现风格、地形变化、镜头参数等各种细节,以便在正式制作场景地图时有所准备。
- 原画师:根据需求提供概念设计,为3D美术师提供制作场景资源的基础。
- 3D美术师:会根据概念设计,制作3D建模与材质
- 地编:整合素材导入引擎,并完成地图内的摆放调试、灯光和渲染效果。
- 程序:优化游戏性能和玩法,实现目标所需的体验。
1.2 关卡白盒
关卡白盒(Blockout)是游戏开发中的一个重要概念,它指的是使用简单的3D几何形状(通常是白色或单色的块状物)构建的基本游戏内草图,用于快速测试关卡的基本结构和游戏玩法。
通常在制作场景美术前,需要和策划对接关卡设计文档,并共同配合在编辑器中搭建关卡白盒。通过关卡白盒可以快速验证对应的玩法和关卡体验,以及是否能达到预期的游戏目标,及时调整游戏的设计,减少在后期大幅修改导致进度被延缓的可能。
视频中正在制作的游戏叫做“大罗”,玩家需要在黑暗中寻找道路,并净化地图各处被腐蚀的怪物。而高低视野差本身是玩法的一环,怪物或战利品会藏匿其中。这些影响玩家体验的地形布置,必须严格按照策划量化的标准来进行调整。
1.3 场景美化
在整个地图的白盒阶段完成后,接下来就正式开始场景美术的部分了。在这个阶段,我们可以跳过原画和3D制作的环节,直接根据文案对故事的背景设定,或者策划提供的场景分为参考,到编辑器中寻找所需的资产。但我们依然需要逐步拆解出画面所需的元素,比如场景是在寒带还是热带、故事发生的时间、树木植被的种类、岩石山体的状态等等。然后可以在资源管理中浏览和下载模型,以及在物编中创建自定义装饰物。
在挑选时要保证模型的风格尽量统一,避免造成画风上的割裂,对视觉上的体验造成负面影响。使用材质相近,但是造型不同的模型可以制作出不同的效果,比如不同山体的轮廓或植被的覆盖。同时利用组合装饰物的功能,将搭建好的小景别或建筑等打包成一个装饰物。除此之外,还可以使用投射物和材质变化等物编设置,给装饰物增加更多细节。
准备好素材之后,就是围绕着关卡开始拼积木了。从体积较大的装饰物开始,再一步步地优化画面的表达。
除此之外,场景设计还需要大量的美术知识,构图的技巧、空间关系、远景里的拉伸、大气透视等,需要不断地进行练习和积累才能做出更好的作品。
1.4 优化场景
- 提高游戏帧数
- 降低游戏运行所需的性能
- 场景BUG
- 模型碰撞
- 效果降级
比如,使用地形编辑中的植被笔刷大面积覆盖密度较高的草地,可能会导致游戏的帧数显著下降。所以使用装饰物中的植被来铺设场景。另外,经常容易出现玩家角色卡死在地图边缘,或者装饰物以及单位的附近等,需要较为细致地去处理这些碰撞体积。
大量不合理的放置灯光等也容易造成游戏渲染方面的压力,掉帧、卡死等。应该先处理好最主要的光源,再进一步去优化漫反射的影响等。有时候为了游戏的体验,不得不做出一些妥协,寻找效率与效果的平衡。一切以输出最终成品为目标不断地进行改进,养成良好的创作习惯和培养规范的开发意识,能极大的提高生产效率,避免不必要的麻烦。
二、触发结构
当我们玩游戏时,我们可以看到和体验到不同的游戏场景互动,甚至不同玩家的不同故事。使用Y3编辑器,我们可以在ECA中实现所有这些游戏效果,无论是简单的拿起武器还是多人支线任务。有时候ECA可能看起来相当长和复杂,但它们通常可以分解为三种简单的编程结构:顺序、选择和循环。
-
顺序结构:按顺序执行一系列操作,是编程中最基本和默认的模式。
比如当玩家第一次进入游戏时,会先播放动画视频,然后弹出初学者指南,几秒钟后将显示一个关闭按钮,最后玩家可以单击以关闭指南。在大逃杀游戏中,地图通常会随着时间的推移而缩小,迫使每个玩家彼此靠近,这也是顺序结构。 -
选择结构:根据条件执行不同的操作。例如,检查玩家是否持有正确的钥匙来打开门,或者在大逃杀游戏中检查玩家是否活着以及是否是最后剩下的玩家。选择结构使用if-then-else逻辑来实现。
-
循环结构:重复执行一组操作,直到满足特定条件。Y3编辑器提供了多种循环类型,包括指定次数循环、条件循环和遍历数组循环
这三个结构看起来非常简单,但是组合起来可以创建非常复杂的程序,几乎可以解决所有的问题,实现所有的游戏效果。例如我们可以使用选择结构和循环结构来计算AOE伤害:首先循环所有在范围内的单位,然后使用选择结构即if语句来检查单位的情况;如果单位是友方单位,我们会为其添加增益效果;如果该单位是敌方单位,我们会对其进行真正的伤害。
三、玩家指引(函数封装)
3.1 项目拆解
在许多游戏中,玩家指引都是必不可少的一部分,它能够快速的帮助玩家熟悉核心玩法,并在需要时随时查看。通常玩家指引会以弹窗的形式出现,但也可以是更传统的电子书形式,或更为详细的教程。在设计玩家指引时,需要考虑易用性、可访问性和自适应性,确保玩家可以轻松查看和使用指引。
下面将以一个交互式UI的形式,为玩家创建一个实用的玩家指引,将包括翻页、隐藏和取消的交互功能以及快捷键操作方式。为了提高信息的组织性和易读性,需要将内容分成不同页面显示,方便玩家快速找到需要的信息;并遵循常见的游戏UI设计规范,如从左到右阅读,按钮在左边,内容在右边。
根据以上需求,我们要制作的玩家指引UI应该是全局可见的,并且允许被修改;玩家在点击这四个标题时不应有任何限制以便可以自由的查看。这些功能可以分为三个部分:内容预设、UI的读取显示和刷新、交互。
3.2 功能实现
3.2.1 绘制UI界面
UI界面需要包括一个底板、四个标题、四个标题文本、一个页面和一个页面文本。由于我们希望玩家能够点击标题来查看内容,因此我们需要为这四个标题添加相应的事件。
我们需要将UI上显示的所有内容存储在变量中,以方便调用,这通常是游戏初始化的一部分。我们可以设置一个全局变量TitleText(字符串数组)来存储标题文本,再设置一个全局数组变量PageText来存储与标题对应的页面文本。
3.2.2 UI的读取显示和刷新
- 设置UI的初始状态:默认打开UI时,会显示四个标题和起始页内容,所以需要将四个标题控件文本内容设为
titleText[1]
到titleText[4]
,将pageText
控件的文本内容设为pageText[1]
。 - 新建函数库函数实现刷新功能:
- 在函数库中创建一个名为“刷新UI”的新函数;
- 创建全局变量page表示我们应该向玩家显示的页数,比如点击标题3时,page=3;
- 使用变量page作为索引来获取相应的内容,即
pageText[page]
,然后将其设为pageText
控件的文本内容
- 创建四个触发器来刷新UI。
3.2.3 交互功能
这部分我们将添加两个功能来使UI交互更加友好。第一个是点击标题时的显示效果,比如当玩家点击titleText1时,titleText1的控件将显示不同的颜色,让玩家清楚的知道自己点选了什么。
为了实现这种视觉效果,需要在UI上添加一个半透明的控件SelectEffect
,这个控件的大小与标题控件相同,用来覆盖在标题上,以改变其视觉效果。由于交互效果与点击标题和刷新UI的效果相结合,我们可以在函数刷新UI中进行添加: