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