在軟件開發中,遊戲開發這個方向看起來目標很明確,但實際上是個領域很廣的方向,入門的時候若是得不到指點一二,很容易誤入歧途,相反,若是走這條路以前能獲得前人的一些指路,是能夠事半功倍的。javascript
一 平臺與編程語言選擇
首先,遊戲開發的平臺就有不少類型: html
- 我的主機平臺:Windows、Linux、Mac OC;
- 移動平臺:iOS、Android、Windows Phone、BlackBerryOS、Symbian;
- 專業主機平臺:Xbox、PlayStation、Will等。
若是你想從事移動平臺的遊戲開發,Android主流JAVA語言,iOS主流Object-C語言,那麼你就要去學習這個平臺主流的語言,而在我的主機上主流的遊戲開發語言如今包括之後很長時間也仍是C++。
可是並非所不一樣平臺的遊戲開發,就毫無共通之處,學了這個到了另外一個平臺就無用了。不是這樣的,編程的世界裏你走得越遠你會發現不少東西的本質都是類似的,例如你若是紮實地理解了C++的基本語法(而不是死記硬背),往後再轉Java語言也不是很難的事情,由於它們本質的面向對象特性還有各類編程語言特性都是相通的。
因此,若是你想走得遠,在學習的時候不能簡單流於表面,對於同樣知識越深刻到底層,你就越能看到其它知識與其的殊途同歸之處,所以你將比別人更輕鬆。可是,固然一開始最好儘量是貼合本身的專屬領域和編程語言,這樣能儘快地在這個領域持有一席之地。
不管你選擇哪一個平臺,遊戲開發這個浩大的工程都離不開遊戲引擎,因此這裏都有二條路線讓你選擇: html5
- 只使用遊戲引擎;
- 使用遊戲引擎並深刻學習遊戲引擎原理。
線路一:只使用遊戲引擎
對於第一條路線,遊戲引擎的使用並不困難,所以適合想快速上手遊戲開發工做的人。咱們工做大多數時候也不會本身開發遊戲引擎,因此這樣對於通常的平常工做也沒什麼大礙。對於只使用遊戲引擎的人來講,入門階段要作的就是看該引擎的教程(書籍、視頻、網上博客、網上教程、官方幫助文檔等),而且熟練該教程所使用的編程語言。
因此你要作的第一件事,就是去了解如今流行的遊戲引擎。由於不一樣平臺下的性能不一樣,支持的編程語言也不盡相同,因此針對不一樣平臺下的流行的遊戲引擎也是不一樣的(方括號裏面是特別推薦的,基於開源性、易用性、性能與效果等方面的綜合水平推薦):java
- windows或遊戲主機:【Unreal】、寒霜、CE3
- 蘋果ios:【unity3D】、【cocos2d-ObjC】、【Unreal】、sparrow、sprite kit。
- 安卓:【unity3d】、【cocos2d-x】、【Unreal】、AndEngine、libgdx。
- 網頁:【Egret】、【cocos2d-html5】、Fancy3D、unity3d。
在選擇遊戲引擎的時候,儘量選用流行的遊戲引擎,由於這個遊戲引擎流行意味着官方的功能比較完善和易用,問答社區也比較多人解疑。各個遊戲引擎也各有千秋,Unity3d勝在簡單易用,對性能要求不高,可是效果不夠華麗,於是通常用在移動平臺而不會用在電腦或遊戲主機。Unreal勝在開源免費,並且效果也很出色,可是對設備要求比較高,於是經常用來開發效果絢麗的大型遊戲。cocos2d-x也是開源免費的,在2D領域深有造詣,可是缺點是不可視化開發。另外,若是你想了解遊戲引擎原理,那麼首要考慮的就是開源的遊戲引擎。
不一樣遊戲引擎使用的編程語言或者腳本語言多是不同的,因此當你想要學習某個遊戲引擎的時候,也應該留意該遊戲引擎所使用的語言。大部分狀況是,Windows用的的是C++,同時結合lua或python腳本語言。而ios平臺下使用Objective-C或swift,安卓平臺下使用Java。但這不是必然的,例如Unity在各個平臺下均可以用C#或者javascript腳本語言。
下面是商業上流行的遊戲引擎詳細比較:python
1) Unreal4(虛幻4)
- 適用平臺:Microsoft Windows、Mac OS X、iOS、Android、虛擬現實設備(包括但不限於SteamVR/HTC Vive、Morpheus、Oculus Rift及Gear VR)、Linux、SteamOS及 HTML5平臺。
- 編程語言:C++或無需編寫代碼。
- 優勢:開源免費,畫面效果出色,已有多款商業大做經驗。同時,它還能跨平臺,商店資源豐富,提供了無需編寫代碼便可製做遊戲的強大功能(可視化開發)。
- 缺點:開發機器配置要求較高。
2) Unity3D
- 適用平臺:iOS、Android、Windows phone 八、Tizen、Microsoft Windows、Windows Store應用程序、Mac、Linux/Steam OS、網絡播放器、WebGL、PlayStation三、 PlayStation四、PlayStation Vita版、Xbox One、Xbox 360、Wii U、Android TV、Samsung SMART TV、Oculus Rift、Gear VR、Microsoft Hololens、Playstation VR。
- 編程語言:C#、javascript、Boo。
- 優勢:方便易用,中文資料豐富,跨平臺,商店資源豐富,可視化開發。
- 缺點:畫面效果通常,不是免費開源,引擎效率比較低。
3) Cocos2d系列(包Cocos2d-x、Cocos2d-ObjC、Cocos2d-html五、Cocos2d-xna等)
- 適用平臺:Microsoft Windows、OS X、 Linux、iOS、 Android、 Tizen、 Linux、Mac OS X、HTML5瀏覽器、Windows Phone 7 & 八、Xbox 360。
- 編程語言:Python、Objective-C、C++、 Lua、 JavaScript、 Swift、JavaScript、 C#。
- 優勢:開源免費,跨平臺,中文資料豐富,2D技術豐富且成熟。
- 缺點:不可視化開發,3D方面技術不成熟。
4) CryEngine3
- 適用平臺:Microsoft Windows、OS X、Linux、PlayStation 三、PlayStation 四、Wii U、Xbox 360、Xbox One、iOS、Android。
- 編程語言:C++、Lua。
- 優勢:畫面效果世界一流,可視化開發,跨平臺。
- 缺點:開發機器配置要求較高,不是免費開源。
5) Frostbite3(寒霜3)
- 適用平臺:Microsoft Windows、PlayStation 三、PlayStation 四、Xbox 360、Xbox One。
- 編程語言:C++。
- 優勢:畫面效果出色,可視化開發,跨平臺。
- 缺點:開發機器配置要求較高,不是免費開源。
6) Egret(白鷺)
- 適用平臺:HTML五、iOS、Android、Windows Phone。
- 編程語言:TypeScript、JavaScript。
- 優勢:免費開源,配套工具多,全中文文檔,可視化開發,跨平臺。
- 缺點:支持平臺較少,大多數時候用於開發對性能和效率要求不高的小遊戲。
可是使用遊戲引擎畢竟是停留在表面看不到本質,當遊戲開發的時候出現了某些問題或者特殊需求,你每每很難處理。並且遊戲引擎技術突飛猛進,你所學的幾乎都是別人留下來的方法,而不是其本質思想。若是未來別的遊戲引擎興起,你又要從新學習另外的遊戲引擎怎麼使用。在不少大公司裏面,甚至都有本身公司內部專用的引擎(如網易公司的風魂引擎、金山公司的劍網3引擎、蝸牛公司的Flexi引擎等等)。因此單純地走這條路線,可能不會讓你走得很遠而且可能會日漸乏味。 ios
線路二:使用遊戲引擎並深刻了解遊戲引擎原理
對於第二條路線,深刻學習遊戲引擎原理短期不會讓你的工做有什麼卓越的成效,可是能夠彌補只使用遊戲引擎致使的問題,並且學習遊戲引擎原理,更多時候不是必定就爲了本身往後要造個遊戲引擎,而是更深刻理解本身的遊戲引擎,更好地使用它。固然,千里之行始於足下,常常學習遊戲引擎底層原理的人到了必定的積累的時候,本身造個遊戲引擎也是能夠的。
對於像學習遊戲引擎原理的人來講,須要制定本身明確的長期目標:
1) 首先,一開始可能對遊戲引擎沒什麼概念,建議先使用一兩個遊戲引擎(我推薦C++程序員學習虛幻4遊戲引擎,如今是免費開源的,很是值得學習。那些不開源的遊戲引擎儘可能不要去學習,由於其對於學習原理來講沒有多大貢獻)。
2) 由於遊戲開發就是一門實時渲染的藝術,因此離不開圖形庫的學習。如今主流的圖形庫是Windows平臺專用的DirectX 11和通用平臺的Opengl。這兩個圖形庫,至少須要入門其中一個。
3) 而後,你就能夠開始看計算機圖形學的書籍了。若是你發現你的理論底子不足,這個時候就須要補一下線性代數、基本的微積分、還有3D數學的知識。
4) 遊戲引擎中包含了各個部分,上面的渲染只是遊戲引擎的一部分。還有其它諸如着色器編寫、地形編寫、物理引擎編寫、模型和動畫、人工智能體設計、網絡編程等等,完成渲染部分的基本學習後,你能夠選擇本身感興趣的部分進行專攻,畢竟咱們實際工做大多數時候是團隊開發,而不是單打獨鬥,每一個人都應該精通本身所擅長的那部分。
這裏爲了文章的緊湊性,我將遊戲引擎的基礎理論知識和各個引擎組件的推薦書籍放到了文章的附錄處。
下表是基礎理論知識和遊戲引擎組件書籍推薦(沒必要全看,請有選擇地閱讀):git
1) 數學基礎
下面這些數學基礎書籍是爲遊戲開發量身定製的,比專門看某一數學方向更有效率:程序員
- 《3D Math Primer for Graphics and Game Development》,有中文版
- 《Mathematics for 3D Game Programming and Computer Graphics》
- 《Essential Mathematics Guide》
- 《Geometric Tools for Computer Graphics》
2) 圖形庫
針對 DirectX 的書籍:編程
- 《Introduction to 3D Game Programming with DirectX 11》,大名鼎鼎的龍書,入門必看的
- 《Practical Rendering and Computation with Direct3D 11》,進階
- 《Real-Time 3D Rendering with DirectX and HLSL》
針對 OpengGL 的書籍:swift
- 《OpenGL SuperBible》,著名的藍寶書,以例子爲主,有中文版。但不建議看中文版,翻譯得很差。
- 《OpenGL Programming Guide》,著名的紅寶書,有中文版。紅寶書更像是手冊,API大全,例子較少,適合熟練者查詢使用。
- 《OpenGL 4.0 Shading Language Cookbook》,進階,基本上就是API手冊,有中文版。但不建議看中文版,翻譯得很差。
3) 計算機圖形學
- 《The Nature of Code》,有中文版,比較簡單
- 《Fundamentals of Computer Graphics》,被國外多所大學採用的入門教材,介紹範圍比較廣,從基本的相關數學到建模、渲染、動畫、應用方面都有說起
- 《Physically Based Rendering》,主要是離線渲染
- 《Real-Time-Rendering》,必讀經典!必讀!
- 《計算機圖形學》,做者舍利
- 《Computer Graphics》,要看最新的第三版
- 《計算機圖形學原理及實踐:C語言描述》
4) Shader着色器
- 《Cg_tutorial》,入門
- 《The Complete Effect and HLSL Guide》,入門
- 《Shaders for Game Programmers and Artists》,含有大量入門例子
- 《Advanced Lighting And Materials With Shaders》,介紹光照模型和技術
- 《GPU Gems》進階必讀。
- 《Shader X》系列,每一年出版一本,包含最新的實時渲染技術。論文性的比較多,偏難。
- 《Programming Vertex, Geometry, and Pixel Shaders》,以DirectX 10爲主,很詳細。
5) 地形
《Real Time 3D Terrain Engines Using C++ And DX9》很是全面的討論了關於地形渲染的各類技術。
6) 模型導入和動畫
- 《Character Animation With Direct3D》包含了最新的遊戲動畫技術
- 《Computer Animation》
- 《Real-Time Cameras》
- 《Computer Facial Animation》
- 《Realtime 3D Character Animation with Visual C++》
- 《Advanced Animation and Rendering Techniques》
- 《Cloth Modeling and Animation》
7) 網絡
- 《TCP/IP 詳解 卷2》
- 《Network Programming for Microsoft Windows》
- 《Advanced Programming in the UNIX Environment》
- 《Windows核心編程》
- 《Multithreading applications in Win32》
- 《網絡遊戲核心技術與實戰》
8) 物理
- 《Game Physics》
- 《Game Physics Engine Development》
- 《Real-time Collision Detection》,碰撞檢測方面最好的書
- 《3D Game Engine Design, 2nd》第八、9章值得一看
9) 細節層次
《Level of Detail for 3D Graphics》
10) 光線跟蹤
- 《Physical-Based Rendering - From Theory to Implementation》
- 《Another Introduction to Ray Tracing》
11) 人工智能
- 《Programming Game AI by Example》有中文版
- 《Artificial Intelligence for Games》
- 《AI Programming Wisdom》
- 《AI Game Engine Programming》
12) 綜合
- 《Game Programming Gems》,文章的範圍比較廣,選擇性閱讀
- 《Color and Light in Nature》
- 《Digital Design of Nature》
- 《Form+Code in Design, Art, and Architecture》
- 一下這張圖片非原創,出自:做者星鈴丹,受權發佈,轉載請註明出處。寫的很是詳細,拿出來和你們分享下!