梳理Y3游戏编辑器入门者需要明白的基础概念

前言

Y3编辑器是网易开发的一款类似于“War3地图编辑器”的产品。
最近KK对战平台上不少热门的RPG地图都出自Y3编辑器:
在这里插入图片描述

最近我花了些时间学习了这款编辑器的基础知识。我发现其中很多概念是比较抽象需要理解的,而有些概念比如“物件”、“物体”、“物品”其实挺容易让人混淆的,所以想着做些笔记作为梳理与备忘。当然,我认为这些知识对于其他想要入门这个编辑器的同学而言也是有帮助的。

编辑器下载地址

目标

简单梳理Y3编辑器中,对于完全的入门者而言,需要明白的最基础的概念。(对于已经入门的同学,也许并不具有很大的参考价值)

1. 项目

当你开始制作你的游戏时,首先要做的就是创建一个 “项目”。项目即代表着你要做的游戏。
打开Y3编辑器的第一件事也是在指定路径下,新建一个指定名字的项目:
在这里插入图片描述

“新建项目”意味着在指定路径下按照所选模板(我这里是空白模板)生成项目文件:
在这里插入图片描述
要明白:
这个文件夹就代表着你的项目。下次重开编辑器后可以从这个文件夹中找到项目,继续开发。
在编辑器内所做的一切有效编辑,实际都是编辑这个项目的文件。

为了能更准确明白你所编辑的每个内容对应于什么文件内容,你可以利用一些“差异比对”的功能。比如利用版本控制软件GIT等,去比较你编辑了一个特定内容后,项目文件发生了什么样的变化。

也就是说:

(玩家)运行
(开发者)编辑
项目(文件夹的文件)
游戏
编辑器

2. 地图(关卡)

“地图” 就是一般概念上的游戏地图。
但需要明白的是:他与“项目”的关系,哪些数据属于“地图”,哪些数据不属于“地图”。


以空白模板创建项目时,初始只有一张名为 “EntryMap” 的地图。
你可以从 文件>项目管理>新建关卡 这里创建一个新的地图(注意,下图的用词“关卡”指的就是“地图”):
在这里插入图片描述

创建的时候要指定地图名字(注意,下图的用词“项目”指的就是地图)
在这里插入图片描述
创建完成后,可以看到在项目文件夹的maps目录中,多了一个地图文件夹:
在这里插入图片描述
也就是说,一个项目包含一个或多个地图。


因此,需要留意自己所编辑的数据,是属于哪个地图(比如地图A上放的关羽和地图B上画的河),还是属于项目间地图通用的(比如项目插件)。

不过,目前的情况下,大部分编辑的数据都是归属于某个地图的,甚至包括有些直观上感觉不应该属于某个地图的,而是地图间通用的数据(比如定义一个新的单位,本想着可以在地图A和地图B上公用)但实际上还是会属于某个地图,没法在另一个地图上用。不清楚未来是否会改变这个情况,但目前需要注意。

也就是说:

包含
包含
包含
包含
包含
包含
项目
地图1
地图1的数据(目前的大部分数据)
地图2
地图2的数据(目前的大部分数据)
地图n...
项目间地图通用的数据(目前很少)

3. 地形

在这里插入图片描述

地图上有高有低,有深水浅水,有鼓起或凹陷的地面,地面上还有些花草大小级别的植物(完全没有交互和碰撞)。这些都属于 “地形”。在 地形编辑器 中可以编辑。
在这里插入图片描述
地形很直观地属于地图里的数据。

4. 物件

地图上放置了英雄、小兵、可拾取物品等。这些称之为 “物件”

编辑器左侧可以看到已放置的物件,而右侧可以选择一个分类的一种物件进行放置。
在这里插入图片描述

“物件” 这个词比较抽象。如果让我描述的话,我会说是 “地图上的实体(entity)”。类似于UE引擎的Actor,和Unity引擎中的GameObject。

