欢迎来到 Mini Metro WIKI! 本WIKI编辑权限开放,欢迎收藏起来防止迷路,也希望有爱的小伙伴和我们一起编辑哟~
目前本WIKI的主要内容已基本完成,欢迎补充教程、原型介绍等拓展内容~

全站通知:

社区地图教程

阅读

    

2022-10-01更新

    

最新编辑:Tracktor

阅读:

  

更新日期:2022-10-01

  

最新编辑:Tracktor

来自Mini MetroWIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
Tracktor

如果是第一次来,按"Ctrl+D"可以收藏随时查看更新~觉得WIKI好玩的话,请推荐给朋友哦~(◕ω<)☆
按右上角“WIKI功能→编辑”即可修改页面内容。

进入 Mod 文件夹

社区地图界面

当您第一次运行 Mini Metro 时,会在 Mini Metro 资源文件夹中创建一个 /mod/ 文件夹。位置在:

  • Windows: (Users)/AppData/LocalLow/Dinosaur Polo Club/Mini Metro/mod/
  • Mac: /Library/Application Support/unity.Dinosaur Polo Club.Mini Metro/mod/
  • Linux: ~/.config/unity3d/Dinosaur Polo Club/Mini Metro/mod/

单击社区地图界面左下角的文件夹按钮可直接进入该文件夹。

日志文件

您的 Unity Player 日志文件会记录地图加载过程中出现的错误。如果地图未出现在社区地图列表中,则应在此处进行检查。位置在:

  • Windows: (Users)/AppData/LocalLow/Dinosaur Polo Club/Mini Metro/Player.log
  • Mac: /Library/Logs/Dinosaur Polo Club/Mini Metro/Player.log
  • Linux: ~/.config/unity3d/Dinosaur Polo Club/Mini Metro/Player.log

创建新地图

要创建新地图,您需要在 /mod/ 文件夹中为新地图创建一个新的子文件夹,并为文件夹指定一个唯一的名称。(文件夹名字不能相同)

.../mod/新建文件夹

地图是通过添加到此文件夹中的 JSON 格式文件 编辑的。可以直接使用自带的记事本软件进行读取、编辑、保存。

  • city.json 定义了城市的大部分游戏信息。可以添加到文件夹中的其他文件会更改城市的其他方面。
  • theme.json 定义地图的外观(如水域分布)。
  • trains.json 定义城市中机车的速度、容量和其他信息。
  • achievements.json 允许您配置自定义挑战。
  • steam.json 包含用于上传到 Steam 创意工坊的信息。
  • preview.png/jpg/gif 预览文件将作为为您的 mod 的预览图像。


Mini Metro 只会尝试读取以 .txt 和 .json 结尾的文件,这些文件的文本内容必须是JSON格式。

JSON格式(JavaScript 对象简谱,JavaScript Object Notation)是一种轻量级的数据交换格式。如果文件不是正确的JSON格式,映射将无法加载,并尝试将错误消息输入到您的 Unity Player 日志中。

调试

每次更改地图后,都需要重新启动游戏才能使更改生效。你在Steam创意工坊上订阅的地图,或者从你的/mod/文件夹中订阅的地图,只有在游戏开始时才会加载。

如果你的地图有任何重大问题,Mini Metro 将不会加载它。你可以检查你的 Unity Player 日志文件来查找地图的任何问题,并尝试修复。大多数地图加载警告或错误都会出现在 FromUgc 的一行,可以使用搜索功能找到。

地图基础信息(city.json)

city.json 文件包含你的新城市的核心游戏信息。这些信息应位于 city.json 的顶部。
举个栗子:(以下若无说明均为举例)

"id":"kyiv",
"customName":"Kyiv",
"customDescription":"Keep Kyiv's Soviet-style metro running smoothly.",
"customLocalName": "Київ",
"customLocalNameLocale": "uk",
"crossingStyle": "Bridge",
"lineCount":5,
"audioLoadoutId":"london",
"theme":"Tube"

