Unity引擎

Unity 的背景

Unity引擎是一個(gè)跨平臺(tái)的游戲引擎野揪,最早發(fā)布于Apple的WWDC2005游昼。開發(fā)的主要語言是C#仪缸,這歸功于Mono,一個(gè).Net Framework的非官方實(shí)現(xiàn)(Xamarin公司開發(fā)并使用這個(gè)框架實(shí)現(xiàn)了用C#來開發(fā)跨平臺(tái)的應(yīng)用痴荐,后來被微軟收購血柳。)。有了Mono蹬昌,就解決了C#跨平臺(tái)的問題混驰。(為什么選擇C#而不選擇Java,可能是條款的問題皂贩,也可能是當(dāng)時(shí)的環(huán)境栖榨。)一個(gè)游戲引擎,為了實(shí)現(xiàn)跨平臺(tái)明刷,不僅僅是一個(gè)編程語言統(tǒng)一了就足矣婴栽。如果說計(jì)算機(jī)的計(jì)算速度快的不行,或者人們對(duì)游戲的需求只是局限于玩玩2D游戲辈末,那么的確可以這樣愚争,在Flash游戲(Action Script 3.0)最火的時(shí)候映皆,就是這樣的情況。但是現(xiàn)實(shí)的情況是轰枝,計(jì)算機(jī)的實(shí)際處理速度不夠快捅彻,臺(tái)式機(jī)的性能雖然很好了,現(xiàn)在移動(dòng)設(shè)備更受歡迎鞍陨。同時(shí)步淹,3D游戲似乎更炫酷,更能讓人沉浸其中诚撵。對(duì)于不需要事先跨平臺(tái)的游戲引擎來說缭裆,解決問題的方案還簡單一點(diǎn),CPU先天是并發(fā)效率比較弱寿烟,所以就用GPU來做輔助的圖形計(jì)算澈驼。GPU在上世紀(jì)九十年代還是不可編程只能配置,所以現(xiàn)在還是習(xí)慣稱之為硬件加速器筛武。隨著時(shí)代發(fā)展缝其,GPU也能夠編程了,但是還是有很多限制畅铭,還沒辦法像CPU上的語言那樣氏淑,發(fā)展出Java/C#等與硬件無關(guān)的解決方案〔現(xiàn)在的GPU編程語言還是比較貼近硬件的硕噩,雖然有了一些高級(jí)的語言Cg、GLSL缭贡、HLSL(統(tǒng)稱之為Shader語言炉擅,編譯出來的程序稱之為Shader Program,簡稱Shader阳惹,Shader受限于Shader Model谍失,在渲染流水線上,相應(yīng)的位置有相應(yīng)的Shader)莹汤,但這些高級(jí)語言還是比較貼近硬件快鱼,類似于C/C++,在不同的GPU硬件上都需要(重新)編譯一次纲岭。Shader語言編譯的工作不需要游戲引擎實(shí)現(xiàn)抹竹,而是由GPU的生產(chǎn)商來實(shí)現(xiàn)。而生產(chǎn)商又會(huì)遵循主流的標(biāo)準(zhǔn)止潮,例如做一個(gè)HLSL的版本給DirectX窃判,做一個(gè)GLSL的版本給OpenGL等等。像主機(jī)的開發(fā)商任天堂喇闸、Sony袄琳,有他們自己的硬件询件,他們自研的引擎一般不需要考慮跨平臺(tái)了。Unity要開發(fā)一個(gè)跨平臺(tái)的游戲引擎唆樊,當(dāng)然就需要考慮怎么解決Shader的跨平臺(tái)了(CPU端的問題宛琅,mono已經(jīng)替他們解決了)。目前的情況逗旁,沒有一種GPU的API是真正的跨平臺(tái)夯秃。像DirectX,毫無疑問痢艺,只能在Windows上用仓洼,Windows雖然在PC端有占大多數(shù)的份額,但在移動(dòng)端的市場幾乎為0堤舒,而現(xiàn)在移動(dòng)端的用量比PC還要多色建。OpenGL在PC上能用,在Mac上也能用舌缤。在移動(dòng)端占主流的那個(gè)箕戳,雖然叫OpenGL ES,并且Shader語言也是GLSL国撵,但是同樣名字的語言陵吸,其實(shí)也是有很多版本的。現(xiàn)在真正實(shí)現(xiàn)跨平臺(tái)最多的介牙,可能就是OpenGL ES了壮虫,PC上的WebGL就是OpenGL ES。如果用OpenGL ES环础,Unity會(huì)比較被動(dòng)的囚似,因?yàn)镋S不能發(fā)揮出硬件的所有性能。Unity的解決方案是Shader Lab线得,這個(gè)語言是類似HLSL饶唤,或者Cg的。Shader Lab的實(shí)現(xiàn)方案是贯钩,將這個(gè)語言編譯到目標(biāo)平臺(tái)能夠使用的語言募狂,例如某個(gè)版本的GLSL。雖然Unity號(hào)稱是跨平臺(tái)的角雷,但是并沒有達(dá)到運(yùn)行時(shí)跨平臺(tái)祸穷,而只能做到編譯時(shí)的跨平臺(tái)。如何實(shí)現(xiàn)運(yùn)行時(shí)跨平臺(tái)谓罗?就是開發(fā)出一個(gè)Unity Player粱哼,系統(tǒng)平臺(tái)裝了這個(gè)Player后,就能運(yùn)行開發(fā)者開發(fā)出來的游戲文件檩咱。曾經(jīng)Flash完成了一半這項(xiàng)工作揭措,但后來移動(dòng)端的興起胯舷,GPU在游戲中的重要性與日俱增,又毀掉了Flash的前程“砗現(xiàn)在最接近這個(gè)任務(wù)的是Unity了桑嘶。得益于移動(dòng)端的發(fā)展,但Unity的今天躬充,已經(jīng)不再是他的跨平臺(tái)的feature了逃顶,而是一套成熟的工具鏈,這個(gè)工具鏈還實(shí)現(xiàn)了一個(gè)生態(tài)充甚,Asset Store以政。

