悲喜交加的更新日子到了,因為比賽和項目的原因(lan)所以沒有更新,昨天盒友託夢給我讓我更新了,嚇得本就睡不好的我更是在心靈上多了一層霜,噢,我深深地感到愧疚(kuaile)
項目其實有在持續開發中,學習也在有條不紊地混日子,但是,這兩天我嘗試參加了人生當中的第一次gamejam,48小時那種,對於實效性來看,我決定先分享一下此次gamejam我負責的位置(bug製造者)
本次gamejam的主題是mesh,當初為了討論出要做什麼遊戲更是跟隊友長篇大論一小時,最後敲定了一個 塔防沙盒物流倖存者集成縫合怪遊戲
是的,於是我們懷著試試的態度逝世了。
先說結果:在五個人爆肝(各種意義上的)下,人均兩天睡眠平均7小時不到,奈何要素太多,體量太大,給了我們一次沉痛的教訓。我們得到了一個半成品,一個“很有潛力”的作品。
開發中的插圖
按照慣例,接下來是知識的輸出時間了
本次比賽我們組有三名程序,分別負責 怪物敵對機制部分,主角行為機制部分,各類塔防資源機制部分。
我負責的是主角行為機制部分(有相關經驗得心應手一點)
這些東西已經開始變得熟悉了(畢竟經典開局)
覺得眼熟?🤔
這樣寫player的場景,此時此刻正在地球的各處上演!😨
下一個寫player可能就是你👈
除非你能做出生命中最重要的決定👍
向所有策劃證明,你擁有寫別的項目的力量與勇氣✊
加入player代碼的行列吧! 💪
成為定義player的精英!🤖
見識奇異的enemy和monster👽
把一個個框架UI毫不費力地貼上去🚩
成為編程人!🤖
話說我感覺我也莫名其妙養成了一些編程的好習慣了(比如詳細的註釋和接口)
實現player移動
這裡使用的是利用剛體組件,配合監聽鍵盤信息來實現我們player的移動(ps:0基礎系列的第一個項目Luna的移動方式與這個是一模一樣的,甚至代碼都是抄過來的),當然,在移動的時候記得需要給我們的player更改動畫組件的播放,讓主角可以轉個頭側個身。
射擊功能實現
一個能夠戰鬥的塔防遊戲,當然自己也需要一點戰鬥力,所以我加了一個射擊功能,具體表現就是鼠標左鍵開火,子彈自動向前射出即可。需要注意的是鼠標的座標需要先轉換成世界座標,不然遊戲裡面你的鼠標位置始終是對不上的,並給子彈一個旋轉的角度,讓子彈能夠看起來正常地發射
記得給主角加上組件和腳本,以上,就是主角本身簡單的功能。
接下來是主角行為的延伸功能或者機制
建造機制
我們初定的塔防模式就是主角收集材料,建造防禦工事抵抗怪物進軍。
於是,主角需要一個建造功能(寫之前我並不覺得這玩意很難)
建造主體
我們建立一個createmode腳本,用於實現建造功能,在腳本開頭,我們直接定義了三個公開的對象接口,並給了一個建造模式的開關。
起初我在思考,我需要一個按鍵進入建造模式,然後可以選擇將要建造的防禦工程放下來,這是一個很公式化的東西
這讓我想起一個段子:
把一隻大象塞進冰箱需要幾步
三步
1.打開冰箱 2.把大象塞進去 3.關上冰箱
是的,我一開始就是在這種思維下,覺得這東西很簡單,不就是把東西放下來嘛,於是我進行了實踐,一個生成函數就可以完美實現我想要的效果。但是,我發現了不對勁,這確實是可以實現“把東西放下來”這個動作的,但是在遊戲中,他不應該這麼“自由”,建造的東西不應該“指哪放哪”,比如:建在石頭縫裡,這是可以實現的,當這又是不合理的,比如你可以在有建築的地方再建一個,這同樣是可以實現,卻不合理的。
是的,他存在是合理的,但又不合理,這我們姑且也算是bug。
於是,我放棄了“在鼠標處按下E創建”這個方法。
改為了“在固定位置按下E創建”,這個固定位置其實就是我們提前把碰撞器鋪好,然後用鼠標判定是否在碰撞器內來進行下一步工作。
於是我給全圖都鋪上了碰撞器,充分體現出來了mesh 網格的主題
在之後,我覺得這種方法有更好的改進手段。
那就是 植物大戰殭屍中種植植物的方法。這兩中方式都差不多,甚至都是放置類塔防的核心,本著之前做過植物大戰殭屍項目的經驗,我直接開始明目張膽地抄我之前的代碼了
把按鍵事件改成了“進入建造模式”避免出現了兩種情況衝突,妨礙了player自己的射擊節奏。
具體植物大戰殭屍中如何實現 種植 這一方法的,可以去看看我之前寫過的植物大戰殭屍那篇文章
震驚,植物是這麼來的?!
OK,按理來說大概是一個流程,那麼我們的移除炮臺建築,是怎麼實現的呢?
又是一個很心酸的故事
我剛開始時認為的拆除是“識別鼠標處的建築物按Q進行刪除”畢竟是需要判定的,不然到時候變成上帝之手點啥刪啥把地圖都刪了就不好了。
這種方法需要涉及一個新知識:鼠標射線熱點
這個方法就是利用射線(一條從鼠標射向遊戲裡面的射線)判定當前鼠標座標上射線射到的物體是否滿足條件(是否是建築物)再進行下一步判定。
我也想整個機制全靠鼠標射線
是不是很大膽
整個機制全靠鼠標射線
在gamejam這一次
就這個遊戲
就完全是這個遊戲,全靠鼠標射線
我最早加入進來開發的時候
跟所有隊友說的都是鼠標射線
難以想象
喔所有隊友策劃啊,美術啊
他們所有人都很興奮
程序隊友他們很興奮
鼠標射線 一直說的是鼠標射線
我們一直在做鼠標射線的準備
所以當時跟隊友說的時候
我只要你們等我20分鐘
或者只要你們 25 分鐘
他們說為什麼
我說很簡單
我待會寫兩個
鼠標射線兩個小時
我一個項目用兩次
創建物體寫一次
破壞物體寫一次
我一個項目用兩次
我用全部項目
兩次我選一次
鼠標射線啊
這個項目就完了
我選一次
那兩次就夠了
然後前面的代碼搗鼓搗鼓
嚴格的照抄
我說只要你們20分鐘我就寫一個機制
所有隊友都 真的太厲害了
就挑戰性太大了
一點都不能錯呀
但是後來我還是放棄了
你知道為什麼
我研究了大量的鼠標射線的文獻
包括CSDN,GITHUB
我還求著高人指點
CHAT-GPT
4o版本的
結果我發現這東西還是太難了
還是太難了
到底哪裡有問題呢
我也不知道,但就是有bug
有bug啊,我修不了
種種不下去,刪刪不了
所以到後面我還是放棄了
......
是的,我確實放棄了,最後我還是選擇了植物大戰殭屍的形式:用鏟子挖掉
合理利用資源
光是這倆機制,就已經消耗了我一整個下午的時間了非常好的機制,令我的炮臺旋轉
下一步 UI
熟悉的UI,但是不同的遊戲
在合理的位置佈置好合理的UI,看起來舒服就行,順便創建一下動畫。
下一步 地圖
利用多邊形碰撞器給地圖框好邊界,防止我們人出去
總之開發的過程確實很艱苦,特別是在有48小時時限的高壓下,壓力與焦慮的雙重增加,在凌晨五點鐘我們仍舊在討論bug與畫畫資源。
順帶一提,一個會畫畫的美工真的是大爹啊
一個穩定的大爹啊,
太令人羨慕了吧這個畫畫的能力(讓我想起了我拉的💩)
揀愛 遊戲製作人發表總結
一份不完美的比賽經歷與一次完美的比賽過程,給我帶來了一次無與倫比的體驗,這一份從來沒有過的艱辛旅程同時讓我受益匪淺。
“這本就是一個註定不會完美的旅程,我們要在裡面盡力得到的東西並不是這48小時創造出來的遊戲,而是這個過程。如果我們將時間倒退回48小時之前,你們還會選擇同樣的方案嗎?你們48小時前的想法與現在的想法相同嗎?這48個小時中,遊戲像魔法一樣一個個憑空出現,我覺得我們應該學會的是在這個魔法的過程中不斷認知到的東西,這些東西不僅僅是現在,更會在將來職場令你們大放異彩。”