大家好,我是Sergey。大家估计更熟悉MacSergey这个名字。我制作了《Cities: Skylines》一些热门的模组,诸如路口划线工具(Intersection Marking Tool)、节点控制器更新版(Node Controller Renewal)、道路工具箱(Network Multitool)等等。我于2年前受到Colossal Order雇用,目前正在开发《Cities: Skylines》的模组制作功能。今天我撰写这篇开发者日志,旨在与大家分享我们制作代码模组的方法。
优化代码模组制作
代码模组制作是《Cities: Skylines》的重要部分,我们希望 《Cities: Skylines II》也能有相同,甚至更多模组制作的可能性。我们相信,可以修改游戏是件很酷的事,并且能带来许多机遇。如果您观察一下不同玩家如何使用模组游玩《Cities: Skylines》 ,您会看到完全不同的游玩风格,仿佛他们玩的根本是不同的游戏。一些玩家喜欢事无巨细地还原真实世界;一些玩家喜欢管理交通和产业生产链;一些玩家则放飞自我,让100场龙卷风袭卷城市。
对于“完美的功能组合”,每个人都有不同见解。我们从社区汲取了许多热门建议,将它们纳入游戏的基础功能,但实话说,实现所有玩家的所有愿望是不可能的。这时就该模组出场了。每个人都可以按自己的喜好加入内容,修改游戏,即便您是全世界唯一需要这种功能的玩家。
对我来说就是这样的情况。我是在2019年知道了《Cities: Skylines》 ,当时我在网上看到一篇帖子,说一名玩家在该游戏中复刻了他的家乡城市,这让我也跃跃欲试起来。我开始玩这款游戏,我喜欢游戏自带的功能,但到了某一时刻,我开始设想“要是能做到这样或那样的事就好了。”就这样,我意识到我可以修改游戏,但遗憾的是,我找不到任何能实现我想法的模组,于是我决心自己编写。我没想到我的模组会流行起来,也没想到有其他人需要这些功能,结果我的模组大受欢迎。
我觉得很棒的一点是,尽管《Cities: Skylines》发布以来已过去将近9年,但还有新的模组陆续出现。对于社区来说,这其中一些模组已经成为游戏的必要部分。这只是因为,直到有人为自己制作了这些模组,并分享出来,其他人才意识到他们需要这些功能!
为《CITIES: SKYLINES II》制作模组
《Cities: Skylines》为模组制作提供的支持非常有限。通常您会遇到一个瓶颈——游戏不让您轻易修改一些内容,您就需要花费数日才能实现这种修改。其他模组作者也会遇到同样的限制,并以自己的方式实现修改,而这些实现方式可能彼此冲突。
在《Cities: Skylines II》 ,我们希望提供一切可能的支持,让模组制作更轻松,这样,您就不必自己实现几乎所有模组都需要的、独立于其功能之外的通用功能。我们还进行了一些生活质量方面的优化,这样您就不用花费数日研究您应该安装哪个外部工具版本,或是如何在IDE中创建模组项目,添加所需的游戏从属模组来编写您的模组。
要实现我们的目标,第一步是制作模组制作工具链并投入使用。只需按一个键就可以安装所有需要的从属模组和外部工具,诸如模组制作所需的Unity引擎、Burst编译器和ECS。如果任何从属模组有更新,或者运行要求发生改变,模组制作工具链会在您打开游戏时立即通知您,并提供更新,让您保持最新的开发设置。(图1)
接下来,我们制作模组项目模板,它使用新的.Net模板机制,在Visual Studio或Rider上创建新项目时会显示在项目列表中。所有需要的从属模组、路径和构建后操作都设置好了,您只需按下“构建”按钮,模组将被编译、后处理,并放入正确的文件夹,您启动游戏就可以看到它。(图2)
模组完成后,可以使用默认IDE的发布选项,直接从Visual Studio或Rider发布到 Paradox Mods。项目模板中有个空的发布配置文件需要填写,填写完毕后,点击项目,选择“发布”选项。您的模组将发布到Paradox Mods,其他玩家可以订阅并使用。(图3)
优化模组
游戏使用Unity引擎的一些新技术,诸如实体组建系统或Burst编译,来利用多线程和低级别优化,这能将部分计算的速度提升30至40倍。但是需要额外知识才能运用这些技术,从而从中受益,否则使用这些技术可能反而降低性能。《Cities: Skylines》中人们习惯使用的模组制作方法在《Cities: Skylines II》并不会收获最佳结果。
您依然可以使用Harmony之类《Cities: Skylines》中普遍的模组制作工具,但续作中其局限更多了。Harmony只能修改托管代码,但经过Burst编译之后,为了优化,游戏的部分代码成了非托管代码。
优化代码模组制作
代码模组制作是《Cities: Skylines》的重要部分,我们希望 《Cities: Skylines II》也能有相同,甚至更多模组制作的可能性。我们相信,可以修改游戏是件很酷的事,并且能带来许多机遇。如果您观察一下不同玩家如何使用模组游玩《Cities: Skylines》 ,您会看到完全不同的游玩风格,仿佛他们玩的根本是不同的游戏。一些玩家喜欢事无巨细地还原真实世界;一些玩家喜欢管理交通和产业生产链;一些玩家则放飞自我,让100场龙卷风袭卷城市。
对于“完美的功能组合”,每个人都有不同见解。我们从社区汲取了许多热门建议,将它们纳入游戏的基础功能,但实话说,实现所有玩家的所有愿望是不可能的。这时就该模组出场了。每个人都可以按自己的喜好加入内容,修改游戏,即便您是全世界唯一需要这种功能的玩家。
对我来说就是这样的情况。我是在2019年知道了《Cities: Skylines》 ,当时我在网上看到一篇帖子,说一名玩家在该游戏中复刻了他的家乡城市,这让我也跃跃欲试起来。我开始玩这款游戏,我喜欢游戏自带的功能,但到了某一时刻,我开始设想“要是能做到这样或那样的事就好了。”就这样,我意识到我可以修改游戏,但遗憾的是,我找不到任何能实现我想法的模组,于是我决心自己编写。我没想到我的模组会流行起来,也没想到有其他人需要这些功能,结果我的模组大受欢迎。
我觉得很棒的一点是,尽管《Cities: Skylines》发布以来已过去将近9年,但还有新的模组陆续出现。对于社区来说,这其中一些模组已经成为游戏的必要部分。这只是因为,直到有人为自己制作了这些模组,并分享出来,其他人才意识到他们需要这些功能!
为《CITIES: SKYLINES II》制作模组
《Cities: Skylines》为模组制作提供的支持非常有限。通常您会遇到一个瓶颈——游戏不让您轻易修改一些内容,您就需要花费数日才能实现这种修改。其他模组作者也会遇到同样的限制,并以自己的方式实现修改,而这些实现方式可能彼此冲突。
在《Cities: Skylines II》 ,我们希望提供一切可能的支持,让模组制作更轻松,这样,您就不必自己实现几乎所有模组都需要的、独立于其功能之外的通用功能。我们还进行了一些生活质量方面的优化,这样您就不用花费数日研究您应该安装哪个外部工具版本,或是如何在IDE中创建模组项目,添加所需的游戏从属模组来编写您的模组。
要实现我们的目标,第一步是制作模组制作工具链并投入使用。只需按一个键就可以安装所有需要的从属模组和外部工具,诸如模组制作所需的Unity引擎、Burst编译器和ECS。如果任何从属模组有更新,或者运行要求发生改变,模组制作工具链会在您打开游戏时立即通知您,并提供更新,让您保持最新的开发设置。(图1)
接下来,我们制作模组项目模板,它使用新的.Net模板机制,在Visual Studio或Rider上创建新项目时会显示在项目列表中。所有需要的从属模组、路径和构建后操作都设置好了,您只需按下“构建”按钮,模组将被编译、后处理,并放入正确的文件夹,您启动游戏就可以看到它。(图2)
模组完成后,可以使用默认IDE的发布选项,直接从Visual Studio或Rider发布到 Paradox Mods。项目模板中有个空的发布配置文件需要填写,填写完毕后,点击项目,选择“发布”选项。您的模组将发布到Paradox Mods,其他玩家可以订阅并使用。(图3)
优化模组
游戏使用Unity引擎的一些新技术,诸如实体组建系统或Burst编译,来利用多线程和低级别优化,这能将部分计算的速度提升30至40倍。但是需要额外知识才能运用这些技术,从而从中受益,否则使用这些技术可能反而降低性能。《Cities: Skylines》中人们习惯使用的模组制作方法在《Cities: Skylines II》并不会收获最佳结果。
您依然可以使用Harmony之类《Cities: Skylines》中普遍的模组制作工具,但续作中其局限更多了。Harmony只能修改托管代码,但经过Burst编译之后,为了优化,游戏的部分代码成了非托管代码。