最新情報

自製引擎的開發流程

最近有人在尋問我說有關於如何著手於自製引擎的開發,也常會遇到有人在問說對於自製引擎的看法(多半因為UNITY的關係...),才想起來好像從來都沒在這邊提起過相關的事情。因此趁這幾天比較有空的時候來寫一下自己的經驗談。

對於自製引擎的想法我個人認為如果有挑戰精神的遊戲程式設計師最好要先試著開發一次遊戲引擎,等到有一次引擎開發的經驗的時候再試著去使用UNITY等現有的引擎。並不是說要自己發明輪子,而是不做過一次根本不會了解自己需要些什麼,到最後只會被別人現有的框架綁死。這也算是個人的看過許多在業界的程式設計師以後的經驗,UNITY是個方便的工具,並不代表說使用了工具以後遊戲就會好玩。但是越到最近越常遇到有人把UNITY當神兵拜,UNITY有的所有東西都只敢原封不動的照著用,UNITY沒有的東西也不會自己想辦法加功能上去。再強的神兵也要有使用者,不是拿來拜敵人就會自動消滅的,要裝起來拿來揮才能打出傷害數值。因此會建議有心也有時間的人(畢竟業界環境沒多少老闆會給人有時間去磨)先了解說怪要怎麼打再去拿神兵。一般沒開發經驗的程式師我會建議從0開始磨看看,而有經驗的開發者我個人是也會推薦可以嘗試使用UNITY。(雖然自己本身並不會想去用,對我來說太綁手綁腳了。)

上圖是當初雪兒引擎的初版完成以後做得測試的小遊戲,也是Angle Filght的雛型,
費時大約三個月的時間。

那在提到如何發開引擎的時候,就要提到說什麼東西對遊戲來說是重要的,如果能設計好自己的遊戲需要些什麼以後,之後再往上追加功能就好。

以個人的經驗最好先拆成幾部份去依序完成。
1.畫面的輸出,這是首要的,絕對重要的!因為沒有畫面的輸出的話根本不會知道自己做得東西變成什麼。也很難構成一款遊戲。
因此,一般來說會選擇DirectX或OpenGL,這部份就看個人的喜好。使用flash或UNITY等其實也是一個繪圖輸出的工具而已。
而2D與3D只是遊戲的表現方式的差別而已,原則上會建議沒什麼經驗的人先嘗試做2D的引擎,少一個軸難度差非常多,而真正要完成比較萬用的引擎的時候再做3D引擎,因為3D可以模擬2D,引擎的在使用上的彈性會高非常多。
並且確保說畫面上能輸出文字,至少要能有方便讓自己看到Debug用的訊息的方法。

2.物件管理系統以一個遊戲引擎來說,角色或背景等物件的生成與消滅,是除了RPG以外最頻繁做的事
架構好的物件管理就會讓整個遊戲的運行順暢而且當機率低,相對的來說如果沒有這個系統的話物件的生成以及特別是物件的消滅的時候,會發生像是死不掉的敵人或者是到了定點王沒出現等等的意外狀況會多到讓人想哭。
而物件的存讀也是很是個很重要的部份,能讓玩家越少看到Now Loading的字樣是越好的。這方面就是個大學問。

3.互動輸入,其實對遊戲來說也是十分重要的,但是因為沒有畫面的輸出的話連自己寫成什麼樣都很難看到結果,雖然有些人會使用命令提式字元的方式來看看自己的結果對不對,但是既然要直接做遊戲的話不如就一次完成省功夫。
這部份會與物件管理系統做連動,按一顆件就能產生一個物件,或者是能讓物件有動作等等,玩家與遊戲之間可以做互動,一個遊戲的基本架構就完成了。
最好是先從鍵盤輸入下手,再來是滑鼠,再來是搖桿等。

4.音樂與音效的輸出,事實上不見得每一款遊戲都會有需要,以同人遊戲來說沒音樂沒音效的遊戲也不是沒有。但是如果希望遊戲可以比較生動的話,這部份就不可缺乏
如果要以最基本的方式去寫的話建議是先從WAV著手。音質最好也最簡單也最基本。其他有壓縮的格式在使用上就比較費工夫。以一個引擎先要確保的功能來說還不需要做到那麼複雜。

5.文字引擎,這部份指的是設計出可以顯式劇情對話等的部份,雖然其實並不見得每款遊戲都會需要,但是越到現在多少還是會有這方面的需求
最好先有基本的劇情文字輸出,再來是立繪輸出跟控碼(對話中顯示數字等),最後是劇本指令格式的設計以及擴充的指令(播放音效或特效等等)。選項的控制等等也最好要設計好,即使到了現在越來越多遊戲是沒有選項的,甚至連AVG遊戲都不見得有。但是選項的系統意外的汎用性很廣。

