游民星空 > 攻略秘籍 > 攻略 > 正文

城市天际线 MOD基础开发教程

2015-04-10 19:20:28 来源:3DM论坛 作者:xxyztwz 编辑:墨池 我要投稿

二、基本API解读

  官方给出了一个基本的API文档。但是。真的是太基本了,基本什么也做不了。但是给的这些API又确实非常基础,无论你做什么MOD,这几个API还确实是很常用的。所以还是要大体上说一下的。

1、IUserMod

  最简单,最常用的interface,没有之一。就是定义MOD的名称和描述。基本没其他作用。

  代码:

游民星空

  要注意的是namespace的定义。有些同学说我的mod怎么冲突了,其实就是这个namespace重名了。所以,不同的mod必须要起不同的namespace,即使类名不同也不行。所以推荐跟你的mod名称对应。

  其他应该很简单吧。我觉得好像没什么要解释的。unit_number这个问题我后面再说。

2、LoadingExtensionBase

  这个抽象类是在游戏存档加载时生效的(包括新建游戏)。

  4个方法,create、release是单例创建和销毁时触发的,这个貌似很少用

  比较常用的是load和unload方法,就是存档加载和退出时的方法。

游民星空

3、ThreadingExtensionBase

  这个类其实也还算是常用的,就是在游戏画面(frame)每次刷新时,触发的地方。只是在公交增容这个mod里我没用到。需要注意的是,这个类中的update()方法,触发的频率非常高,不要试图在这个方法里做很复杂的事情,基本判断个bool值,或者是算个简单地数字就好了,指望这里进行复杂的对象操作,或者是打印日志什么的,只有一个下场,就是游戏永远处于加载状态,cpu飙升。

  一般如果你要做界面什么的,才会用到这个类。

  到这里基本结束。剩下的几个官方接口,我觉得都是很好理解的,没什么要特别说的了,而且公交增容这个mod也没用到。我觉得一般大家看看也就能理解了。

  所以呢,大家会感觉到,啊?这就是官方接口?怎么没见你写什么代码来让公交增容啊?恩,就是这样的,所以我才说,官方给的API,基本什么也做不了。

三、进阶篇

  然后就是我们的hack时间了。这部分没有任何官方说明,出现的bug也只能靠我们自己解决,出现任何奇怪的事情都是正常的。然后我们继续。

  要替换官方的BusAI,最简单的方法我相信大家已经猜到了,就是继承官方的AI,然后仅仅修改我们需要修改的部分就好了。那么,我也是这么干的。

游民星空

  好了,这里就是我们增容的核心代码了。那么现在有一个bug,就是公交会闪。在这里我表示我非常的冤枉,跟我真的没啥关系。我没动frame..我只是替换了个数组。

  所以,这个替换是非常生硬的,直接的后果就是会导致存档发生变化。即使关闭了mod,也无法改变已经客观存在的链表结构。所以我说嘛。官方偷懒。不好好的调用那个容积属性进行判断。非要搞数组,还是链表结构的。真是无语。

  然后,上面只是公交车的,下面是地铁和客运火车的。我直接贴代码了,因为结构差不多,我就不解释了。有一个小bug,会导致一个不合理的现象,但是很隐蔽,不知道大家能发现么?

游民星空游民星空

四:其他要交代的

  打印调试语句:

  DebugOutputPanel.AddMessage(MessageType.Message,"outputsomething");

  进入游戏后按F7,即可调出控制台

  替换官方AI会导致跟其他mod冲突的概率大大加大,换句话说,如果其他mod也试图跟你替换同一个AI,那么一定最后只会有一个成功。所以,后来我基本不再写替换官方AI的MOD了。做的那个出乎我自己意料的、大家很喜欢的、停车收费降居民需求的MOD,其实就是我替换自己建筑物的AI,从理论上讲,基本不会跟别人冲突掉。

  另外,这个游戏是使用的UnityEngine引擎。其中大量的模拟了物理方面的规则。所以,在改代码的时候,时刻要牢记一定要符合物理规则。比如,把车辆速度调快,确实车速会增加的,但是,拐弯的时候也会翻车的,很真实,符合物理规则。

更多相关内容请关注:城市:天际线专区

上一页 1 2
友情提示:支持键盘左右键“← →”翻页
文章内容导航
游民星空APP
随手浏览游戏攻略
code
    没有任何记录
    没有任何记录
单机游戏下载
休闲娱乐
综合热点资讯
游民星空联运游戏