其中:

"id":"kyiv",

"id":标识地图的唯一字符串。它不会出现在游戏中的任何地方,但它需要不同于任何其他地图的ID。"id" 是一个唯一的ID,每个city.json文件都必须有。


"customName":"Kyiv",

"customName":社区地图界面上方显示的地图名称


"customDescription":"Keep Kyiv's Soviet-style metro running smoothly.",

"customDescription":社区地图界面下方显示的地图文字说明


"customLocalName": "Київ",

"customLocalName":如果这个地图在本地语言中具有唯一的名称,则可以通过设置该项使该本地名称以较小的文本显示在主名称下方。


"customLocalNameLocale": "uk",

"customLocalNameLocale":如果本地名称使用非英文字符,则还需要将该项设置为该本地名称的语言代码。并非所有字符都可以显示,尤其是对于CJK语言。

语言代码展开/折叠
语音 语言代码
阿拉伯语Arabic "ar"
保加利亚语Bulgarian "bg"
加泰罗尼亚语Catalan "ca"
捷克语Czech "cs"
威尔士语Welsh "cy"
丹麦语Danish "da"
德语German "de"
希腊语Greek "el"
欧洲西班牙语European Spanish "es_ES"
墨西哥西班牙语Mexican Spanish "es_MX"
芬兰语Finnish "fi"
法语French "fr"
盖尔语Gaelic "ga_IE"
印地语Hindi "hi"
波斯尼亚语Bosnian "hr"
匈牙利语Hungarian "hu"
印尼语Indonesian "id"
意大利语Italian "it"
日语Japanese "ja"
韩语Korean "ko"
毛利语Māori "mi"
马来语Malay "ms"
荷兰语Dutch "nl"
挪威语Norwegian, Nynorsk "nn_NO"
挪威语Norwegian, Bokmål "no"
波兰语Polish "pl"
巴西葡萄牙语Brazilian Portuguese "pt_BR"
欧洲葡萄牙语European Portuguese "pt_PT"
俄语Russian "ru"
斯洛伐克语Slovak "sk"
斯洛文尼亚语Slovene "sl"
塞尔维亚语(西里尔文)Serbian, Cyrillic "sr"
塞尔维亚语(拉丁文)Serbian, Latin "sr@latin"
瑞典语(芬兰)Swedish, Finland "sv_FI"
瑞典语(瑞典)Swedish, Sweden "sv_SE"
塔吉克语Tajik "tg"
泰语Thai "th"
土耳其语Turkish "tr"
乌克兰语Ukrainian "uk"
简体中文Chinese, Simplified "zh_CN"
繁体中文(香港)Chinese, Traditional, Hong Kong "zh_HK"
繁体中文(台湾)Chinese, Traditional, Taiwanese "zh_TW"
"crossingStyle": "Bridge",

"crossingStyle":决定地图将使用桥梁("Bridge")还是隧道("Tunnel")。这没有游戏效果,只决定游戏是否在升级工具栏和每周升级界面中显示桥梁或隧道符号。


"lineCount": 5,

"lineCount":城市中最多可以使用的线路数量。(注意:数字周围没有引号!)最多允许20条线路。


"audioLoadoutId":"london",

"audioLoadoutId":地图使用的声音。默认情况下使用"london"加载。(区分大小写)

经典地图的 "audioLoadoutId" 值展开/折叠
地图名称 "audioLoadoutId" 值
伦敦 "london"
伦敦1960
巴黎 "paris"
巴黎1937
纽约 "nyc"
纽约1972
芝加哥 "chicago"
柏林 "berlin"
墨尔本 "melbourne"
香港 "hongkong"
巴塞罗那 "barcelona"
大阪 "osaka"
斯德哥尔摩 "stockholm"
圣彼得堡 "saintpetersburg"
蒙特利尔 "montreal"
旧金山 "sanfrancisco"
圣保罗 "saopaulo"
首尔 "seoul"
圣地亚哥 "santiago"
华盛顿(哥伦比亚特区) "washingtondc"
新加坡 "singapore"
开罗 "cairo"
伊斯坦布尔 "istanbul"
上海 "shanghai"
广州
孟买 "mumbai"
拉各斯 "lagos"
奥克兰 "auckland"
堪培拉 "canberra"
"theme":"Tube"