不過文字引擎畢竟開始牽扯到指令格式的設計,很多時候一開始設計好的東西會發現之後用不太到,最好也要有預留彈性的空間在。事實上當初雪兒引擎開發的時候的文字引擎功能弄得很多,劇情對話的視窗還可以顯示上下兩個劇情對話框讓兩方的角色能夠各有一個對話框做對話,用不到... 有設計BackLog就好了。

6.檔案讀寫,事實上對遊戲來說是超重要的功能,上面有些功能也許有些遊戲還用不太到,檔案的讀寫是關係到玩家能不能玩這款遊戲超過一次睡覺時間
像之前某洛克人的免費遊戲就因為一開始沒有檔案讀寫機制在,即使呼聲很高但是終究不少人望之怯步。
但是因為檔案讀寫也關係到要寫什麼進去,在遊戲整體架構沒架好以前並不推薦先寫。那原則上是建議設計的時候盡量避免寫入不必要的訊息,之前看過有人設計的時候是參照Xml的語法去編寫的,不是很推薦,因為一旦格式有變化以後之前的記錄檔會無法處理。格式上可以有一些簡單的文字註解來方便資料的閱讀,也可以在往後參數有變動的時候讓資料的讀取不會遺失。

7.物理引擎對很多遊戲來說是非必要的,如果要做動作類的遊戲才會需要
而且最好不要跟物件的引擎綁得太死,有太多狀況會希望物件本身沒有物理判定在的,因此雖然本身會建構在物件引擎上面,但是最好是與物件的引擎分開做。人物的移動等等雖然很多人會使用物理引擎的加速度來實作,但是有非常多遊戲會希望走一格就是一格,而不是用真正的物理參數去實作移動,因此也建議物件得移動等等也不要跟物理引擎綁得太死。

8.判定處理同物理引擎,也並不是每種遊戲都會使用到
有許多狀況會需要判定引擎處理完以後也能連動到物理引擎的部份,但是也有更多的狀況會希望判定發生了但是物理引擎不要啟動。特別有更多遊戲不違反物理定律是很難玩的(像動作遊戲跳的跳只計算離地時的向量,在空中如果不能自己調落點等)。因此建議判定本身發生的動量等等也不要與物理引擎綁得太死,最好只是單純的判定發生的點與發生以後的向量有就可以了,產生的動能有多少還是看物理引擎怎麼去表現而不是寫在判定裡面。

7.特效引擎這部份已經是很非必要的功能了,但是沒有的話畫面的動感會有些缺陷
那我自己本身寫的特效引擎是粒子特效引擎,因此變化性跟華麗度會比單純的貼圖產生的特效來得高,但是貼圖動畫產生的特效也不會說不好,設計起來也簡單,純看個人的喜好。


以上幾點來說,能完成到第三點的話其實就能完成一個簡單的遊戲了。因此要完成一款遊戲本身並不複雜,但是沒有後面幾項的話遊戲的變化性跟華麗度就會有差。使用現有的引擎的時候也不會離開這幾方面的使用,選擇自己不擅常的部份交給現有的引擎做處理,引擎本身被綁得太死而影響到遊戲性的部份再自己寫,而不是被現有的引擎架構綁死就置之不理,讓遊戲留下缺陷。

雖然自己稱不上專業,或許不太能幫忙解決所有問題,但是如果有什麼有關引擎開發或者是遊戲開發等的事情都可以在這裡提問,希望我這邊微薄的經驗跟知識可以幫得上忙。

