您的位置: 单机 > 攻略 > 游戏秘籍 > 攻略详情

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

时间:2015-04-17 21:40:07
  • 来源:3DM论坛-xxyztwz
  • 作者:售梦者
  • 编辑:售梦者
0

二、基本API解读

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

1、IUserMod

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

代码:

using ICities;

namespace SuperBigTransport

{

public class Mod : IUserMod

{

public const int unit_number = 16;

public string Name

{

get

{

return "【SB】超级客运"+ unit_number * 5 + "人版 | SuperBigTransport "+ unit_number * 5;

}

}

public string Description

{

get

{

return "公交车容量改为"+ unit_number * 5 + ",火车改为" + unit_number * 5 * 8+ ",地铁改为" + unit_number * 5 * 6;

}

}

}

}

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

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

2、LoadingExtensionBase

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

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

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

看代码:

using System;

using System.Collections.Generic;

using ColossalFramework;

using ICities;

using UObject = UnityEngine.Object;

namespace SuperBigTransport

{

public class LoadingExtension : LoadingExtensionBase

{

public override void OnLevelLoaded(LoadMode mode)

{//游戏加载开始。

ForEachPrefab((VehicleInfo i) =>//在读取所有车辆信息时,对每一个车辆信息进行处理。主意这里不是每一辆车,是每一类车,注意是Info类

{

ReplaceVehicleAI

ReplaceVehicleAI

});

//游戏加载结束

}

static void ReplaceVehicleAI

where TOldAI : VehicleAI

where TNewAI : VehicleAI, IAIReplacement, new()

{

var oldAI = i.gameObject.GetComponent();

if (oldAI == null)

return;

i.gameObject.AddComponent();//必须先把新的AI注册进去,再取出来。。好奇怪的写法,但是不这么写不行

var newAI = i.gameObject.GetComponent();

newAI.CopyFrom(oldAI);//AI也有属性,如果要替换,必须把原有的属性也全部对拷,否则就会出现各种奇怪的情况

i.m_vehicleAI = newAI;

UObject.Destroy(oldAI);

newAI.InitializeAI();

}

static void ForEachPrefab(Action f) where T : PrefabInfo

{

for (var i = 0u; i < PrefabCollection.LoadedCount(); i++)

f(PrefabCollection.GetLoaded(i));

}

}

interface IAIReplacement

{

void CopyFrom(T ai);

}

}

3、ThreadingExtensionBase

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

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

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

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

友情提示:支持键盘左右键"←""→"翻页
7.7
已有5589人评分 您还未评分!
  • 类型:模拟经营
  • 发行:Paradox Interactive
  • 发售:2015-03-10(PC)
  • 开发:Colossal Order
  • 语言:简中 | 英文
  • 平台:PC PS4 XBOXONE
  • 标签:建造开放世界XGP游戏列表

玩家点评 0人参与,0条评论)

收藏
违法和不良信息举报
分享:

热门评论

全部评论

Steam正版购买
今日特惠城市:天际线
城市:天际线
-54%¥108¥49.9
立即购买
3DM自运营游戏推荐 更多+