回覆: 關於遊戲開發(網遊)的學習地圖疑問

7 篇文章 / 0 新
最新文章
johnson_lin
johnson_lin's 的頭像
回覆: 關於遊戲開發(網遊)的學習地圖疑問

今天收到了網友寄來一封短信詢問關於「遊戲開發(網遊)的學習地圖」,不小心寫了一篇不算短的回覆,不過這種 open problem 範疇大,信中也沒有什麼隱私問題,我想原信照登在此,也許大家也有不同的想法或看法,或是資源可以提供等等。 :)

引言:

不好意思打擾了,看到您跟幾位部落格討論遊戲設計。想獨立開發簡單的網路遊戲。但是因為門外漢不知道該學習,什麼想請問關於學習地圖的問題,不知道是否方便? 在大學只接觸過一點c/c++、3dmax、adobe系列、演算法簡介、網路概論,但是其餘老師們都沒給太多資訊.......

請問是否會寫一篇專篇介紹該學習那些? 弄成樹狀圖,附帶少許簡介呢以及經典開源範例名字跟好的中文書籍? 網路上搜尋都沒有這種藍圖,可以讓新手按圖索驥。不知道您是否能提供專篇介紹?

我的回應是:
====================================================
很高興收到您的來信,但老實說這問題回答起來,我是相當戰戰兢兢 XD

因為,這個問題是大哉問。網路上很難找到相關的完整資料,正是因為這種問題很難回答。很多人的遊戲開發技巧、學習過程都不一樣,投入遊戲製作的出發點、目的等等也有差異。而學習地圖這種東西,也容易造成初學者單純按步就班往下學,卻不知自己為何而學,或是失去培養自行蒐集資料的適應能力,再加上學習成果也不保證,要是真的開出一張學習地圖來,爭議一定也很多。因此我並不推薦「按圖索驥」的想法。

一般來說,學校老師就更不用問了,如果老師本身沒有實際開發遊戲的經驗,其實他不給你資訊還算好事,要是胡亂給了些什麼東西讓你信以為真才是糟糕 ...。

如果您英文能力還可以的話,不妨讀一下《Super Meat Boy》作者之一 Tommy Refenes 的這篇:http://www.gamasutra.com/blogs/TommyRefenes/20130107/184432/How_do_I_get_started_programming_games.php

我目前時間不足以做文章翻譯,如果您接受簡體中文翻譯的話,也是有的:http://gamerboom.com/archives/66133

我再給一些意見讓您參考:

遊戲開發不論是專案本身,還是自我的學習歷程,都是非常 iterative 的,這點跟不要按圖索驥正是一體兩面:因為技術與工具更新很快,沒有什麼東西是學過以後就當做你完全會了,可以不用再回頭碰了。每次都一定會有不足的部分,每個部分未來一定都還有機會再走到一次,並非像瀑布式流程圖一路從起點走到終點就好。

因此試著完成作品很重要,就算是簡單到不能再簡單的,譬如說井字遊戲、打磚塊到 Pacman 等等。每多 iterate 一次,就越清楚自己要精進的地方是什麼,可以尋求外部資源不用自己來的部分又是什麼。另一方面,也可以透過實作過程碰到「遊戲設計」本身,然後從結果驗證自己的成果。

另外如前面連結的文中提到,不要想一開始一口氣什麼都做到。以電腦遊戲而言,最基本的是程式本身要能動,玩家的輸入要能有如預期的回應。這種時候就不用去顧慮什麼美術、音樂、音效、連線對打的東西。初學時的成就感很重要,如果花時間在容易消磨耐心、無法快速完成的項目上,很快就會想打退堂鼓。

