前往
大廳
主題

改寫以前買的彈幕教學書

inkhorse | 2022-06-02 00:38:46 | 巴幣 108 | 人氣 400

搞了一天好像有點樣子了。雖然破爛的地方還很多。但對一個程式菜b來說不錯了(x

非常久以前買了一本設計彈幕遊戲的教學書。無奈一直寫不起來。現在終於能學個1分像了。
把書上的code練習改成c#真的是很好的練習,對於unity入門有幫助,體會到了unity座標系統的不同之處
子彈面對的方向不對啊xddddddddd 總之再改改。

2022/6/2
書上寫的可能是c語言,對於初學者來說又要學unity推遊戲進度又要c改寫unity實在太難了。還是乖乖買了udemy的網路課程觀看。Create a Vertical Shoot 'Em Up (SHMUP) with Unity 。跟著老師學著寫一個完整的unity stg實在。我再把裡面的彈幕程式跟角色模組換成自己的創作。

今日網課心得:
第一課:場景攝影機環境設定
1.安裝android build (安桌組建)模組。因為這課程教的是手機版
2.在editer 右上角tab "game" 切換解析度 為 1920*1080 portrait。符合手機打直操作
3.旋轉場景視角將y軸朝向"你" 因為我們做的是傳統視角的由下至上的捲軸式stg。
此時z軸向銀幕上方 x軸向右手 y軸向"你"。
這幾天看了很多影片。了解這是跟Vector3.forward 這個常數用法很有關系。是大多數人寫unity的一個習慣。這個常數是代表Vector3.forward=Vector3(0,0,1)。朝z軸前進一個單位。寫Prefabs實例化子彈的時候也很常用到Vector3.forward。先按照大家的寫法跟著寫。
4.點選 main Camera ,再選 工作列的 gameobject >>Align with  view。此時攝影機會被對齊到場景。
5.加入主角和敵方坦克的模組,此時從攝影機看到就是老人家熟悉的街機stg視角了。(老淚縱橫
6.如果模型的z軸沒有和場景同一軸向。新增一個empty Gameobject .把模型放到empty Gameobject裡去再做旋轉。新建的empty Gameobject軸向會和場景一致。我搞不懂為啥沒有重設z軸功能。總之影片裡的老師也是這樣解決模型方向不對的問題(x 把不對的包在對的裡面。
7.調整一下攝影機的視距。讓主角跟坦克看起來適當大小。
8.復製主攝影機。放在主攝影機之下。分別改名為air camera 與ground camera. 並新增layer :air object ,
ground objcet. 然後作一下分配。搞不懂為啥要這樣。照著作。
9.新增tag 3個:enemy , enemybullet, bullet,
10,完成第一課的安卓開發設定。
11.把我寫的破爛stg的場景整理成跟老師一樣的z軸向前版本。開始跟著老師做中學啦!!

第二課:玩家移動
本課先跳過。直接copy 老師的碼到教學版本  (x 因為我寫的是電腦版的。用觸控的手機版暫無興趣研究。我把我寫版本的移動方式改成z軸 x軸移動之後草草了事(x

第三課:temporary pooling 設定
暫存池設定。應該是物件池一類的東西吧
因為是設定 老師只寫了一個變數確保這是唯一池中拿出來的Gameobject , 一個池中取出方式一個放回池中的方式。都是簡單寫寫。

6/3
第四課 ScriptableObject 設定
這個是一個放資料用的容器Object,先學著用。因為我只有買c#的入門書沒買unity的。很多東西我沒有大概翻過沒印象。做中邊查詢手冊。老師在這建立了一個player 發射子彈相關參數的ScriptAbleObjcet.
在editer裡直接打了變數。原來變數是可以在editer裡打的。我還以為一定要寫在C#腳本裡(x

6/4
第五課 利用png 圖檔跟Sprite  editer 製作玩家的子彈。
這個蠻簡單的。子彈也是直線前進。一樣是利用vetcor.forward=vetcor(0,0,1) 的C#腳本寫法讓子彈前進。
但有一個sprite 發光的著色器不知道怎麼寫的。跳過之後來研究。

6/5
第六課 利用協程來製作玩家自動連發
看的霧剎剎…研究中。協程的地方完全看不懂。反正會動就好了。跳過(XD

6/6
第六課自習作業。
試著把老師教的方式寫成按鈕發射的。

6/7
可查詢二年內asset 特價的網站。對 我就是窮鬼超人qq

第七課 命中判定 及敵人hp計算 命中時火花的特效。

6/8
第八課 敵人死亡後的產生的爆炸 及利用canvas功能做一個血條。有點看不懂。不過照著操作會動了。進一下課。
6/9
第九課 用貝資曲線的公式製作敵人的移動路線編輯器,這課老師分成5次上。太難了我目前看不懂.... 我決定先全部跳過回頭再看 (x 直接copy老師的碼。

6/12
第十課 敵人編隊 好像是利用父子物件的關系做的。

6/23 中間 有些事在忙。進度落後了 (x
第十一課 地面旋轉炮台。這個開始兼用腳本了。 幫炮台用協程寫一個自動旋轉角度的程式。然後設置八個發炮口。發炮口的地方套用前面寫自動射擊模式。

6/25
第十二課 地面自動瞄準玩家的的飛彈發射器
設置了一個飛彈發射器,讓他的旋轉方向會自動轉向玩家方向。然後一樣設置二個發射口。設定飛彈的粒子系統。以及最重要的飛彈追蹤腳本。到本課老師把stg最重要的二種子彈都教過了。直線前進的子彈跟會追蹤玩家的飛彈。

6/27
第十三課 自動移動的腳本。
撰寫了自動移動的時間跟量。翻到後面偷看了這個腳本是用於攝影機及玩家自動向z軸方向前進。讓制作強制捲軸之用。但沒有寫到限制移動範圍。我想後面會教學吧。不然就是要自己變出來了。

6/28
第十四課 建告一個關卡魔王機
看起來沒有什麼程式碼。

7/4
還是魔王機 第二節。 沒什麼興趣因為沒寫到碼。都是在套用前面寫的碼。跳過好了。最後我做的魔王應該也是不一樣的

7/5 
第十五課 地面人質救援 。教學中把之前做的canvas血條要換成一個圓圈的圖放不下去。原來要在像素素材的inspector 裡把他改成sprite(2D ans UI) 才能 。在這次教學中第一次用到了音效。

7/8
第十六課 完成temporary pooling 物件池系統
老師回過頭來改寫物件池了。因為前面的池根本沒有做回收功能。只有草稿。利用了dictionray來做。太難了 -_- 我完全看不懂。總之邊抄邊寫註解。

中途理解:原來c#在untiy的功能主要是把變數留在檢查器做設定,沒設定初始值。邏輯部份留在腳本中判定。也就是為什麼寫到現在跟一般.net 的c#差很多的原因。教學c#的書都會在變數宣告完之後賦值。

7/12
背景設計 暫時不寫碼了 老師開始拿素材 蓋背景。
開始拿我買的素材也蓋一個背景。類cave stg第一關就是要都市啦~~~~ 大概要蓋個好幾天吧 加油吧 -_-

7/14
確定這個不是在玩模擬城市嗎 -_- 總之趕快蓋一蓋 stg的背景弄成這樣要幹麼 orz

盡力了 先這樣就好,買來的素材色調很不統一。先下一課寫程式吧。反正最後也不一定用這個 xd
老師裝了強制捲軸系統 試試看!!


07/19 課程再開
配置了一些敵人 但判定通通有問題了。可能是明明做2dstg 但我拿y軸深度很深的背景去配置,子彈通通打不到啦xd 需要調整 。算了,先上課最後再來調。本課老師教學如何在進入鏡頭時 啟動敵人 離開鏡頭時。關閉敵人。利用box判定跟unity事件來做這件事。

07/21 擊破敵人產生金幣及磁吸撿金幣的系統
讓敵人破壞後產生得分的金幣 並把他吸起來。
程式學寫了40%差不多了也該回頭畫畫主角機。畢竟是預定要做成小黃遊 (x
還要全3d模組呢… 真的辨的到嗎 orz

07/27 暫時轉進製作角色模組跟動畫。
09/06 做了一個月的角色模組。雖然不怎麼好但也到進度了。回頭繼續學程式吧。角色模組慢慢修。
1.攝影機隨玩家移動的 。這功能我用不到。跳過。
2.老師修改貝資曲線 跳過 前面全抄了。
課程 32.
Enemy Waves Integration 修改代碼 照著修改了 DeathSystem跟enemywave但這二個暫時我沒用到 照著改。

2022/09/07
課程33. Laser Power Up :
雷射武器的教學。總覺得跟想像中的不一樣。到時候參考程式書重寫吧。
最主要老師把按鈕給綁在這腳本上了。最後也是要想辨法拆開的。

2022/09/08 從今天開始加速學。碼不邊看影片邊key了。copy老師的碼然後看懂寫中文註解。

課程 34. Mega Bomb :
製作無敵炸彈  :老師教學了用腳本控制Particle System ,和使用Physics.OverlapSphere()來抓取範圍內的碰撞器。這二個都很實用可以再延伸學習。但一樣按鈕綁在腳本上。需要切割開。

課程 35. Shield Power Up:利用協程跟Particle System製作一個可以消去敵人子彈的無敵護盾和展開關閉動畫。課程後面修改了hp系統的其他代碼。

2022/09/09

課程36. Player Missile:改寫了前面敵人導彈的系統。變成玩家兼用。用bool判定是不是玩家發射的。有些小毛病再來自己改寫吧,例如說敵人被打死導彈會原地轉圈 -_-。遊戲玩法的撰寫告一段落。下面的課程開始寫關卡選擇 存檔 切換場景之類的系統。學完就有一個完整的遊戲原型了。加油!!!!!!

課程37. Level Manager:這是一個分數系統。可以計算玩家擊殺數跟得到的分數。

2022/09/10
課程38. Stats & Upgrades pt. 1:開始寫遊戲管理系統啦 此章節做了各種欄位定義。利用LIST裝入可程式化物件ScriptableObject 。來做列表。產生一個空的gameobject改名為GameManager,掛上這個腳本並設定成DontDestroyOnLoad(gameObject);

課程38. Stats & Upgrades pt. 2:老師開始在檢查器中掛上各種寫好的ScriptableObject跟設定數值。但ScriptableObject好像沒有設定不同等級的武器有不同外觀。這應該是要學生改寫的目標了xd

2022/09/12
課程38. Stats & Upgrades pt. 3:老師寫了一個掛在按鈕上的武器升級用腳本跟GameManager的數值做互動。順便教學設計了簡單的UI。UI我可以的xd 那是美工專門。按鈕上做了一個滑鼠事件的監聽器。改成xbox手把用的應該就是我的作業了。今天卡關的地方很多。例如老師教的是TEXT組件。我換成了TEXT MESH PRO就卡關了 -_-

2022/09/13
課程41. Upgrade Item Continued:利用slider組件跟image mask的效果做成了升級進度條。很簡單卻實用的一課。
課程42. Dialog System:利用組件造出了簡單的確認訊息視窗。本課新使用了一個unityaction 寫法。看不懂…暫時跳過吧。

2022/09/14
課程43. Save System:利用資料流跟二位元序列子打造了一個簡單的存檔系統。但微軟c#線上手冊說二位元序列化有資安危險 -_-看來改寫成json序列化來存檔又是學生的作業啦!!
課程44.Scene Loader Progress:寫了一個載入場景的畫面。終於到了要切換關卡的時候啦!!!!利用SceneManager.LoadSceneAsync()執行 。好像中比想像中簡單 -__-  unity真的解決了不少開發的問題呢。

2022/09/15
課程45. Level Menu pt.1:製作了一個關卡的切換按鈕跟腳本。記得在build in設定裡要加入想要載入的場景才能順利切換。
課程46. Level Menu pt.2:在關卡中設定了當擊敗最後一個敵人也就是魔王。會顯示分數跟返回主選單的事件。到這裡遊戲已經有個雛型了 !!! 感動
課程47. UI Transitions:建立一個UI管理系統來開啟關閉武器跟關卡的分頁。且有淡出入效果。
課程48. Finishing Up UI:這裡最後加上了一個計算金幣的功能。這樣遊戲就大概成型了!!!!! 也學習到了如何製作ui。

剩下幾節最後微調的課全部跳過 xd 跟我想像中的差太多了都需要自己重寫了 謝謝Romi Fauzi老師了。
接下來我要靠自己惹。這二個多月學到了很多。對程式菜鳥幫助太大啦!!接下來就是把那本射擊遊戲書裡的彈幕設計自已寫起來了。

2022/05/22
廢了四個月左右 xdddd 4月開始學習特效系統的用法。一套入遊戲就掛了。好像是物件池系統跟疊了好幾層的特效,產生了索引異常。常常說某個key找不到他爸…再研究一下。

2022/05/24
找到BUG所在了。因為我換了擊中火花特效。但畫面外方有一個舊的固定式敵人。他身上的特效是設定舊版的。物件池裡沒有舊火花的池。一擊中就跳error 因為unity在物件池裡找不到舊火花啊。把舊的敵人刪除之後BUG就解決了。管理擊中特效的也許需要寫個manager統一管理了。

送禮物贊助創作者 !
0
留言

創作回應

更多創作