饥荒    2017-07-16 05:25:58    773    1    3

这一章讲解Prefab。Prefab是饥荒世界构成的基础,也是Mod技术的基本内容。


Prefab,中文译名叫预制物,也可以广义地称之为物体。
在饥荒的世界中,Prefab是最基础的元素,除了操作面板和地图外,所有的一切,包括食物、人物、动物、植物、水池、矿石乃至于特效等等,都是Prefab。可以说,了解Prefab,是制作饥荒MOD的基础。

本章将讲解Prefab的相关基础知识,下一章将讲解如何构建不同种类的Prefab。如果你急于知道如何做一件衣服,一顶帽子,或者一件法杖,那么你可以先跳过本章,看下一章。但我建议你认真学习Prefab的基础知识。这些基础知识是构建的根基,只有掌握它们,你才有能力发挥你的创造力。

本章内容较多,先了解知识结构有助于更好地学习。

知识结构如下图,本章只讲述基础知识的部分

Prefab基础知识结构.png

基本概念

Prefab,可以说是饥荒世界的原子,一棵树,一块卵石,一口锅等等……凡是在世界地图中能够参与互动的,全部都是Prefab。

想要构建一个Prefab对象,可以用Prefab类的构造函数来表示:Prefab("common/inventory/lotus_umbrella", fn, assets)
一个Prefab由三部分组成,对应Prefab类构造函数的三个参数,分别是Prefab名,描述函数和加载资源表。

  • Prefab名:用于向系统注册,从而使得系统能够精确地定位到某个Prefab进行操作,比如生成一棵草。在Prefab类构造函数中,只会识别最后一个/后面的字符。比如上面的例子,系统会认为Prefab名为lotus_umbrella
  • 描述函数:用于描述Prefab的内涵,比如说它的外表是什么,有什么功能等等,应该传入一个函数。
  • 加载资源表:用于向系统说明,为了正确地呈现这个Prefab,需要加载那些动画、图片、声音文件,应该传入一张表。

