您的位置: 單機 > 攻略 > 游戲秘籍 > 攻略詳情

城市:天際線 MOD制作教程 MOD源碼解析及開發(fā)指南

時間:2015-04-17 21:40:07
  • 來源:3DM論壇-xxyztwz
  • 作者:售夢者
  • 編輯:售夢者
0

二、基本API解讀

官方給出了一個基本的API文檔。但是。。真的是太基本了,基本什么也做不了。但是給的這些API又確實非?;A,無論你做什么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是單例創(chuàng)建和銷毀時觸發(fā)的,這個貌似很少用

比較常用的是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也有屬性,如果要替換,必須把原有的屬性也全部對拷,否則就會出現(xiàn)各種奇怪的情況

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)每次刷新時,觸發(fā)的地方。只是在公交增容這個mod里我沒用到。需要注意的是,這個類中的update()方法,觸發(fā)的頻率非常高,不要試圖在這個方法里做很復雜的事情,基本判斷個bool值,或者是算個簡單地數(shù)字就好了,指望這里進行復雜的對象操作,或者是打印日志什么的,只有一個下場,就是游戲永遠處于加載狀態(tài),cpu飆升。

一般如果你要做界面什么的,才會用到這個類。

到這里基本結束。剩下的幾個官方接口,我覺得都是很好理解的,沒什么要特別說的了,而且公交增容這個mod也沒用到。我覺得一般大家看看也就能理解了。

所以呢,大家會感覺到,啊?這就是官方接口?怎么沒見你寫什么代碼來讓公交增容啊?恩,就是這樣的,所以我才說,官方給的API,基本什么也做不了。

友情提示:支持鍵盤左右鍵"←""→"翻頁
7.7
已有5610人評分 您還未評分!

玩家點評 0人參與,0條評論)

收藏
違法和不良信息舉報
分享:

熱門評論

全部評論

STEAM正版購買
今日特惠城市:天際線
城市:天際線
-67%¥138¥45.9
立即購買
3DM自運營游戲推薦 更多+