当前,物件包括的分类如下:

  • 单位:地图上可供玩家选择的单位,比如:关羽、张飞、弓箭手、僵尸。
  • 装饰物:比如树木,石头,围墙。它们不能被玩家选中,所以交互更少。但是可以拥有碰撞。
  • 物品:地图上可以被单位拾取的装备/道具。
  • 镜头:默认会有个初始镜头(游戏一开始进入的镜头位置),其他镜头和镜头动画有关(入门者可忽略)
  • 投射物:(入门者可忽略)
  • 逻辑区域:可以定义一片区域以便构成某个逻辑(比如当英雄进入这个区域时就出现敌人)。当然必须要被触发器中的逻辑所引用才会发挥作用。
  • 可破坏物:字面意思
  • 氛围:包括光源与雾效等

也就是说:

直观上包含
包含
包含
包含
包含
直观上包含
包含
包含
包含
包含
地图
地形
地势水体
地表纹理
花草级别的植物
等等..
物件
单位
装饰物
(可拾取)物品
等等...

5. 物体

“物体” 是一个更为抽象的词了。
你要在物体编辑器(简称“物编”)里去编辑所谓的 “物体”。
在这里插入图片描述
而所谓的 “物体” 实际很宽泛地包括了很多东西,其中就包括可以作为 “物件” 放置到地图上的 “单位”、“装饰物”、“物品”、“投射物”、“可破坏物”。

需要明确理解的是,在物体编辑器中所编辑的 “物体” 与放在地图上的 “物件” 的区别:
在物体编辑器中所编辑的一种“物体”,是一种类型(class),或者说模板。而放在地图上的一个“物件”,是用某个模板创建出的实例(instance)


“类”和“实例”的概念在软件工程或游戏开发中是一个基础而常见的概念。但为了让入门者更快速地理解,这里做个比喻:

假设你有一篮水果,里面放了2个柠檬、2个苹果、3个橘子、5根香蕉。
那么这个水果篮就是“地图”。
而篮子里的每个水果实体就是每个“物件”。
而“物编”代表的是水果物种图谱。
这个图谱上有四种水果:柠檬、苹果、橘子、香蕉。也就是说“物编”上存在四种“物体”。
在这里插入图片描述
试想,当你要在水果篮(地图)里添加一个水果(物件)时,如果这个水果(物件)已经在水果物种图谱(物编)里存在,那么你可以直接放置。但是如果你想放的水果(物件)在水果物种图谱(物编)中不存在,那么你必须要在水果物种图谱(物编)中创造一种新的水果(物体)才行。

在现实中,创造一种新类型的水果很难。但是在你的游戏中,你一定会需要使用物编来创造你的新的物体类型的。


“物体” 除了包括刚才提到的,可以在地图中作为“物件”放置的“单位”、“装饰物”、“物品”、“投射物”、“可破坏物”,还包括:

  • 技能:字面意思。当你在物编中为某个单位添加技能时,需要从技能的物编中挑选一个。
  • 魔法效果:更常见的叫法是“BUFF”。你的技能可能会触发某些魔法效果,此时就需要从魔法效果的物编中引用一个。
  • 投射物:字面意思。你的技能可能会发射某个投射物,此时就需要从投射物的物编中引用一个。(目前来看也可以直接放在地图中,但显然最常见的用法是被技能引用)
  • 科技:(入门者可忽略)
  • 音效:字面意思。你的技能可能会产生音效,此时就需要从音效的物编中引用一个。

因此,它们常见的引用关系包括:

放置
引用
引用
引用
引用
放置
放置
放置
地图
单位
技能
魔法效果
投射物
音效
装饰物
物品
可破坏物

需要说明,上面的引用关系可能并不全,例如物品可能也会引用音效。但是引用关系的箭头一定是不可逆的,比如技能会引用音效,但是音效绝不可能引用技能。

6. 物件的属性和物体的属性

“属性”即是字面的意思,描述某个对象在某一方面的情况。在讨论“属性”的时候需要明确是在讨论 “谁” 的属性,毕竟Y3编辑器中有很多对象都有属性。

这里想要讨论的是 “物件” 的属性和 “物体” 的属性。
再以上面的水果篮举例:

  • 你可以把一个香蕉放在水果篮的任何位置,每个香蕉的大小也有些许差异,所以说 “位置”“大小” 是一个香蕉实体(物件)的属性。
  • 但无论你把一个香蕉放在哪,你都改变不了香蕉是长条形状的,表皮是黄绿色的这些事实。所以说 “形状”“表皮颜色” 是香蕉这种物种(物体)的属性。

