城市:天際線 MOD制作教程 MOD源碼解析及開(kāi)發(fā)指南
- 來(lái)源:3DM論壇-xxyztwz
- 作者:售夢(mèng)者
- 編輯:售夢(mèng)者
城市:天際線 MOD制作教程 MOD源碼解析及開(kāi)發(fā)指南
一直想寫這篇文章,但是總覺(jué)得寫出來(lái)也沒(méi)幾個(gè)人人能看得懂,太過(guò)于小眾,就算看得懂,又能有幾個(gè)人耐得住性子去調(diào)代碼呢,所以就拖啊拖啊到現(xiàn)在。但是,中國(guó)人做的mod實(shí)在是太少了(當(dāng)然整個(gè)工坊也就200來(lái)個(gè)=.=),咬咬牙還是寫吧,希望能多看到點(diǎn)國(guó)人做的mod,我也有個(gè)能交流的朋友是不。
本文主要闡述天際線AI類MOD開(kāi)發(fā)的基礎(chǔ),包括天際線概念框架體系、基本API、進(jìn)階開(kāi)發(fā)以及注意事項(xiàng),希望能拋磚引玉,給有編程基礎(chǔ)的朋友一個(gè)入門的方向。更多的造化就看您的努力了。本文將以公交增容MOD的源碼為例進(jìn)行講解。
需要閱讀者必須具備基本的面向?qū)ο蠡A(chǔ),可使用vs studio進(jìn)行開(kāi)發(fā)及調(diào)試。另外由于本人主要從事java開(kāi)發(fā)工作,c#純屬自學(xué),所以有關(guān)概念表述的不一定十分準(zhǔn)確,各位看客要自行甄別。
如何搭建開(kāi)發(fā)環(huán)境我在這里就不再?gòu)U話了(我只提一句,是library類工程),如果你不知道怎么搭建開(kāi)發(fā)環(huán)境,基本也看不懂我這篇文章。對(duì)了,按照官方的說(shuō)法,你只要把c#代碼寫好,扔到mod文件夾下面就好了,他們會(huì)編譯這些代碼。但是我沒(méi)有成功,我是在vs里面直接build成dll后扔到mod里的,效果一樣。
一、首先是天際線的基本概念體系,以及AI在其中所起的作用。
游戲里有很多的建筑物、人、車等事物。這些東西都有自己的屬性,比如位置在哪?顏色?是生老病死,還是3級(jí)5級(jí)?移動(dòng)速度?等等,描述的是物體的客觀狀態(tài)。還有一類,就是這些事物的行為方式:
例如小人是去買東西,還是去上班?出門是坐公交還是自己開(kāi)車?公交車下一站往哪開(kāi)?建筑物是升級(jí)還是廢棄?這些基本都是由各個(gè)物件自己決定的,那么這個(gè)決策部分,就稱之為AI,用面向?qū)ο髞?lái)說(shuō),就是行為/方法(method)
比如市民,市民是一個(gè)類,名字、男女、年齡、教育程度、健康狀況、是否在開(kāi)車等等,是屬性。但是市民有幾十萬(wàn),每一個(gè)市民都有自己不同的屬性,有幾十萬(wàn)的對(duì)象,在內(nèi)存里都要占用相應(yīng)的位置,但是他們的AI是一致的,AI只有一個(gè)。修改了這個(gè)AI,所有市民的行為方式都會(huì)相應(yīng)變化。
然后是天際線中跟AI相關(guān)的有如下常見(jiàn)類名后綴:
AI、Manager、Info(當(dāng)然還有很多與UI相關(guān)的,我就不再列舉了,跟本文關(guān)系不大)
AI毫無(wú)疑問(wèn)就是AI類的了,CitizenAI就是市民AI(這里我簡(jiǎn)單化了,后面我會(huì)詳細(xì)講到,這個(gè)CitizenAI其實(shí)不是“居民AI”)
Manager是所有相關(guān)對(duì)象引用的管理類,比如CitizenManager就是管理所有市民的管理器,無(wú)論是創(chuàng)建一個(gè)市民,還是查詢所有生病的市民,都要通過(guò)這個(gè)管理器
Info是一類對(duì)象的“模板”。這里我用建筑物來(lái)解釋。比如警察總局,就是一個(gè)BuildingInfo類的對(duì)象。里面定義了這個(gè)物件的名稱叫“警察總局”,所有警察總局的屬性,比如造價(jià)、維護(hù)費(fèi)用、占地大小等等,都是在這里的,警察總局的AI,也是在這里有一個(gè)引用(AI是另外一個(gè)類)。不管你在游戲中建幾個(gè)“警察總局”,這個(gè)BuildingInfo對(duì)象都會(huì)只有一個(gè),但是不同位置的警察總局,會(huì)有多個(gè)不同的Building對(duì)象(其實(shí)是struct)來(lái)表達(dá),比如具體的xz位置(y在天際線里是高度軸),或者你給他改名叫“天下第一警察總局”,那么名字也是存在這里的。
接著,是跟AI相關(guān)的橫向概念。
天際線里AI總共分4類:建筑物(Building)、車輛(Vehicle)、市民(Citizen)、路網(wǎng)(Net)。
每類都會(huì)有一個(gè)上述英文名稱的struct來(lái)表達(dá)數(shù)據(jù), 以及配套的前述3個(gè)類(AI、Manager、Info),和眾多的相關(guān)衍生類。
當(dāng)然這也只是一個(gè)最基本的分類,最深的繼承關(guān)系可達(dá)7層,由于此圖是在是太大,所以我在下圖僅以市民AI舉例說(shuō)明:
在天際線中,CitizenAI其實(shí)應(yīng)該翻譯成是“生物AI”好點(diǎn)。它有2個(gè)子類:動(dòng)物AI和人類AI。也就是說(shuō),你在游戲中看到的鳥(niǎo)啊,寵物狗啊什么的,其實(shí)都是算作是Citizen,都用Citizen這個(gè)struct來(lái)存儲(chǔ)數(shù)據(jù)的,占用那104萬(wàn)上限。動(dòng)物AI就不說(shuō)了。人類AI中又分為服務(wù)人員AI(就是消防隊(duì)那個(gè)滅火的小人、靈車抬尸體的小人等)、旅游者AI和居民AI。這里最多的就是居民了,104萬(wàn)的上限,我看有人達(dá)到了101萬(wàn)。
那么,這所有的104萬(wàn)的Citizen,全部都是由CitizenManager來(lái)管理的。CitizenManager中有創(chuàng)建市民的方法,銷毀的方法,查詢的方法等。當(dāng)前市民數(shù)量、Citizen集合的引用等信息,都是這個(gè)類的變量,市民的總數(shù)上限啊、市民出行開(kāi)車的概率啊、生孩子的概率啊、成為gay的概率啊等等常量,也都在這里。這個(gè)CitizenManager是單例的,你不能顯式的去創(chuàng)建這個(gè)對(duì)象,調(diào)用單例的方法后面的代碼里有。
另外還要提一句,市民上限是100萬(wàn)多點(diǎn),但是不代表所有的市民都會(huì)被顯卡“畫出來(lái)”,只有被實(shí)例化(Instance)的市民,才會(huì)交給frame,去具體的在界面上畫出來(lái)。Instance的上限,我記得是65000+,所以大家不用擔(dān)心人多了顯卡“畫”不動(dòng)
玩家點(diǎn)評(píng) (0人參與,0條評(píng)論)
熱門評(píng)論
全部評(píng)論