"theme":地图外观。可以在 theme.json 创建新的外观主题,也可以偷懒使用经典地图自带的主题。(区分大小写)

经典地图的 "theme" 值展开/折叠
地图名称 "theme" 值
伦敦 "Tube"
伦敦1960 "Tube1960"
巴黎 "Metro"
巴黎1937 "Metro1937"
纽约 "Subway"
纽约1972 "Subway1972"
芝加哥 "Michigan"
柏林 "BVG"
墨尔本 "myki"
香港 "Octopus"
巴塞罗那 "Collserola"
大阪 "Kansai"
斯德哥尔摩 "Malaren"
圣彼得堡 "Neva"
蒙特利尔 "Opus"
旧金山 "Clipper"
圣保罗 "Luz"
首尔 "Han"
圣地亚哥 "Mapocho"
华盛顿(哥伦比亚特区) "Potomac"
新加坡 "EZ-Link"
开罗 "Giza"
伊斯坦布尔 "Metrosu"
上海 "Huangpu"
广州 "Zhujiang"
孟买 "Thane"
拉各斯 "Lagoon"
奥克兰 "Hop"
堪培拉 "Canberra"

地图外观(theme.json)

如果要自行创建地图外观主题,需添加 theme.json 文件将让你控制地图的外观,包括线路颜色、水域和车站的外观、车站轮廓大小和夜间模式选项等。

基本主题设置

(在theme.json)
"name":"Dino",

"name":类似于 city.json 里的"id","name" 是一个唯一的ID,每个theme.json文件都必须有。不能与经典地图已有的"theme"值相同。


(在city.json)
"theme":"Dino",

"theme":设置完 "name" 值后,回到 city.json,将 "theme" 值设置为与theme.json的 "name" 值一样的值。

背景和乘客的颜色

"backgroundColor":{
	"day":[255, 255, 255],
	"night":[36, 32, 33]
},
"peepColor": {
	"day":[68, 51, 51],
	"night":[242, 242, 242]
},

"backgroundColor":背景颜色(使用RGB,下同)。其中 "day" 定义日间颜色(必须),"night" 定义夜间颜色(可选)。

"peepColor":车站右上方乘客的颜色,规则与背景颜色相同。

如果不设置夜间颜色,将使用日间颜色。

水域和车站的颜色

"waterColor": {
	"internal": {
		"day": [228, 236, 244],
		"night": [228, 236, 244]
	},
	"outline": {
		"day": [228, 236, 244],
		"night": [228, 236, 244]
	},
	"outlineWidth": -1.0,
	"previewOutlineWidth": -1.0,
},
"stationColor": {
	"internal": {
		"day": [255, 255, 255], 
		"night": [53, 49, 54]
	},
	"outline": {
		"day": [10, 4, 4], 
		"night": [242, 242, 242]
	},
	"outlineWidth": 4.0
},

"waterColor":水(障碍物)的颜色。

"stationColor":车站的颜色。

"internal"、"outline":分别设置内部和边框的颜色。

"outlineWidth"、"previewOutlineWidth":分别设置在游戏过程中和城市预览中轮廓颜色的显示厚度。可以将这些设置为 -1.0 以完全不显示。

线路颜色

"lineColors": [
	{"day": [208, 200, 10]},
	{"day": [24, 64, 224]},
	{"day": [48, 208, 80]},
	{"day": [0, 192, 255]},
	{"day": [240, 176, 0]},
	{"day": [255, 32, 96]},
],

"lineColors":线路在日间(必须)和夜间(可选)的颜色。输入的数据顺序即为游戏中线路颜色的顺序。