在Y3编辑器中,放在的地图上的单位,作为物件拥有 “位置” “旋转” “缩放” 等属性:
在这里插入图片描述
而每种单位,作为物体在物编里可以编辑 “单位分类” “技能资源名称” “视野类型” 等属性:
在这里插入图片描述


不过,一个香蕉(物件)由于基因变异,也可能出现 “蓝色表皮” 这种有违其作为香蕉这个物种(物体)的情况。用软件工程的说法就是:这个实例 “覆写(override)” 了其所属的类型的某个行为。

Y3编辑器里也支持物件的某些属性覆写物体的属性,只需要去掉“使用物编属性”的勾选即可,此时就可以看到:虽然单位的“技能”是在物编中编辑的,但是这里也可以改变:(在去掉勾选之前,这里是灰色的)
在这里插入图片描述
当然,就像基因变异是小几率的,且能改变的行为是有限的。物件所能覆写的属性也是较少的,大部分属性还是需要在物编中进行编辑。

也就是说:
在这里插入图片描述

7. 触发器

“触发器” 听起来就是 “满足一定条件后就触发去做某些事情”,实际确实如此。
但要明白,在Y3编辑器中,所有的玩法逻辑都依赖于触发器来实现(这里不考虑Lua),所以触发器的使用范围极其广泛。当你想要实现某个玩法的时候,最主要考虑的就是使用触发器来完成。

触发器分为了:Event(事件)、Condition(条件)、Action(动作)三个部分,简称ECA。

  • 事件:触发器的起点。比如“游戏开始”、“某个单位死亡”。
  • 条件:满足特定条件才可以触发。比如“玩家的金币超过某个数值”
  • 动作:要做的事情,也是触发器的主体。比如“创建单位”、“播放音效”等等。

ECA三个字母并列写出来可能会让人觉得逻辑是差不多均匀地分成这三个部分,但实际上大部分的逻辑都会在A(动作)上,并且动作中还会包含条件。因此,如果按照占比来形象化地写出ECA,那会是:
在这里插入图片描述


另一个要注意的是:
虽然你可以在编辑器的主页面打开触发器的编辑器:
在这里插入图片描述
但这里只会看到属于地图的触发器。实际还有很多触发器属于其他物体。例如物编中编辑的技能,就拥有触发器:
在这里插入图片描述
比如关羽的青龙护体技能,就要触发一些治疗和添加BUFF的动作。

在物编中所编辑的以下物体都拥有触发器:

  • 单位
  • 物品
  • 技能
  • 魔法效果
  • 投射物
  • 可破坏物

没有触发器的物体,可以说本身的交互性更低。但是它们仍旧可以被触发器所引用,比如音效本身没有触发器,但触发器包含了音效相关的动作,所以你可以在其他触发器中实现音效相关的逻辑。

也就是说:

拥有
拥有
拥有
地图
地图的触发器
物编
各个单位
各个单位的触发器
各个技能
各个技能的触发器
其他...(有的拥有触发器,有的没有触发器)

8. 界面

“界面” 就是字面意思。
在Y3编辑器中可以打开“界面编辑器”来编辑界面:
在这里插入图片描述
触发器中包含了界面相关的动作:
在这里插入图片描述
所以触发器可以操纵界面。
但这并不是说界面单方面被触发器操纵。界面中比如“按钮点击”也可以主动地触发逻辑,这是通过界面自己的事件完成的。
比如这里有个按钮,添加了一个界面上的事件,名为 button_yaksuetest:
在这里插入图片描述
那么后续,就可以在地图的触发器中添加一个触发器,其事件为“触发界面事件button_yaksuetest”
在这里插入图片描述
这样,界面上的按钮点击时,就可以触发这里的动作了。

因此,界面和触发器是双向触发的:

通过界面事件来触发
操控
界面
地图的触发器

9. 资源

“资源” 这里指的是“资源管理器”里的资源。它们是纯美术性的,完全不包含游戏逻辑。它们没法编辑属性,当然也没有触发器。

它们会被一些物体的属性所引用,或者被触发器引用。例如:

  • 模型资源:会被单位所引用。
  • 声音资源:会被物编中的声音所引用,物编中将会有一些属性编辑,比如对其的分类以及淡入淡出时间等。
  • 特效资源:触发器可以创建指定某个特效