我不確定您說「會一點 C/C++」「演算法簡介」「網路概論」是多簡介或多概論,或是已有基本實戰能力。但我想如果會問這樣的問題,大概就代表您很需要「動手完成第一個作品」的體驗,這種情況下就代表最好目前先不要以製作網遊為目標。因為網路/網頁遊戲大多牽涉到 server,複雜度會比單機要高出很多。(當然,單純只是跑在瀏覽器上,實際上並沒連線溝通的話就跟單機意思一樣),所以網路相關的東西,除非您有異於常人的決心,還是等簡單的單機小遊戲已經做了幾個之後再來思考吧。

C/C++ 對遊戲開發來說目前還是很重要的語言,適合新手上路的函式庫也有,如 cocos2d-x,SDK 專案裡就包括了不少 sample 可以參考,有一點基礎的話要馬上改出能動的東西,然後開始添加自己的規則之類的應該是很容易。但是 C/C++ 畢竟不是對開發者很友善的語言,如果您其實也不是很喜歡 C/C++,那大可現在開始改學別的語言,如 C#、Actionscript、Javascript 或 Lua 等等,然後使用 Unity、Flash、CoronaSDK 之類的工具。如果您發現自己根本不想親手寫 code,那也還是有路可走,如 Construct2 或是 Stencyl(我們網站上有一篇 Stencyl 經驗談:http://igdshare.org/content/stencyl-girls-garden)我隨便舉的這些例子,實際上只要花點時間 google 查詢一定都有相當多的資料與專案可以參考。

重點是,不論用怎樣的技術或工具,盡快設定出一個合理的目標,然後盡快完成它。哪個東西用得順手就用吧。這樣的流程完成過幾次之後,再來考量精進哪些部分吧。

另外,改 sample 改過一兩次以後應該也會想試試製作比較原創的東西,我是蠻推薦像參加 http://www.ludumdare.com 這類的 Game Jam 活動,48 小時內馬上會有一個屬於自己的小作品產生,或是我們國內辦實體 Game Jam 聚會時盡量來參加。總結來說,沒有任何比快點把東西做出來更快更有效的學習方式了。

這時您自己心目中的學習地圖才會慢慢浮現,個人認為這才是目前最有效歸納出「學習地圖」的方式:譬如說做了幾次之後,發現某些地方效能總是會卡住,是不是資料結構、演算法用錯?還是檔案載入用了不適宜的方式?美術效果看起來很呆版,怎麼弄出比較炫的效果?原先使用的某個工具好像限制太多,是否該改換其他工具?單人遊戲做過了,多人遊戲會有哪些差異?運氣好的話,也許還會發現,有些本來擔心的問題其實不必擔心,遊戲仍然在合理狀態下運作?甚至,發現也許自己對遊戲製作的興趣只有某部分,譬如說可能只對遊戲故事有興趣、只對數值設定有興趣、只對圖形特效有興趣 etc ... 這些都不是壞事,只有做了才會知道哪些部分感覺對了。
====================================================

然後貼過來後我才發現忘記回應關於「中文書籍」的部分 XD ... 。上奇很久以前出的《大師談遊戲○○》系列我覺得現在回去看也還有不少參考價值,但是其他的也許應該是各種基本功書籍比較重要吧,譬如說覺得程式能力有待加強的話就看程式的書,美術就看美術的書 etc ... 因為老實講還真的不知道該怎麼推薦 XD。

b1265
b1265's 的頭像

 謝謝您這麼仔細打了那麼多,真是不好意思,害您有壓力的感覺
其實我只是想知道從結果來推,從小型的個人網遊到程式語言的起點,中間有哪些東西可以參考
只知道網遊 可以找open source的 tcp/ip程式來用。需要用資料庫可以選mysql...程式語言可以選c
中間有一大層不清楚需要什麼...
       繪圖上需要3dsmax 也有聽說要學些openGL or directx
     
       像Unity3D  UDK Gamebryo 這些繪圖引擎 不知道是屬於哪個層次
聽說前兩者 似乎可以不太需要程式語言 就能開發簡單的東西   但是對網遊會被限制....
如果直接跳引擎,是不是可以減少大量時間?少學點程式語言的東西