线路颜色的数量必须与city.json中的"lineCount"(线路数量)相同。如果线路颜色数量不足,地图将无法加载。

障碍物(city.json)

障碍物(水体和岛屿等)将塑造地图的运行方式,以及希望包含在地图中的其他视觉元素,和使地图平滑过渡的背景元素。

该部分需在 city.json 内编写。

"obstacles":[
	{
		"points":[
			[-200.0,-200.0],
			[200.0,-200.0],
			[200.0,200.0],
			[-200.0,200.0],
		],
		"visual": true,
		"inverted": false,
		"decoration": false,
		"inPreview": true,
		"cornerRadius": -1.0,

		"color":{
			"day": [200, 200, 200],
			"night": [55, 55, 55],
		},
		"parent": 1,
		"fixPreview": false,
	},
	[...]
]


顶点

"points":[
	[-200.0,-200.0],
	[200.0,-200.0],
	[200.0,200.0],
	[-200.0,200.0],
],

"points":顶点的坐标位置,用于绘制水体的边缘。每个组合包含两个数字,对应X和Y的值。

第一个数字为X轴,数字越大,位置越靠右;第二个数字为Y轴,数字越大,位置越靠下。

辅助工具展开/折叠

使用矢量编辑器(如Adobe Illustrator、Inkscape或BoxySVG)设计SVG格式的地图是最简单的。导入真实的地图或城市卫星截图是很有帮助的,有一些参考资料可以帮助你绘制水体。

在SVG编辑器中,使用基本的钢笔工具来绘制每个障碍物:背景、任何碰撞的水体和岛屿以及装饰性障碍物。

  • 确保将每个对象都闭合成一个形状,而不仅仅是一个开放的路径。此外,线路必须为直线,不能使用曲线。
  • 绘制的所有岛屿都应该完全包含在一个水体内。否则,障碍物加载可能失败,地图将无法正确加载。

尽可能将地图的核心游戏特性保持在一个5000×5000像素的区域内,地图的中心位于SVG编辑器的左上角[0,0]点。注意游戏中的垂直空间和视野要比水平方向的要少。

编辑完成后,将文件保存为.svg格式。如果有SVG 1.1格式选项,请使用该选项保存。

现在,可以使用文本编辑器,像打开纯文本一样打开.svg文件。如果一切都做对了,您会发现SVG是以可读格式保存的。如果正确绘制闭合的路径(多边形),您将看到您的形状。搜索它的名称,如果你标记了它,你会看到所有顶点的列表。如果你在形状的定义中找到了字母,很可能你在某个地方添加了曲线。

(在Adobe Illustrator使用钢笔工具绘制的纯直线路径示例)
<polygon class="st0" points="89,260 119,408 399,326 282,307 329,159 232,208 190,321 117,219 "/>
  • 所有的点应该在同一行,用空格隔开,X和Y值用逗号隔开。
  • 用回车(Enter)替换所有空格,这样每个点都在不同行上。
  • 最后,在每个点数值的开头加“[”,在末尾加“],”,这样就得到了JSON格式的坐标值。
(使用刚才的示例)
[89,260],
[119,408],
[399,326],
[282,307],
[329,159],
[232,208],
[190,321],
[117,219],

现在只需将以上坐标列表复制到"points"中就完成了!

其他

"visual": true,
"inverted": false,
"decoration": false,
"inPreview": true,
"cornerRadius": -1.0,
"color": {
	"day": [200, 200, 200],
	"night": [55, 55, 55],
},
"parent": 1,

"obstacles"中的其他值用于设置水体在游戏中的作用。


"visual": true,

"visual":在游戏过程中是否在地图上绘制障碍物。


"inverted": false,

"inversed":是否将绘制的障碍物绘制为水体,水体的颜色为地图主题中水体的颜色,岛屿的颜色为地图主题中背景的颜色。你的水体应该使用false值,而背景和岛屿将被设置为true值。


"decoration": false,

"decoration":是否使用障碍物检查碰撞。