因此,简单来讲:

引用
引用
物编中的物体属性
资源
触发器

总结

  • 所有的编辑本质上都是编辑项目文件夹中的文件。
  • 项目包含一个或多个地图。当前大部分数据都是归属于某个地图中。
  • 地图包含地形数据。
  • 地图包含若干个物件。
  • 物编中可以编辑多种物体的数据。“物体”意味着类型或者说模板,“物件”意味着使用某个模板在地图上创建出的实例。
  • 触发器被广泛地使用于玩法逻辑中。地图拥有触发器,很多物体也拥有触发器。
  • 界面和触发器是双向触发的。
  • 资源是纯美术性的,完全不包含游戏逻辑。但资源可以被物体或触发器所引用。

特别的,针对于“物件”、“物体”、“物品”这三个开头字相同的词语,也总结下它们的关系以防混淆:
“物品” 是 “物体” 中的一类。“物品” 可以作为 “物件” 放到地图上。

此外要说明,本篇的说法均为自己的理解,如果与官方文档有冲突,那么以官方文档的说法为准。
想要进一步学习编辑器,可以查阅官网(https://163.com/y3/?source=dy)上的文档来获取更深入的知识:Y3编辑器-开发者文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/352107.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2实现一个简易实用的日历(可特殊标记多个日期)

效果如下&#xff1a; <template><div class"calendar"><div class"header"><button click"previousMonth"><</button><h2>{{ currentYear }}-{{ currentMonth }} </h2><button click"nex…

成都爱尔胡建斌院长提醒一张眼底照,眼病早知道

眼底藏在眼睛后方&#xff0c;平时没注意无察觉&#xff0c;其实非常重要。它包含的部位多掌控着视觉问题&#xff0c;稍不注意就是视觉受损&#xff0c;视觉缺失&#xff0c;严重的甚至失明致盲。 眼球前面的角膜、晶体等&#xff0c;被称为眼前段&#xff0c;后面则被称之为…

-------------------------面试散文-----------------------------------

问题1&#xff1a;vue中动态引入图片&#xff0c;为什么使用require&#xff1f; 回答&#xff1a;因为动态添加的src 编译过后的文件地址和被编译过后的资源文件地址不一致&#xff0c;从而导致无法访问题 而使用require 返回的就是资源文件被编译后的文件地址&#xff0c;从…

kafka在windows上的启动

启动zookeeper 解压kafka安装包到对应目录下&#xff0c;找到对应config目录下的zookeeper.properties文件 新建一个data文件夹&#xff0c;随便放哪 打开该文件&#xff0c;找到 dataDir/tmp/zookeeper 属性 将原来的属性值&#xff0c;修改为新建data文件夹地址&#xff0c;…

虚拟声卡实现音频回环

虚拟声卡实现音频回环 一、电脑扬声器播放声音路由到麦克风1. Voicemeeters安装设置2. 音频设备选择 二、回声模拟 一、电脑扬声器播放声音路由到麦克风 1. Voicemeeters安装设置 2. 音频设备选择 以腾讯会议为例 二、回声模拟 选中物理输入设备“Stereo Input 1”和物理输出设…

Excel小技巧| 批量多列多行转为一列

前期刘小生Star分享了Excel批量一列转多列多行&#xff0c;你学会了嘛&#xff01; 前期刘小生遇到需“对多列对行数据合并并找到唯一不重复的信息”&#xff0c;今天举一反三&#xff0c;继续沿用“替换等号”方法&#xff0c;将多列多行转为一列&#xff01; 下面一个模拟案…

东理咨询交流论坛系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术、B/S架构 工具&#xff1a;MyEclipse 系统展示 首页 管理员功能…

fs.1.10 ON rockeylinux8 dockerfile模式

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 rockeylinux8 docker上编译安装fs.1.10的流程记录&#xff0c;本文使用dockerfile模式。 环境 docker engine&#xff1a;Version 24.0.6 rockylinux docker&#xff1a;8 freeswitch&#xff1a;v1.10.7 dockerfi…

linux 安装sftp及使用sftp上传和下载

一、centos7 安装sftp 1.安装 OpenSSH 服务&#xff1a; sudo yum install openssh-server2.启动 SSH 服务&#xff0c;并设置为开机启动&#xff1a; sudo systemctl start sshd sudo systemctl enable sshd3.创建一个新用户&#xff0c;用于SFTP连接&#xff08;替换your_…

文件操作(1)(C语言版)

前言&#xff1a; 为什么要学习文件操作&#xff1a; 1、如果大家写过一些代码&#xff0c;当运行结束的时候&#xff0c;这些运行结果将不复存在&#xff0c;除非&#xff0c;再次运行时这些结果才能展现在屏幕上面&#xff0c;就比如之前写过的通讯录。 现实中的通讯录可以保…

数据结构进阶——AVL树

数据结构进阶——AVL树 0. 前言1. AVL树的概念2. AVL树节点&#xff0c;和树的定义3. AVL树的插入4. AVL树的旋转5. AVL树的验证6. AVL树的删除&#xff08;了解&#xff09;7. AVL树实现完整代码8. AVL树的性能 0. 前言 学习本章&#xff0c;需要大家先掌握搜索二叉树&#xf…

python GUI开发: tkinter事件处理的几种方式详解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

高考之后,专业与学校如何选择?

随着2024年高考的结束&#xff0c;考生们面临着选择专业或学校的难题。选择专业意味着专注于一个特定领域&#xff0c;直接影响未来的职业发展和兴趣培养&#xff1b;而选择学校则提供了更优越的学术氛围和广泛的社交机会&#xff0c;对个人综合素质提升有重要作用。无论选择哪…

【Linux命令行】从时间管理->文件查找压缩的指令详解

目录 1.date 命令&#xff08;显示时间&#xff09; 1.1 显示方面 1.2 设定时间 1.3 时间戳转换 1.4 cal&#xff08;日历&#xff09; 2. 重定向 2.1 输出重定向&#xff08;echo >&#xff09;cin 2.2 追加重定向 >> 2.3 输入重定向 < cout 3.find 指…

机器学习python实践——关于ward聚类分层算法的一些个人心得

最近在利用python跟着参考书进行机器学习相关实践&#xff0c;相关案例用到了ward算法&#xff0c;但是我理论部分用的是周志华老师的《西瓜书》&#xff0c;书上没有写关于ward的相关介绍&#xff0c;所以自己网上查了一堆资料&#xff0c;都很难说清楚ward算法&#xff0c;幸…

Java小结

# Java的特点 Java是一门面向对象的编程语言。面向对象和面向过程的区别参考下一个问题。 Java具有平台独立性和移植性。 Java有一句口号&#xff1a;Write once, run anywhere&#xff0c;一次编写、到处运行。这也是Java的魅力所在。而实现这种特性的正是Java虚拟机JVM。已…

Dart 弱引用进阶

前言 村里的老人说&#xff1a;“真正的强者&#xff0c;都是扮猪吃老虎。” 日常开发中经常需要用到弱引用&#xff0c;Dart 语言里也有提供弱引用的接口 WeakReference&#xff0c;我们可以基于它开发更强大的复杂结构。 在前面的文章中&#xff0c;我们用到了一个以弱引用…

【笔记】【Git】多个dev分支合并到master分支的文件冲突

问题描述 多个dev分支在同步开发&#xff0c;同时发起代码评审&#xff0c;但合入master的时候存在先后顺序&#xff0c;那么后面同文件的操作则会提示“合并有文件冲突”&#xff0c;导致代码无法入库&#xff0c;只能重新提交。 在个人分支中如何解决与master分支差异&#…

香港优才计划中介避坑,深圳哪家优才中介有实力?

随着香港优才计划取消配额限制以来&#xff0c;优才计划递交申请量骤增&#xff0c;许多DIY的申请人在递交申请后&#xff0c;长时间未能收到审批结果&#xff0c;甚至有人等待了12个月之久仍对审批进展一无所知。 而一些有中介协助的申请人&#xff0c;在等待审批的过程中&am…

通过git命令查询某个用户提交信息

要查询某个用户通过 Git 提交了多少行代码&#xff0c;可以使用以下步骤和命令来实现。这些命令将统计该用户的添加和删除的代码行数。 1、切换到你的 Git 仓库&#xff1a; cd /path/to/your/repositorygit命令结果&#xff1a; 2、查询所有用户&#xff1a; git log --pr…