首页 城市天际线 城市天际线攻略 正文

城市:天际线 MOD制作教程 MOD源码解析及开发指南

城市:天际线 MOD制作教程 MOD源码解析及开发指南

一直想写这篇文章,但是总觉得写出来也没几个人人能看得懂,太过于小众,就算看得懂,又能有几个人耐得住性子去调代码呢,所以就拖啊拖啊到现在。但是,中国人做的mod实在是太少了(当然整个工坊也就200来个=.=),咬咬牙还是写吧,希望能多看到点国人做的mod,我也有个能交流的朋友是不。

本文主要阐述天际线AI类MOD开发的基础,包括天际线概念框架体系、基本API、进阶开发以及注意事项,希望能抛砖引玉,给有编程基础的朋友一个入门的方向。更多的造化就看您的努力了。本文将以公交增容MOD的源码为例进行讲解。

需要阅读者必须具备基本的面向对象基础,可使用vs studio进行开发及调试。另外由于本人主要从事java开发工作,c#纯属自学,所以有关概念表述的不一定十分准确,各位看客要自行甄别。

如何搭建开发环境我在这里就不再废话了(我只提一句,是library类工程),如果你不知道怎么搭建开发环境,基本也看不懂我这篇文章。对了,按照官方的说法,你只要把c#代码写好,扔到mod文件夹下面就好了,他们会编译这些代码。但是我没有成功,我是在vs里面直接build成dll后扔到mod里的,效果一样。

一、首先是天际线的基本概念体系,以及AI在其中所起的作用。

游戏里有很多的建筑物、人、车等事物。这些东西都有自己的属性,比如位置在哪?颜色?是生老病死,还是3级5级?移动速度?等等,描述的是物体的客观状态。还有一类,就是这些事物的行为方式:

例如小人是去买东西,还是去上班?出门是坐公交还是自己开车?公交车下一站往哪开?建筑物是升级还是废弃?这些基本都是由各个物件自己决定的,那么这个决策部分,就称之为AI,用面向对象来说,就是行为/方法(method)

比如市民,市民是一个类,名字、男女、年龄、教育程度、健康状况、是否在开车等等,是属性。但是市民有几十万,每一个市民都有自己不同的属性,有几十万的对象,在内存里都要占用相应的位置,但是他们的AI是一致的,AI只有一个。修改了这个AI,所有市民的行为方式都会相应变化。

然后是天际线中跟AI相关的有如下常见类名后缀:

AI、Manager、Info(当然还有很多与UI相关的,我就不再列举了,跟本文关系不大)

AI毫无疑问就是AI类的了,CitizenAI就是市民AI(这里我简单化了,后面我会详细讲到,这个CitizenAI其实不是“居民AI”)

Manager是所有相关对象引用的管理类,比如CitizenManager就是管理所有市民的管理器,无论是创建一个市民,还是查询所有生病的市民,都要通过这个管理器

Info是一类对象的“模板”。这里我用建筑物来解释。比如警察总局,就是一个BuildingInfo类的对象。里面定义了这个物件的名称叫“警察总局”,所有警察总局的属性,比如造价、维护费用、占地大小等等,都是在这里的,警察总局的AI,也是在这里有一个引用(AI是另外一个类)。不管你在游戏中建几个“警察总局”,这个BuildingInfo对象都会只有一个,但是不同位置的警察总局,会有多个不同的Building对象(其实是struct)来表达,比如具体的xz位置(y在天际线里是高度轴),或者你给他改名叫“天下第一警察总局”,那么名字也是存在这里的。

接着,是跟AI相关的横向概念。

天际线里AI总共分4类:建筑物(Building)、车辆(Vehicle)、市民(Citizen)、路网(Net)。

每类都会有一个上述英文名称的struct来表达数据, 以及配套的前述3个类(AI、Manager、Info),和众多的相关衍生类。

当然这也只是一个最基本的分类,最深的继承关系可达7层,由于此图是在是太大,所以我在下图仅以市民AI举例说明:

在天际线中,CitizenAI其实应该翻译成是“生物AI”好点。它有2个子类:动物AI和人类AI。也就是说,你在游戏中看到的鸟啊,宠物狗啊什么的,其实都是算作是Citizen,都用Citizen这个struct来存储数据的,占用那104万上限。动物AI就不说了。人类AI中又分为服务人员AI(就是消防队那个灭火的小人、灵车抬尸体的小人等)、旅游者AI和居民AI。这里最多的就是居民了,104万的上限,我看有人达到了101万。

那么,这所有的104万的Citizen,全部都是由CitizenManager来管理的。CitizenManager中有创建市民的方法,销毁的方法,查询的方法等。当前市民数量、Citizen集合的引用等信息,都是这个类的变量,市民的总数上限啊、市民出行开车的概率啊、生孩子的概率啊、成为gay的概率啊等等常量,也都在这里。这个CitizenManager是单例的,你不能显式的去创建这个对象,调用单例的方法后面的代码里有。

另外还要提一句,市民上限是100万多点,但是不代表所有的市民都会被显卡“画出来”,只有被实例化(Instance)的市民,才会交给frame,去具体的在界面上画出来。Instance的上限,我记得是65000+,所以大家不用担心人多了显卡“画”不动


点击进入 城市天际线 专区

相关信息

城市天际线怎么增大路口 路口扩大的技巧分享
城市天际线怎么提高住宅幸福度 提高方法介绍
城市天际线工业DLC原材料足运输问题解决方法
城市天际线水力发电厂不发电怎么办 发电站使用指南
城市天际线废弃建筑怎么铲除 基础功能介绍
城市天际线怎么建高架桥 道路建造技巧分享
城市天际线垃圾怎么处理 废料处理设施建设详解
城市天际线饮用水污染怎么办 防止饮用水污染方法介绍
城市天际线公共交通怎么赚钱 公共交通赚钱方法介绍
城市天际线工厂为什么荒废了 工厂荒废原因介绍
城市天际线高犯罪率成就怎么获得 高犯罪率达成条件
城市天际线压缩包文件损坏怎么办 解压出错问题解决办法
城市天际线后期怎么发展 城市天际线后期发展方向指南
城市天际线新手开局攻略 城市天际线新手怎么开局
城市天际线交通工具一览 城市天际线交通方式介绍
城市天际线运河有什么作用 城市天际线运河作用解析
城市天际线垃圾场怎么拆除 城市天际线垃圾场拆除方法
城市天际线路面积水怎么办 城市天际线路面积水解决方法
城市天际线进出口系统运行 城市天际线进出口系统运行教程
城市天际线开局攻略 城市天际线开局怎么玩