Hello Unity

Unity游戲的開發(fā),依賴于Unity開發(fā)工具伴找。很多游戲引擎盈蛮,只是作為一個(gè)庫的存在,基于這些引擎的開發(fā)技矮,更像是一項(xiàng)編程的工作——打開一個(gè)text editor抖誉,便可開始敲代碼,一運(yùn)行衰倦,就能看到自己的編程成果袒炉。游戲的開發(fā),有不少的工作量是界面上的布局樊零,這樣的工作我磁,非常需要有一個(gè)GUI編輯器來實(shí)現(xiàn)。Unity實(shí)現(xiàn)了這樣的功能淹接,稱之為Scene十性。Scene本身其實(shí)也是游戲引擎的一個(gè)運(yùn)行的結(jié)果叛溢,當(dāng)然塑悼,在PC上,Scene是基于PC的楷掉,而PC開發(fā)的游戲厢蒜,不一定發(fā)布到PC平臺(tái),因此效果并不能劃等號(hào)烹植。Scene支持鏡頭的拖動(dòng)斑鸦,或者選擇toolbar上的其他選擇,可以實(shí)現(xiàn)對(duì)Scene中的對(duì)象進(jìn)行編輯草雕。Scene中的對(duì)象是什么巷屿?是可渲染的對(duì)象。搭配著Scene一起使用的還有Hierarchy墩虹,Hierarchy列表是由GameObject對(duì)象組成的嘱巾,Scene的渲染是基于Hierarchy中的GameObject憨琳,但是GameObject不一定是可渲染對(duì)象,GameObject本身可以認(rèn)為是一個(gè)容器旬昭,可以添加各種Component篙螟,而Scene中可見的對(duì)象來自帶有Renderer Component的Game Object對(duì)象。雖然有點(diǎn)繞问拘,但是這里強(qiáng)調(diào)一點(diǎn)遍略,Scene中的對(duì)象并不能與Game Object劃等號(hào),它只是Game Object的一部分骤坐,它是一個(gè)具有Renderer + Mesh Filter的GameObject的呈現(xiàn)绪杏。那些不具備這些特性的Game Object,不會(huì)在Scene中出現(xiàn)纽绍,但是是Hierarchy的一部分寞忿。Scene和Game(窗口)的區(qū)別,是Game的Camera在Hierarchy中配置顶岸,而Scene的Camera是不在Hierarchy中的腔彰,Scene本身也可以認(rèn)為是一個(gè)具有交互性質(zhì)的已發(fā)布的Game,其Camera就是編輯器的渲染視角辖佣。

