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

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

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

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

一直想寫這篇文章,但是總覺得寫出來也沒幾個人人能看得懂,太過于小眾,就算看得懂,又能有幾個人耐得住性子去調(diào)代碼呢,所以就拖啊拖啊到現(xiàn)在。但是,中國人做的mod實在是太少了(當然整個工坊也就200來個=.=),咬咬牙還是寫吧,希望能多看到點國人做的mod,我也有個能交流的朋友是不。

本文主要闡述天際線AI類MOD開發(fā)的基礎(chǔ),包括天際線概念框架體系、基本API、進階開發(fā)以及注意事項,希望能拋磚引玉,給有編程基礎(chǔ)的朋友一個入門的方向。更多的造化就看您的努力了。本文將以公交增容MOD的源碼為例進行講解。

需要閱讀者必須具備基本的面向?qū)ο蠡A(chǔ),可使用vs studio進行開發(fā)及調(diào)試。另外由于本人主要從事java開發(fā)工作,c#純屬自學,所以有關(guān)概念表述的不一定十分準確,各位看客要自行甄別。

如何搭建開發(fā)環(huán)境我在這里就不再廢話了(我只提一句,是library類工程),如果你不知道怎么搭建開發(fā)環(huán)境,基本也看不懂我這篇文章。對了,按照官方的說法,你只要把c#代碼寫好,扔到mod文件夾下面就好了,他們會編譯這些代碼。但是我沒有成功,我是在vs里面直接build成dll后扔到mod里的,效果一樣。

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

游戲里有很多的建筑物、人、車等事物。這些東西都有自己的屬性,比如位置在哪?顏色?是生老病死,還是3級5級?移動速度?等等,描述的是物體的客觀狀態(tài)。還有一類,就是這些事物的行為方式:

例如小人是去買東西,還是去上班?出門是坐公交還是自己開車?公交車下一站往哪開?建筑物是升級還是廢棄?這些基本都是由各個物件自己決定的,那么這個決策部分,就稱之為AI,用面向?qū)ο髞碚f,就是行為/方法(method)

比如市民,市民是一個類,名字、男女、年齡、教育程度、健康狀況、是否在開車等等,是屬性。但是市民有幾十萬,每一個市民都有自己不同的屬性,有幾十萬的對象,在內(nèi)存里都要占用相應(yīng)的位置,但是他們的AI是一致的,AI只有一個。修改了這個AI,所有市民的行為方式都會相應(yīng)變化。

然后是天際線中跟AI相關(guān)的有如下常見類名后綴:

AI、Manager、Info(當然還有很多與UI相關(guān)的,我就不再列舉了,跟本文關(guān)系不大)

AI毫無疑問就是AI類的了,CitizenAI就是市民AI(這里我簡單化了,后面我會詳細講到,這個CitizenAI其實不是“居民AI”)

Manager是所有相關(guān)對象引用的管理類,比如CitizenManager就是管理所有市民的管理器,無論是創(chuàng)建一個市民,還是查詢所有生病的市民,都要通過這個管理器

Info是一類對象的“模板”。這里我用建筑物來解釋。比如警察總局,就是一個BuildingInfo類的對象。里面定義了這個物件的名稱叫“警察總局”,所有警察總局的屬性,比如造價、維護費用、占地大小等等,都是在這里的,警察總局的AI,也是在這里有一個引用(AI是另外一個類)。不管你在游戲中建幾個“警察總局”,這個BuildingInfo對象都會只有一個,但是不同位置的警察總局,會有多個不同的Building對象(其實是struct)來表達,比如具體的xz位置(y在天際線里是高度軸),或者你給他改名叫“天下第一警察總局”,那么名字也是存在這里的。

接著,是跟AI相關(guān)的橫向概念。

天際線里AI總共分4類:建筑物(Building)、車輛(Vehicle)、市民(Citizen)、路網(wǎng)(Net)。

每類都會有一個上述英文名稱的struct來表達數(shù)據(jù), 以及配套的前述3個類(AI、Manager、Info),和眾多的相關(guān)衍生類。

當然這也只是一個最基本的分類,最深的繼承關(guān)系可達7層,由于此圖是在是太大,所以我在下圖僅以市民AI舉例說明:

在天際線中,CitizenAI其實應(yīng)該翻譯成是“生物AI”好點。它有2個子類:動物AI和人類AI。也就是說,你在游戲中看到的鳥啊,寵物狗啊什么的,其實都是算作是Citizen,都用Citizen這個struct來存儲數(shù)據(jù)的,占用那104萬上限。動物AI就不說了。人類AI中又分為服務(wù)人員AI(就是消防隊那個滅火的小人、靈車抬尸體的小人等)、旅游者AI和居民AI。這里最多的就是居民了,104萬的上限,我看有人達到了101萬。

那么,這所有的104萬的Citizen,全部都是由CitizenManager來管理的。CitizenManager中有創(chuàng)建市民的方法,銷毀的方法,查詢的方法等。當前市民數(shù)量、Citizen集合的引用等信息,都是這個類的變量,市民的總數(shù)上限啊、市民出行開車的概率啊、生孩子的概率啊、成為gay的概率啊等等常量,也都在這里。這個CitizenManager是單例的,你不能顯式的去創(chuàng)建這個對象,調(diào)用單例的方法后面的代碼里有。

另外還要提一句,市民上限是100萬多點,但是不代表所有的市民都會被顯卡“畫出來”,只有被實例化(Instance)的市民,才會交給frame,去具體的在界面上畫出來。Instance的上限,我記得是65000+,所以大家不用擔心人多了顯卡“畫”不動

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

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

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

熱門評論

全部評論

Steam正版購買
今日特惠城市天際線DLC 日落港灣
城市天際線DLC 日落港灣
-41%¥64¥38
立即購買
3DM自運營游戲推薦 更多+