程式語言層度也只是入門而已 還不能實作
   

Faust
Faust's 的頭像

一般而言要硬幹的話,多半是用C++,繪圖部分Windows的話應該還是DirectX為主。

你提到的三個引擎裡Unity跟UDK都是屬於相當完整的引擎,他們包括的不只是繪圖部分,還包括了音效、AI、工具等等,所以才有辦法減少直接撰寫程式的部份。而Gamebryo基本上只有繪圖部分,很多其他的部份和工具還是要自己來。

雖然用引擎可以直接用現成的東西製作Gameplay,但是只要你不動手改引擎本身的結構,基本上就是會被引擎先天的框架綁住。例如UDK最適合的還是FPS,而且網路方面比較弱,Unity則沒看過有什麼人用來開發大型專案。

如果你的目的是要製作遊戲的話,那麼利用這些引擎的確是一條捷徑。不過如果你的目的是學習遊戲程式的話,最基本的資料結構、演算法這些還是最重要的東西,剩下就跟Johnson說的一樣,不斷從小專案開始練習最有效果。

johnson_lin
johnson_lin's 的頭像

太好了,這樣我知道要回什麼了 XD

簡單來說,大概是像 API stack 這種階層圖的感覺吧?
http://cdn-static.zdnet.com/i/story/60/40/000515/android-architecture-485b.jpg (上圖為 Android architecture)

其實這樣的資料整理確實是我曾經想過要做,因為我覺得現在有些學校單純只教工具,學生無從知道工具的背後到底幫他做了哪些事,謀生技能被特定商業公司推出的特定技術綁死等問題,長期下來並不是好事。我覺得從你會想去瞭解一些 open source 專案,然後還想進一步瞭解遊戲引擎或各種函式庫「屬於哪個層次」來看,是很難得的想法。

不過遊戲方面因為沒有什麼統一的架構,這種圖可以 case by case 畫(譬如說 Unity 底下是接 Mono 及其他,Mono 底下又包含什麼 etc etc,有些開發工具的官方文件自己就已經有畫這種圖了)。如果是要不以套裝工具為單位,而打算羅列出一整張關聯圖表還是做得到,但恐怕要花非常大的功夫 XD

目前的狀況先容我偷懶以隨口舉例的方式起個頭吧。若有機會再看看能不能做系統性的筆記整理... 另一方面是,我不知道你真的會對瞭解一步一步從底層 OS 提供的 API 到做出會動的、能有聲光效果的遊戲程式有興趣?還是先直接做出能動的遊戲比較有興趣?

譬如說前文提及的 cocos2d-x 本身就是開源專案,你如果有耐心翻一下它 code 的架構的話,會發現:cocos2d-x 裡有兩個不同的 2D 物理引擎可選用;資料庫是引用 sqlite3;底層很多基本資料結構是來自 Apple 的 Cocoa;基本繪圖不意外就是 OpenGL 的包裝;然後向量字體轉成可顯示點陣圖的部分,cocos2d-x 針對每個作業系統平台上用的方法都不一樣,有用 FreeType 的,但在 windows 上它是直接呼叫 win32 API;圖檔存取當然就是直接使用 libjpeg libpng 等。不過 cocos2d-x 包山包海,跨一堆平台,我是沒實際翻過細節 ... 覺得它的 code 不算很好讀 orz

Gamebryo 我連試都沒試過,就不講了,但 Unity 與 UDK 比起 cocos2d-x 的包裝是又更高一層,前面 cocos2d-x 講到有的,Unity 應該也是全部都有,當然 Unity 本身沒有 open source 我們不會知道他底下怎麼實作,但大體上它會幫你處理的事情概念上雷同,而 Unity / UDK 這類工具又進一步透過 editor 把素材等「資料」也一並整合進來,讓開發者有在開發時獲得接近「所見即所得」的效果,有些參數調整也不用寫 code 或手動改背後的文件,編輯器上就有很多地方直接調整。

