轉載請注明出處:http://www.cnblogs.com/yuxiuyan/p/7533392.html
在國內,如果你沒有聽說過《王者榮耀》,那你一定是古董級的人物了。
《王者榮耀》(以下簡稱“農葯”),專注於移動端(Android、IOS)的MOBA游戲。筆者看到這么火爆,就萌生了了解一下這類游戲的開發歷程,本專欄的目標是做一個類MOBA的Demo。
俗話說,不去瞎琢磨的程序員,不是好司機。
好的,直接進入正題。
一.農葯用什么語言和軟件開發
小伙伴看到農葯運行在Android和IOS平台上,估計第一個想到的就是 java / kotlin 和 Object-C / swift 了。其實不然,原生游戲的開發是非常耗時耗力的,並且在一些細節問題上不容易處理。現在的大部分游戲都是利用“游戲引擎”來處理的。比較著名的游戲引擎如unity3D,在處理農葯這種3D游戲時有着非常便利的管理和編碼功能。unity在5.x版本后支持C#和JavaScript兩種語言實現游戲中的腳本(在4.x還支持Boo)。據不完全統計,unity程序員大約80%都是用C#,所以這次筆者也是用C#(隨大流,不挨揍,haha)。而且如果你有java或者C基礎,那么C#使用起來還是相當舒服不坑爹的。在微軟的大樹下正在茁壯成長。
准確驗證:
下載王者榮耀的apk文件,解壓,發現了如下文件:
可以斷定,有unity的功勞。
有的小伙伴可能會有疑問,為啥不用JavaScript呢?現在JavaScript這么火爆?
其實unity使用的JavaScript和我們做web開發使用的JavaScript非常不同,或者我們干脆分別稱呼為unityScript和JavaScript也不為過。
這里在segmentfault的看到的一段:
- unity中的js與其說是js,不如說是Unity Script。unity中的js是會經過編譯的,其性能和本地速度差不多。在官方教材《unity 4.x從入門到精通》中unity稱C#,Boo,JS的性能是差不多的。
- unity中的js腳本是可以和C#腳本等值替換的,所以自然也有一大堆數據類型,對象繼承等傳統語言及OOP的概念。不過
var speed = 5
這么寫也是可以的,因為編譯器會自動理解成var speed:int = 5
。但是其他數據類型比如GameObject
、Transform
就不行了,必須在聲明變量時指定數據類型。- 自然,很多標准js中的特性在unity中也不支持,比如高階函數,閉包等。
- Unity3D中的Math對象叫做Mathf。
- Unity中的js可以直接調用Mono,C#封裝的dll等。
- Unity中的調試語句用Debug.Log。
- 每行后面必須有分號。
總之,Unity中的js是會在運行前被編譯成本地代碼的。和標准js僅是寫法比較相似,內在是完全不同的。比如js是非阻塞的,而unity中的js是阻塞的;js是動態語言,而unity中的js則是不折不扣的靜態語言。
總之,使用unity + C#來進行開發。
二.游戲入門
關於游戲,有以下幾個特點:
- 把游戲想象成一個動畫片,它是一幀一幀播放的
- 它的邏輯是可以變化的
- 你的程序控制它的畫面
綜合來看,游戲包括兩大要素:邏輯、顯示。
(一)什么是邏輯
簡單來說,就是游戲是怎么控制的,玩法是什么樣的。
- 游戲邏輯:游戲的玩法,用戶的輸入等。
- AI:NPC,自動尋路,追逐敵人等。
- 物理運算:碰撞,速度,加速度,重力等物理計算。
(二)什么是顯示
顧名思義,顯示就是把游戲的畫面、內容展現給玩家。
- 動畫系統:控制游戲動畫的播放。
- 底層渲染:告訴硬件該怎么樣把圖像顯示(渲染)出來。
用一幅圖歸納:
三.游戲團隊的角色
粗略可以分為三種角色:策划、美工、程序員。
- 策划:負責設計游戲的玩法。
- 美工:負責設計游戲的資源素材。
- 程序員:負責游戲的編碼。
四.unity介紹
上面說過,原生開發游戲耗時耗力,想象一下,整個游戲從底層的渲染,一直到上層的動畫聲音,簡直要了命。而且有一點,原生開發不利於組件的重用。
有些東西,在A游戲上可以用,在B游戲上也可以使用。那么我們為什么不把這些可以重用的部分提取出來,到時候再開發其他游戲的時候直接調用就可以了啊。
基於這么一種“偷懶”的思想,Duang~,游戲引擎就誕生了。
游戲引擎減少了重復開發,降低了技術門檻,對於那些游戲開發者簡直是“神器”。現在優秀的游戲引擎有很多非常有用的模塊。
ok,今天就先到這里。