设置为true将允许线路过河无需消耗隧道或桥梁。

在不需要消耗隧道或桥梁的地图中启用此功能,可以提高性能并缩短加载时间,尤其是在具有多顶点障碍物的地图中。


"inPreview": true,

"inPreview":是否在预览图中绘制此障碍。

在任何有水体或岛屿的预览图中,都应设置为true;但如果水体或岛屿都在预览图外(或根本没有),设置为false可以提高性能并缩短加载时间。

此表显示了不同类型障碍物应使用的组合。
情况 "visual" "inverted" "decoration" "inPreview"
仅作为背景 true true true false
过河需消耗隧道或桥梁 true false false 一般为true
过河不消耗隧道或桥梁 true false true 一般为true
有车站的岛屿 true true false 一般为true
无车站的岛屿 true true true 一般为true
预览(只有水) true false true true
预览(只有岛屿) true true true true
"cornerRadius": -1.0,

"cornerRadius":可用于障碍物的顶点。使障碍物顶点变为指定半径的圆角。

设置为-1.0将禁用圆角。


"color": {
	"day": [200, 200, 200],
	"night": [55, 55, 55],
},

"color":额外内容,添加此项可为特定障碍物(水体或岛屿)设置自定义颜色,没有自定义颜色的障碍物将跟随主题中设置的颜色。


"parent": 1,

"parent":特殊值,只有在希望在地图中包含多个水体时才需要添加该值。

按照水体输入的顺序,它们分别为第0、1、2...个水体。任何与水体发生冲突的岛屿都需要在"parent"中说明属于哪个水体。如果没有设置此项,游戏将默认使用从障碍列表顶部的第一个水体。

如果设置不正确,将会导致地图中岛屿和水域交叉的明显游戏性和视觉问题。


"fixPreview": false,

"fixPreview":如果在预览图像中无法正确填充障碍物,此项应设置为true。

当预览窗口大小(请参见下面的预览部分)将预览剪切为多个对象,而不是一个连接的对象时,通常会发生这种情况。

开始区域(city.json)

障碍物设置完成后,您应该配置游戏界面的缩放和开始区域值,以确保缩放正确。如果您需要在SVG编辑器中重新调整障碍物的大小,立即执行此操作很有帮助。

以下代码应输入在city.json中。


"origin": [0, 0],

"origin":定义地图的中心点。如果您在SVG编辑器中将地图围绕 0, 0 点居中,那么它应该保持为[0, 0]。


"zoom": {
	"start": 1.3,
	"end": 0.4,
	"delay": 1,
	"duration": 55,
	"earlyZoom": 0.5,
	"lateZoom": 0.5,
},

"zoom":控制游戏地图显示范围。其中:


	"start": 1.3,
	"end": 0.4,

"start":游戏初始地图显示范围。值越高,地图显示范围越小。

"end":游戏最终地图显示范围。值越高,地图显示范围越小。

最终地图显示范围建议在0.35到0.55之间。


	"delay": 1,
	"duration": 55,

"delay":整数值,地图显示范围开始缩小前的天数。

"duration":整数值,地图显示范围从"start"缩小到"end"所需的天数。若需要快速测试"start"和"end"值的效果,可以暂时将"duration"设置为1。


	"earlyZoom": 0.5,
	"lateZoom": 0.5,

"earlyZoom":浮点值,配置游戏前期地图显示范围缩小的速度。值越大,前期地图显示范围缩小速度越快。

"lateZoom":浮点值,配置游戏后期地图显示范围缩小的速度。值越大,后期地图显示范围缩小速度越快。

以下内容不属于"zoom"范围。

"startArea":{
	"rightBottom": [-0.3, -0.2],
	"leftTop": [-0.3, -0.2]
},

"startArea":定义游戏开始时地图显示的位置。前者指X轴,后者指Y轴。

若rightBottom和leftTop的值相同,游戏开始时地图的位置则会固定。若不相同,游戏开始时地图的位置则会根据这2个值的范围随机确定。