5 則留言:

  1. 我有被問過為什麼不用Unity,我的想法是Unity並非所有情況都適用而應該看狀況選工具,它是3D引擎而且我覺得是為美式槍戰遊戲設計的,拿它做不適合的類型會有很多多餘的工,做2D遊戲用專門的2D引擎比較適合。在公司用的經驗是它有方便的地方但也有很多問題,如效能消耗異常地高。

    一些我開發遊戲引擎的心得:

    1.練習題目
    初學我建議先做AVG或無地形射擊練功,因為這兩種類型程式難度較低,參考資料多,也包含其他類型會用到的技術,有個基本架構後再做預定要做的類型。
    附帶一提實際做過射擊遊戲後我漸漸發現為什麼彈幕遊戲會流行,因為用較少的程式和美術工就能做到刺激感和不錯的畫面,有地形這種東西製作難度會高很多。

    2.輔助工具
    做遊戲除了引擎本體以外輔助工具也不可少,我習慣拿現有軟體改造出我要的功能,必要時才自己開發。試算表軟體如Excel是很實用的工具,只要寫個外掛讓它輸出資料(通常用純文字格式),引擎也做成能讀這些外部資料,就可用來編輯數值和介面文字(在公司學到的技巧)。向量繪圖軟體能調介面元件位置或做sprite sheet,同樣可以用外掛輸出坐標。其他就看在做的遊戲需要什麼,像tilemap也有現成工具可用。

    要不要做3D我認為還要看找不找得到美術人員,即使引擎有3D能力也要有人做模型和動作素材才有用,像我身邊3D美術比2D美術難找很多(其他人情況可能不一樣)。如果下定決心做3D就要建立3D美術的人脈。

    我現在做的是射擊遊戲,數學和運動學非常重要,還好在學校學的知識我還沒忘記。

    回覆刪除
    回覆
    1. 我常會建議別人說UNITY在設計動作性比較高的遊戲以外其實就單純當個可以跨平台用的繪圖輸出引擎比較適合,因為他內建的東西並不會為了設計師想做的遊戲客製完成,太執著於他的框架會被限制住。

      2D的遊戲設計難度我個人認為是
      動作 > 格鬥 > 射擊 > SLG > RPG > AVG
      如果引擎在開發以後最適合去嘗試製作的遊戲個人是認為是動作到射擊這一段,如果引擎可以完成這方面的遊戲的話自然後面比較簡單的類型也很好完成。

      彈幕其實以玩家群來說並不能算紅,但是以程式來說要練習引擎是不錯的題材,物件生成沒做好的話彈幕一定會LAG。
      自己這邊的粒子特效引擎也是在很久以前做過的彈幕遊戲完成的。

      3D的部份我看過有沒有美術背景的人直接用UNITY內建的建模去硬拉,雖然效果很差但是能滿足他對於他的遊戲的需要。不過如果真的想追求完美的遊戲的話還是找專業的人士比較好,但是我所接觸到的做3D美術在台灣來說基本上還是比2D美術貴,不是很容易可以請。

      你們設計的遊戲也加油囉~

      刪除
  2. 真是辛苦你花時間分享這些經驗XD
    最近工作太忙沒空檔繼續跟你交流
    你這些建議對於剛入門的人來說的確很實用
    儘管現在的工作跟遊戲搭不上關係
    但對於我來說也有不少收穫
    PS 雖然我當初是拿尚方寶劍去打惡少的傻孩子(ノ∀` )

    我個人也不大喜歡Unity
    跟賽爾西絲看法差不多
    也是覺得這工具管太多了XD
    或者說限太死了
    就算以泛用化方面來講也不是很好的設計
    或許新手可以嘗試玩看看
    但是想深入的人我還是建議從零做起
    畢竟學會了基礎
    想玩更多花樣永遠不是問題

    以下是題外話
    不得不佩服.NET Framework的開發團隊
    雖然說我知道很多業界對此不是很看重
    但是對於接觸很深的人來說
    會發現MS在其中投入多少奇思妙想在其中
    對於開發系統上的經驗在這裡真的收穫很大
    因此有些API或系統好不好用
    有些時候我覺得不是重點
    反而它的概念與思維才是要去學習的重點
    不然就像某位前輩說的
    "工程師阿~不就只是複製貼上交差了事"

    這句真的對我當頭棒喝XDD

    回覆刪除
    回覆
    1. 我最近的工作也相當的忙,雖然一直有想要做的遊戲,但是我跟畫師都一直忙到不可開交...

      Framework很可惜的是他居然不是在windows安裝的時候有強制安裝,所以發部程式都還要另外包一份framework給使用者...

      今天剛好我也聽到一個非程式科系出生但是有唸過程設學位的人講一句"程式是很簡單的,只要耐心的複製貼上就好"的時候,就在想說"這年頭程式設計系的學位有那麼好修到嗎"。 XDD

      刪除
    2. 其實win vista之後都有預設安裝在光碟中
      只是預設是不安裝而已XD
      只要簡單教學就可以讓大家安裝使用
      不過目前看到很多工具都有需求Framework
      我想沒安裝的人算少數了
      甚至MS也有提供client版給開發者
      目的是打包時可以壓縮容量

      其實真有可能滿好混的欸
      至少我在某學X上課
      聽一聽我都覺得我能去開課了XD
      只要拿到原廠教師執照真的不是難事
      上課隨便抖一些書上沒有的就能拿薪水...(ノ∀ˋ )

      刪除