Prefab分解

  1. --------------------------------------- 加载资源表 -----------------------------------
  2. local assets =
  3. {
  4. Asset("ANIM", "an
饥荒    2017-07-16 05:24:53    674    1    1

这一章的目标是介绍Mod基本结构,让你能够更好地组织代码和各种静态资源。


饥荒Mod采用了隔离良好的设计,每个Mod拥有自己的运行环境,独立于游戏主环境和其它Mod的运行环境。而且单个Mod的文件结构,和游戏本身的文件结构极其相似。这一章主要讲解Mod的架构和主要文件的作用。其中,会重点讲解两个重要的mod特有文件:modinfo.lua,modmain.lua

架构

饥荒的Mod需要遵循一定的文件结构,大体上和游戏根目录的结构一致,但也有细微的差别

大致结构图如下

Mod架构

根目录下modmain.lua、modinfo.lua,modworldgenmain.lua是三个Mod特有文件。
scripts文件夹用于放置代码,内部根据不同的类型可以再细分为prefabs,components等。
exported存放spriter动画项目,Mod Tools会自动检查这个文件夹,编译打包每个Spriter项目,以zip文件的形式存放到anim文件夹中。
剩下的文件夹,anim,images,sound等,是用于储存动画、图片、和声音资源的。

Mod特有文件

modinfo.lua

记录Mod的名字,作者,版本号等基本信息,也可以编写Mod设置,设置一些常量。这些常量可以在modmain中用特定的Mod API读取,从而实现某些变化。最重要的一点是,modinfo里可以设置mod的类型,决定这个mod是否是客户端mod。如果是主机端的MOD,是否需要所有的客户端都下载。

modinfo的写法是固定的,不过有些部分如果不需要,则可以不写。

编写内容如下:

  1. -- 以下3项内容会直接在Mod面板中显示
  2. name = "从零开始做Samansha_03f" -- Mod的名字
  3. author = "LongFei & dangdang & Trica" -- 作者名
  4. description = "教你从零开始做Samansha\n\n本教程的美术资源仅供教学使用,请勿用于自己发布的Mod" -- Mod描述
  5. version = "scaffold_03f" -- Mod版本,可以自由设定任何值,但如果要更新自己的Mod,就
饥荒    2017-07-16 05:24:04    445    1    1

本章的目的是为了帮助你了解Mod知识的全貌,把握学习的节奏。如果你急着学习更多的技术知识,可以先跳过本章,不会影响后面章节的学习,当你需要确认自己知识掌握程度的时候,可以再跳回来也无妨。但我强烈建议你先花一点时间阅读本章,在开始深入学习之前,先简单了解一下饥荒联机Mod技术的全貌,有助于你了解自己的知识掌握程度,当你在实现某个功能遇到阻碍时,能够更快地定位问题并进一步寻找到合适的解决方案。


饥荒Mod可以做很多事,相应的也需要很多领域知识。长期以来,Mod制作者们通常把Mod视作编程玩具,项目很小,只能对游戏产生局部影响。但这些年来,也产生过像黑暗英雄(Dark Hero),天堂(Up Away)这些内容丰富的Mod。可惜这两个巨型Mod都是单机版的。在联机方面,还没有产生过大幅度改变游戏机制的Mod。我本有此雄心,但最终由于时间和精力所限,难以继续。饥荒这个游戏是相当开放的,可以通过Mod做的事情非常多,希望在未来,能够有一款饥荒联机版的Mod,大幅度地改变游戏机制,形成全新的玩法,就好像Dota之于War3。这需要各方面的共同努力,而我的努力方向就是,向更多的人普及饥荒Mod制作知识。

能干什么

通过开发饥荒联机版Mod,你能够添加自己制作的内容(物品,人物,生物等),新的界面组件,也能够修改游戏原有的和其他Mod的内容。饥荒是个高度开放的游戏,除了底层引擎和部分组件外,大部分的游戏内容都是用Lua语言编写的。它们被公开地集中存放在游戏根目录/data/scripts下。这就意味着,只要你懂得如何寻找lua文件,并能够读懂源代码,你就能自己实现、或者修改游戏里的已有内容。也就是说饥荒的MOD上限是非常高的,随着你的能力增长,你就能够大幅度地改造游戏,甚至能够重造一个全新的世界。

技术清单

阅读完第一章的快速入门,你应该对Mod制作有了初步的认识了。在继续深入之前,你还需要了解整个饥荒Mod的制作技术领域划分,这有助于你在接下来的学习中,确认自己已经拥有的能力。在你想要实现某个功能时,也可以通过这个领域划分,来迅速摸清你该掌握的技术知识。当你陷入知识汪洋而不知所措的时候,可以看看下面的技术图谱,有助于你理清思路,继续

饥荒    2017-07-16 05:06:41    1102    3    2

这个系列教程很长,涉及到很多编程、游戏方面的概念。与其让你云里雾里地看着看着就放弃,不如先教你如何快速入门,通过模仿来学习,然后在这个MOD的基础上逐步展开、修改。希望这样能减少你的畏难情绪。学会制作MOD可以让你开发出更多的游戏乐趣,祝愿你能成功坚持下去。


入门一个陌生的领域,第一步总是最为困难的,因为你弄不清楚正确的方向,还有各种各样琐碎的细节来牵扯你的精力。因为不熟悉,在出了问题时也难以解决。
为了能让你更快地上手,直接操作到最核心的内容,我会提供足够完整的支架MOD供你进行操作,避免把浪费过多的时间在各种不重要的细节上,减少出错的可能。并且,会放出这一节内容全部做完之后的成品MOD,让你可以进行比对学习。

搭建支架

我的网盘/饥荒Mod指南文件夹下,下载支架MOD并安装,支架就算搭好了。

安装方法:
和一般的MOD安装方法一样,解压到游戏根目录/mods文件夹下,在游戏中启动MOD。
MOD的名字叫 “从零开始做Samansha_01”。

此外,为了添加和修改代码,你需要使用一款代码编辑器,不建议使用文本编辑器来写代码。代码编辑器可以提供高亮显示和代码折叠功能,这会极大地提高编程效率和舒适度。
对于缺乏经验的入门小白,推荐使用Notepad++,完全免费、中文、无需配置,安装完即可使用,非常方便,我初学的很长一段时间内都在使用这款编辑器。
对于有经验的程序员,请自行选择自己用得顺手的编辑器,个人推荐IDEA+Lua插件,可以很好地对代码进行管理,也支持自动补全,语法检查等功能。

添加一个新物体

在饥荒中有个名词叫Prefab,中文译名叫预制物,也可以广义地称之为物体。
在饥荒的世界中,Prefab是最基础的元素,除了操作面板和地图外,所有的一切,包括食物、人物、动物、植物、水池、矿石乃至于特效等等,都是Prefab。

可以说,了解Prefab,是制作饥荒MOD的基础。
要学习Prefab,一个简单的办法是制作一个新的Prefab。
接下来就展示如何制作一把荷叶伞,并把它添加到游戏里去。

一把荷叶伞有三个部分,这也是Prefab最基本的组成部分:

动画:显示在地图上
图片:显示在物品栏里

2/2