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