城市:天际线 MOD制作教程 MOD源码解析及开发指南
- 来源:3DM论坛-xxyztwz
- 作者:售梦者
- 编辑:售梦者
二、基本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
{
var oldAI = i.gameObject.GetComponent
if (oldAI == null)
return;
i.gameObject.AddComponent
var newAI = i.gameObject.GetComponent
newAI.CopyFrom(oldAI);//AI也有属性,如果要替换,必须把原有的属性也全部对拷,否则就会出现各种奇怪的情况
i.m_vehicleAI = newAI;
UObject.Destroy(oldAI);
newAI.InitializeAI();
}
static void ForEachPrefab
{
for (var i = 0u; i < PrefabCollection
f(PrefabCollection
}
}
interface IAIReplacement
{
void CopyFrom(T ai);
}
}
3、ThreadingExtensionBase
这个类其实也还算是常用的,就是在游戏画面(frame)每次刷新时,触发的地方。只是在公交增容这个mod里我没用到。需要注意的是,这个类中的update()方法,触发的频率非常高,不要试图在这个方法里做很复杂的事情,基本判断个bool值,或者是算个简单地数字就好了,指望这里进行复杂的对象操作,或者是打印日志什么的,只有一个下场,就是游戏永远处于加载状态,cpu飙升。
一般如果你要做界面什么的,才会用到这个类。
到这里基本结束。剩下的几个官方接口,我觉得都是很好理解的,没什么要特别说的了,而且公交增容这个mod也没用到。我觉得一般大家看看也就能理解了。
所以呢,大家会感觉到,啊?这就是官方接口?怎么没见你写什么代码来让公交增容啊?恩,就是这样的,所以我才说,官方给的API,基本什么也做不了。
玩家点评 (0人参与,0条评论)
热门评论
全部评论