使用包裝越高階的套裝工具,當然在某些方面上開發起來一定是越方便,但是包裝越多當然也就代表越不自由,或是想做到某些底層效果是需要額外繞路的,譬如說使用 Unity 製作 2D 遊戲,當然做得到,不過當整個專案複雜到一定程度時,可能就會冒出意想不到的困難;用複雜的工具來做簡單的事情,也會造成學習工具的時間不必要地久,畢竟許多用不到的功能多少還是會造成干擾。

至於哪裡會踩到工具的地雷,真的要開發過一次夠複雜的專案,而且要有客觀的比較條件才會知道。有些人覺得一點問題也沒有,有些人就是遇到很鳥毛的問題。我舉 Unity 做 2D 這例子只是想強調會有類似這樣的狀況。單就製作 2D 遊戲來說,目前 Unity 實際 2D 案例與各種方便 2D 開發的外掛已經非常多了,多少解決了這個問題。要講 Unity 被部分開發者嫌的地方當然還有別的,不過使用 Unity 也已經帶來非常多快速開發的好處,一切只看你如何衡量。

我前文提過的 Construct2 與 Stencyl,則是包裝的再進一步,表示在特定狀況下使用起來更方便,但是限制更多,彈性更小。總歸一句,回應一下你文中題到的,「網遊」在這邊並不是什麼特例 XD 當你開始要挑高階工具,你就必須在先有目標設定的前題下來思考,才有標準可以比較。因為挑高階工具的目的都是為了幫助你快點達到目標、做出產品,若是其包裝與限制有助於這點,當然就可以考慮使用。

然後 3DSMax 是另一回事 @@... 你未來會考慮程式美術全包嗎?那為何不先學學 Photoshop 或 GIMP(這個開源喔)XDXD。一般在討論工具架構的時候,會把程式開發與內容製作兩塊切開 ...,當然像 Adobe Flash 是把這兩者整合得很好的開發工具的例子。

不過我上面八拉八拉亂講的這些,和「快點實際投入製作才會獲得最有效果的成長」並不衝突,實際上把這些都搞懂並不會讓遊戲變有趣;另外就算是想真的瞭解程式中各層 API stack,實際把引擎拿來用了之後,遇到問題再往 source code 去挖、去網路上查解法找原因,同樣也是最有效的。

所以我覺得不要擔心程度是否已能實戰,戰下去就知道哪裡需要加強啦,也千萬不要想一定要馬上搞懂從只會 printf 到一個小型網遊中間到底有多少環節。先寫個 Pacman 來玩玩如何?:) 

至於網路功能 ...是另一個龐大到可以單獨出來討論的複雜 stack 了。容我這篇跳過 orz

ps. 我這篇寫到最後才想起 Gary 老師有在開非常紮實的基礎課程:
http://garfstudio.blogspot.tw/  
想要用比較硬的方式,完全從底層技術著手,而且真的是想做網路遊戲的話可以參考

=====

這篇回應反覆修改太多次,被 Faust 搶先惹 XD

b1265
b1265's 的頭像

應該類似這種階層圖,可以知道需要用到那些工具,作用簡介與運作原理。
或許是缺乏原理概念,所以才不知道需要那些工具。

其實是想將全部的東西自己做一遍,具體而微的做出屬於自己的東西(遊戲)。所以才想從最後倒回來做。
想往底層學的原因是因為會受引擎限制,有些東西可能弄不出來,或著還是需要用點語言學
如果可以都想用open source的工具 如果有需要 再自己去改

先從引擎做起,是想大概知道是怎麼製作的...再慢慢往程式語言學習 最底層的東西
想先弄個3d簡單小綠人在3d地圖行走,連線能出現兩個小綠人作互動和聊天室視窗,具備基本雛型也就夠了。(以前有在3dsmax 弄一個會走的小綠人(很像msn上面那隻) 沒貼圖,層度也僅限於此)
音樂有學過一點點介面操作... cakewalk9.0  reason adobe系列大概都在基本操作做過而已...