那種在text editor上編輯并啟動(dòng)的游戲霹抛,可以認(rèn)為是code driven的,需要用戶自己創(chuàng)建一個(gè)scene卷谈,然后要么代碼式的生成出場景效果杯拐。而Unity則是scene driven的,不需要用戶在代碼中創(chuàng)建scene世蔗,而是由引擎的runtime自動(dòng)創(chuàng)建scene端逼。用戶可以在Build Setting界面,將添加需要的scene污淋,而列表中第一個(gè)scene便是Unity runtime在啟動(dòng)時(shí)會(huì)去加載的scene顶滩。這個(gè)scene可以認(rèn)為是Scene對(duì)象的一個(gè)序列化文件。用戶在Scene上編輯的后寸爆,按保存礁鲁,就可以認(rèn)為是序列化的過程。啟動(dòng)時(shí)加載scene赁豆,則是反序列化的過程仅醇。

作為程序員,Unity最簡單的Hello World魔种,不是創(chuàng)建一個(gè)Text對(duì)象析二,而是創(chuàng)建一個(gè)空的Game Object,給這個(gè)Game Object添加一個(gè)Component节预,這個(gè)Component是一個(gè)可編程的組件叶摄,而不是可編輯的組件(其他的Component)漆改,這個(gè)Component可命名為HelloWorld(.cs),然后在代碼編輯器中准谚,刪除掉Class中兩個(gè)Override方法挫剑,而是Override Awake方法。在方法中寫上“Debug.Log("Hello World");”柱衔。這便是最簡單的Hello Unity了樊破。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市唆铐,隨后出現(xiàn)的幾起案子哲戚,更是在濱河造成了極大的恐慌,老刑警劉巖艾岂,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顺少,死亡現(xiàn)場離奇詭異,居然都是意外死亡王浴,警方通過查閱死者的電腦和手機(jī)脆炎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氓辣,“玉大人秒裕,你說我怎么就攤上這事〕ィ” “怎么了几蜻?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長体斩。 經(jīng)常有香客問我梭稚,道長,這世上最難降的妖魔是什么絮吵? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任弧烤,我火速辦了婚禮,結(jié)果婚禮上源武,老公的妹妹穿的比我還像新娘扼褪。我一直安慰自己,他們只是感情好粱栖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脏毯,像睡著了一般闹究。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上食店,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天渣淤,我揣著相機(jī)與錄音赏寇,去河邊找鬼。 笑死价认,一個(gè)胖子當(dāng)著我的面吹牛嗅定,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播用踩,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼渠退,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了脐彩?” 一聲冷哼從身側(cè)響起碎乃,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惠奸,沒想到半個(gè)月后梅誓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佛南,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年梗掰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗅回。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愧怜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妈拌,到底是詐尸還是另有隱情拥坛,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布尘分,位于F島的核電站猜惋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏培愁。R本人自食惡果不足惜著摔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望定续。 院中可真熱鬧谍咆,春花似錦、人聲如沸私股。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倡鲸。三九已至供嚎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背克滴。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工逼争, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劝赔。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓誓焦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親着帽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杂伟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容