云和數(shù)據(jù)Unity虛擬現(xiàn)實(shí)大師班學(xué)員將大項(xiàng)目階段的心路歷程用文字記錄,獲得GAD騰訊游戲開(kāi)發(fā)者平臺(tái)官方連載,騰訊游戲?qū)W院的微信公眾號(hào)將所有記錄整理到一起進(jìn)行形成了《開(kāi)發(fā)日記》進(jìn)行官方推送。夢(mèng)想從云和起航!詳情見(jiàn):https://mp.weixin.qq.com/s/oAoIHiBBIzEGFhS4_Ri9rw。以下是部分文章內(nèi)容: ?
開(kāi)發(fā)日記:Unity完全自制游戲《紙箱戰(zhàn)爭(zhēng)》項(xiàng)目記錄
最近半年時(shí)間通過(guò)培訓(xùn)機(jī)構(gòu)接觸到了Unity游戲制作引擎,通過(guò)半年的時(shí)間,臨近畢業(yè)的時(shí)候需要制作一個(gè)大項(xiàng)目來(lái)驗(yàn)證學(xué)習(xí)結(jié)果,因此就確立了這個(gè)項(xiàng)目的誕生。
日期:20180629
制作時(shí)間為期三周,為了給自己增加難度更好的磨練自己,我自告奮勇要求一人制作項(xiàng)目,并且是完全原創(chuàng)的項(xiàng)目。
游戲玩法類(lèi)似與戰(zhàn)地系列的FPS對(duì)抗游戲,玩家可以利用在地圖中的載具對(duì)目標(biāo)點(diǎn)發(fā)起進(jìn)攻,最后奪得目標(biāo)爭(zhēng)奪點(diǎn)取得游戲的勝利。
完全原創(chuàng)肯定就不能使用網(wǎng)絡(luò)上的美術(shù)資源和他人分享的代碼亦或是插件,鑒于美術(shù)基礎(chǔ)太差,因此選擇了簡(jiǎn)約的美術(shù)風(fēng)格,有點(diǎn)類(lèi)似《我的世界》那種方盒子感覺(jué),最近在Steam上出現(xiàn)了很多類(lèi)似風(fēng)格的游戲,似乎都還賣(mài)得不錯(cuò)。
為了此次項(xiàng)目的成功進(jìn)行,我還特意學(xué)習(xí)了一下在3Dmax中的骨骼蒙皮和動(dòng)畫(huà)制作,有了點(diǎn)大致的雛形。
因?yàn)閺南轮芤婚_(kāi)始才是正式的三周制作時(shí)間,之前我就制作了一部分,以下是已完成的部分。
因?yàn)橛螒蚴褂昧撕?jiǎn)約的美術(shù)風(fēng)格,資源占用量大大減少,所以便可以實(shí)現(xiàn)次時(shí)代大作中難以實(shí)現(xiàn)的部分,比如完全的場(chǎng)景可破壞性。
在上圖中可以看到,樹(shù)木可以分部位擊落,落在地面后一段時(shí)間沉入地面隨后銷(xiāo)毀物體。
人物的自定義外觀,這里算是投機(jī)取巧,本來(lái)是想要實(shí)現(xiàn)類(lèi)似“人類(lèi)一敗涂地”中那種可以涂色的系統(tǒng),苦于不知道怎么實(shí)現(xiàn),于是就在鼠標(biāo)劃過(guò)的位置實(shí)例化出一連串的彩色物體代替畫(huà)筆,最后發(fā)現(xiàn)每實(shí)例化出一個(gè)物體就會(huì)增加Batches的占用,估計(jì)在項(xiàng)目進(jìn)展后期可能會(huì)刪掉這個(gè)功能,或者演一下。
.
.
.
.
.
.
日期:20180706
今天完成了一些場(chǎng)景模型的布置搭建工作,還在發(fā)愁項(xiàng)目?jī)?yōu)化的問(wèn)題。
AI的總體控制完成了,但個(gè)體AI離真正的實(shí)現(xiàn)還有很長(zhǎng)的一段路要走,今天特意抽出了一些時(shí)間來(lái)思考個(gè)體AI的設(shè)定。
首先可以肯定的是,個(gè)體AI肯定是要比控制AI更加復(fù)雜多變。
其次,今天突然之間想到,如果是用AI來(lái)模擬真實(shí)的玩家,那么真正的玩家在游戲中的行為肯定會(huì)是無(wú)法預(yù)測(cè)的,并不會(huì)按照某一固定的模式執(zhí)行規(guī)則。
因此之前設(shè)想過(guò)的通過(guò)需先編輯好的AI動(dòng)作方法就只能放棄了,重新整理思路。
一定要確定的是一點(diǎn),游戲中是分有不同的職業(yè)的,現(xiàn)階段是分為突擊兵、工程兵、反載具兵、醫(yī)療兵、狙擊手。
在敵人是醫(yī)療兵或者是狙擊手的情況下并不能對(duì)敵人的載具造成傷害,那么載具肯定就不會(huì)是他們的目標(biāo)。
而工程兵或者是反載具兵的優(yōu)先攻擊目標(biāo)肯定是威脅更大的地方載具單位。
醫(yī)療兵則會(huì)優(yōu)先治療友軍,其次才是擊殺敵人,狙擊手則是要遠(yuǎn)程擊殺目標(biāo)。
考慮到這點(diǎn),我就思索是不是應(yīng)該把個(gè)體AI的尋獲目標(biāo)方式給封裝成獨(dú)立方法,因?yàn)椴⒉恍枰獣r(shí)刻切換目標(biāo),和控制AI腳本一樣,每隔一段時(shí)間調(diào)用一次就可以了。
在確定敵方目標(biāo)的時(shí)候,我使用到之前寫(xiě)過(guò)的Camp腳本上的陣營(yíng),這樣一來(lái)就需要多次的獲取組件,擔(dān)心多次的獲取組件會(huì)影響到游戲的性能,對(duì)本就高負(fù)荷的游戲再增加更多的負(fù)擔(dān)。
查閱資料后,發(fā)現(xiàn)獲取泛型組件是相對(duì)節(jié)省資源的方法,但盡是這樣還不夠,考慮到了在遍歷循環(huán)中每次遍歷判斷的時(shí)候都要獲取幾次組件,干脆把獲取組件集體構(gòu)造一次,這樣應(yīng)該能節(jié)省一些資源。
在獲取了目標(biāo)之后,就應(yīng)該是對(duì)目標(biāo)發(fā)起攻擊了,這點(diǎn)考慮到了還有進(jìn)攻目標(biāo)點(diǎn)的原因,我認(rèn)為應(yīng)該添加一個(gè)追擊時(shí)間,在追擊了一段時(shí)間后,AI則會(huì)放棄追擊,進(jìn)攻目標(biāo)點(diǎn)。
到目前位置,沒(méi)有框架的致命缺陷就暴露了出來(lái)。
自我反思,在項(xiàng)目確立的時(shí)候就沒(méi)有構(gòu)思好全部的步驟,有些功能的實(shí)現(xiàn)只是因?yàn)橐粫r(shí)的興起而制作了,這樣反而是打亂了整體的設(shè)計(jì)路線(xiàn),如果有一個(gè)成熟的框架,代碼編寫(xiě)則會(huì)簡(jiǎn)單很多。
早在項(xiàng)目建立階段就沒(méi)有考慮到這個(gè)問(wèn)題,對(duì)自己的能力認(rèn)識(shí)的還不夠清晰,同學(xué)制作的手游幾近完成,而我還卡在敵人的AI設(shè)定方面。
不過(guò)這也并沒(méi)有打擊到我的自信心,畢竟是PC游戲,復(fù)雜性遠(yuǎn)非那些手游所能比擬的,這對(duì)我是一次鍛煉,也是對(duì)前段時(shí)間學(xué)習(xí)的一個(gè)總結(jié)。
.
.
.
.
.
.
日期:20180710
今天整理了個(gè)體AI的腳本,也算封裝完成了。
封裝以后,原先預(yù)計(jì)在2000到3000行的代碼被精簡(jiǎn)到了700行以?xún)?nèi)。
經(jīng)過(guò)測(cè)試,流暢是很流暢,但出了一個(gè)很?chē)?yán)重的BUG。
不清楚是具體什么原因,AI總是會(huì)攻擊隊(duì)友,而且次數(shù)不在少數(shù),莫不清楚頭緒,檢查了幾遍自己封裝的方法,初步估計(jì)原因是在目標(biāo)尋獲方法中出現(xiàn)的問(wèn)題。
找來(lái)找去終于發(fā)現(xiàn)是因?yàn)橐粋€(gè)簡(jiǎn)單的邏輯運(yùn)算符給打錯(cuò)了,沒(méi)想到居然會(huì)造成了這么嚴(yán)重的BUG,看來(lái)碼代碼的時(shí)候還需要更加仔細(xì)一些。
此外今天還解決了報(bào)錯(cuò)閃退的原因,閃退前控制臺(tái)會(huì)瞬間報(bào)錯(cuò)后閃退,今天手快截圖到了,在網(wǎng)上查了下解決方法。
我使用的Unity為5.45,在國(guó)內(nèi)的網(wǎng)站上居然找不到解決方法,最后還是在外網(wǎng)上找到了類(lèi)似的解決方案。
大概意思是說(shuō)出現(xiàn)這個(gè)錯(cuò)誤的原因是因?yàn)槭褂玫搅苏趽跆蕹脑颍鄼C(jī)上勾選了遮擋剔除,而場(chǎng)景中并沒(méi)有對(duì)遮擋剔除的物體進(jìn)行烘焙,才導(dǎo)致了這樣的錯(cuò)誤。
我試驗(yàn)了一下把已經(jīng)紅烘焙過(guò)但是沒(méi)有使用到的遮擋剔除清除之后就再也沒(méi)有出現(xiàn)閃退的情況。
之前還一直認(rèn)為是因?yàn)橛玫搅穗S機(jī)數(shù)Random的原因,因?yàn)閁nity和C#中各有一個(gè)Random類(lèi),如果沒(méi)有具體聲明可能就出現(xiàn)錯(cuò)誤,我還特意加上了Unity的命名空間來(lái)解決,沒(méi)想到居然是因?yàn)檎趽跆蕹脑虿砰W退的。
既然這樣了,或許在之后的任務(wù)中就不能使用到遮擋剔除來(lái)優(yōu)化游戲了,這么說(shuō)還需要再別的地方想辦法節(jié)約一定的資源占用量,又是不小的工程累積。
明天預(yù)計(jì)會(huì)完成AI駕駛坦克和飛機(jī)的工作,如果時(shí)間充裕的話(huà)還會(huì)設(shè)置到玩家控制角色的各種設(shè)置。
未完待續(xù)。
Copyright ? 2013-2021 河南云和數(shù)據(jù)信息技術(shù)有限公司 豫ICP備14003305號(hào) ISP經(jīng)營(yíng)許可證:豫B-20160281