完成一個簡單的作品
最後才是做自己的遊戲企劃,再慢慢的把它做好看點,增加內容
 

http://oss-tw.blogspot.tw/2008/04/java-mmorpg-cs.html1
這位先生有舉例server大概做了哪些事,雖然是英文有點不懂,不過可以看出雛形...

自己有試過架設早期2d遊戲mmorpg的服務端(來源當然是網上別人外流的)來看看,只能知道他可能的運作方式,詳細內容沒有源碼不曉得,但是跟上面大魚先生舉的天堂2很像,只是簡略很多(database幾乎都是txt檔... 只有使用者帳號 是用 access)

若想直接從client & sever open source 遊戲:Ryzom
看起似乎也不太實際,架構不明。

c語言 做了洪維恩的教學手冊1~3章
感覺可能整本書看完練習還是不會用,都是介紹指令..
沒有簡單的實務應用提升成就感....
 有實務的書 不是跟日常較無關就是太難....

畢竟是業餘的興趣...摸索比較不容易,也沒辦法花太多時間...唯一可以做的就是用歲月來換

不好意思國文層度不太好,還是不太能表達我的意思。
謝謝您的回答

 

 

johnson_lin
johnson_lin's 的頭像

唔 ....

「想先弄個3d簡單小綠人在3d地圖行走,連線能出現兩個小綠人作互動和聊天室視窗」簡單的一句話,如果要從 OpenGL 與 socket 連線底層硬幹起的話,那已經是不知道多少歲月的功夫了。

當然如果能使用開源 3D 引擎如 Ogre3D 搭配開源的 networking library,要做出這樣的成果確實是會簡單不少,但如果你現在還在看基本 C++ 的書,還會覺得「整本書看完練習還是不會用,都是介紹指令,沒有簡單的實務應用提升成就感」,那我覺得現在的你不適合從引擎底層這條路起步。

真的想要這樣走,請參考我前面給過的 Gary 老師的課程部落格連結。Gary 老師教出來的學生有大半現在是真的在遊戲公司第一線開發 MMO,不是那種巨○電腦或X成電腦莫名其妙的騙錢課程。

又,如果發覺自己還是想快點有成就感,那就不要考慮被工具綁的問題了。前文的回應已提到非常多的工具資訊,你已經查過那麼多資料中一定也有已經看過碰過的工具,挑一個順手的來用就對了,這時你若想投入美術、遊戲設計還是音樂音效方面的練習,也才有那個餘裕。但是講起來這每一項都不比學程式基礎簡單,你只能選一項來實作,其他的靠網路上的免費資源,不然時間根本不夠用。美術與音樂音效的合法免費資源非常多,我們之前 Game Jam 討論串可以參考看看:
http://igdshare.org/content/mitjam-discuss
http://igdshare.org/content/mitjam2-ggj2013-discuss

另外老實說我不太確定你是因為什麼因素,會有「要做出一個具體而微的作品就是小型網遊」這個想法,不過請讓我武斷直接地說,這是錯誤的。

從我們小時候玩的 Pacman、Space Invader 開始,甚至是 Pong,就兩個板子一顆球彈來彈去,就是已經是完整的遊戲了。有實際製作出可互動,有可玩性的成果來回饋,才有辦法開始體會遊戲設計與開發的樂趣,遊戲為何好玩等等。就算做出一個有 3D 人物可以在地圖上跑來跑去的聊天室,它也還就只是個聊天室而已。

希望你可以理解你還有更多更適合的目標可以設定,不要設定在一個目前很明顯超出自己能力範圍太多的東西上。製作網路遊戲可以當成長期願景,但你中間會需要有很多個階段性、也是完整的作品做為目標才行。

 

b1265
b1265's 的頭像

謝謝 那我想先從學使用引擎下手吧
有能力再去了解工具各個階層的作用能力