日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity3d-跨平台(二)

發(fā)布時(shí)間:2024/8/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity3d-跨平台(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:http://www.jiandaima.com/blog/archives/945.html

是如何輸出到多平臺的?

我的第一篇文章,選擇了一個不那么簡單的主題,但是是我近期比較感興趣的。這周,我和一個朋友,談到了游戲開發(fā)和Unity3D,他問我,“為什么Unity可以輸出到那么多的平臺上?”我想了一下,試圖組織語言,但是我盡然不能回答這個問題。我從來沒有認(rèn)真想過這個問題,所以,我開始做一些研究。

哪些人適合看這篇文章:如果你是一個開發(fā)者,對于 托管、本地代碼,執(zhí)行環(huán)境和不同平臺這些概念有一定的了解,這篇文章是為你準(zhǔn)備的。如果你是3D、2D美術(shù),或者對于這類工作比較好奇的人,我非常抱歉,你可以停下來了,并接受一個可怕的答案:它就是這樣神奇。你可以跳到本文的最后兩段,結(jié)論在那里。如果你還是很好奇,你可以試一試?yán)^續(xù)讀下去。

我們開始討論這篇文章的話題:Unity3D可以說是市面上最流行的游戲開發(fā)引擎了。它非常友好(相信我,學(xué)習(xí)一些教程之后,15歲的孩子也能使用它)。它現(xiàn)在有Window和MacOs X版(Linux現(xiàn)在還在實(shí)驗(yàn)階段),本文最重要的一點(diǎn):它可以輸出在幾乎所有的設(shè)備上。我不是在開玩笑,看一下官網(wǎng)上的列表:

iOS
Windows Phone
BlackBerry
Windows
Windows Store Apps
Mac OS X
Linux
Their native Web Player
PS 3
Xbox 360
Wii U
PS 4
Xbox One
Tizen
SamsungTV
PS Vita
Gear VR
Oculus Rift

它適合無數(shù)的設(shè)備和環(huán)境。如果你還不知道Unity3D,可以試一下。免費(fèi)的版本可輸出Mac OX, Linux, Window, iOS, Android, BlackBerry, Web Player,SamsungTV, WebGL, Tizen,WindowPhone。相當(dāng)不錯,試一下。(遺憾,我并沒有收收到Unity官方的廣告費(fèi),僅僅只是我覺得它真是太贊了。)

更新:Jashan在評論里指出,這篇文章,我只把重點(diǎn)放在了腳本上,所以,我決定多寫一點(diǎn)關(guān)于Unity3D如何輸出其他特性到如此多的平臺上。閱讀下面一段,你會注意到,盡管使用Unity技術(shù)是一個偉大的工作,它依然依賴于許多公司幫助它將一些特性引入U(xiǎn)nity。在新平臺中發(fā)布時(shí),Unity的開發(fā)人員會一個一個地檢查量否支持每個特性,如果是的話,完成這些特性的時(shí)間會大幅度降低?,F(xiàn)在,讓我們看一下這些主要要特性。

圖形
我們從圖形開始。Unity提供大量的圖形API:OPenGL, OpenGL ES,WebGL,Metal和DirectX,每一套API都有一個目標(biāo)平臺。OpenGl用得最廣,它可以運(yùn)行在MacOS X,iOS,Linux還有Windows上。OpenGL ES適合一些移動設(shè)備,Andriod和iOS最為常見。WebGL是基于瀏覽器的圖形應(yīng)用和游戲的希望,它可以淘汰掉Flash插件和Unity的Web Player。Metal是蘋果上新的圖形API,它可以兼容最近的iOS設(shè)備和一些Californian公司的電腦。最后,DirectX,是微軟自己的的圖形API,兼容Windows, Windows Phone、XBOX。所以,UT的開發(fā)者花了大量的時(shí)間在圖形上,但大部是用于將這些工具整合進(jìn)引擎中,而不是從頭開始寫自己的API。

物理引擎
輪到物理引擎了,Unity信賴一個工具:Nvidia的PhysX,Unity發(fā)布的每一個平臺,它都可以支持。毫無疑問,它是市面上最好的物理引擎,從每一版的游戲引擎開始,它就是值得信任和高效的,那時(shí)PhysX還被叫做Novodex,也沒有被Nvidia收購。不同平臺使用同一物理解決方案的主要原因是它的一致性:在不同的設(shè)備上,所有的碰撞、運(yùn)行都必須有相同的行為,否則,某些平臺就會更受歡迎。

燈光
更說一次,Unity依賴于終端工具實(shí)現(xiàn)燈光,不論是烘焙出來的燈光還是實(shí)時(shí)燈光。在以前,進(jìn)行烘焙燈光用Autodesk的Beast,現(xiàn)在它被 Enlighten取代。在新的5.X版本中,它可以同時(shí)實(shí)現(xiàn)時(shí)實(shí)全局光照和烘焙燈光。

網(wǎng)絡(luò)層
2014年,Unity內(nèi)部發(fā)布了UNET(Unity的網(wǎng)絡(luò)層),是Unity自主研發(fā)的多玩家的網(wǎng)絡(luò)方案。過去,一些網(wǎng)絡(luò)解決方案開始普及,最有名的就是Photon。新的工具包括兩個方面,網(wǎng)絡(luò)層的API(有API高低級別)和有償?shù)亩嗳朔?wù),不同于上面描述的圖形、物理引擎和燈光,由于這是一個內(nèi)部項(xiàng)目,UT必須移值代碼到所有支持的平臺上去。

最后:腳本
給那些還不了解Unity的人,Unity讓我們使用C#和UnityScript腳本(EWW),不需要任何轉(zhuǎn)換或是專門的工具,將我們的游戲輸出到前面列出的平臺上。好像很簡單。引出了一個問題:如何做到的?我以為只要我停下來,想一想就可以得到答案,但即使我有一些Unity工作原理的認(rèn)識破,我也不能回答為什么。所以,我問了這些年我最好的朋友(google)如本文標(biāo)題的這個問題。這樣說吧,我沒有得到最好的反饋,后來,我找到了原因:我問了錯誤的問題。

本文中真實(shí)的明星是:Mono。我知道Mono對于Unity是很重要,但它遠(yuǎn)遠(yuǎn)超過了我所想。讓我們從這里開始:Mono究竟是什么?根據(jù)官網(wǎng):Mono是跨平臺,開源的.net開發(fā)框架。還是有一些疑惑,讓我們深入Mono的歷史。

2000年微軟發(fā)布了“基于inernet標(biāo)準(zhǔn)的新的平臺”.Net的框架,Xamarin公司有一個叫Miguel de Icaza的人非常喜歡.NET,想開發(fā)Linux的版本,微軟的.net不支持Linux(到現(xiàn)在還是不支持)和一些其他的非窗口平臺。他干脆決定創(chuàng)建他自己的環(huán)境,Mono工程在2001開源。Mono由一個開源項(xiàng)目,把net框架被帶入了其他平臺,包括C#編譯器和CLR(公同語言運(yùn)行庫)。從歷史來看,Mono一開始就被放在了.net之后。今天它不僅實(shí)在了.net的功能,還有一些外的功能。總結(jié)一下,Mono是一個開源項(xiàng)目,用C/C++實(shí)現(xiàn)了.Net的開發(fā)框架,今天可以運(yùn)行在一大堆平臺上。

現(xiàn)在,我們停止討論Mono,轉(zhuǎn)到Unity上來。在Unity中,我們是如何用腳本編程?用C#或是UnityScript,這里又引出一個問題,如果我們用C#編程,為什么Unity游戲可以運(yùn)行在如此多的平臺上?難道在上不需要JAVA,在iOs上不需要用Object-C來代替C#?難道Unity編不同平臺的游戲時(shí)不需要平臺本地代碼?如此多的問題。

我們從最后一個問題開始。不需要,Unity編不同平臺的游戲不需要本地代碼。聽上去太瘋狂了。Android不用JAVA?不用。你也可以用本地代碼開發(fā)(用C/C++),但是沒有人想那樣做,對嗎?那就是Mono做的事情。

現(xiàn)在我們說一說最重要的問題:沒有C#的運(yùn)行環(huán)境,為什么我的Android設(shè)備可以運(yùn)行一個C#寫的游戲?Mono運(yùn)行了它。但是,我并沒有在我的設(shè)備上安裝Mono呢?所以,基本問題是:Mono是如何進(jìn)入我的設(shè)備的?Unity編譯的游戲(和用Mono開發(fā)的應(yīng)用)運(yùn)行了一個Mono環(huán)境。你瘋了沒有?我現(xiàn)在不能證明它,但是Xamarin在這里“How it works”聲明過,非常有道理:

使用C#寫你的APP,從C#中直接調(diào)用平臺的API。Xamarin編輯器捆綁了.NET運(yùn)行庫,輸出成一個ARM可執(zhí)行文件,再打包進(jìn)iOS和應(yīng)用中。

這又產(chǎn)生了另一個問題:一個MONO發(fā)開APP附帶了整個框架?答案可以在同一網(wǎng)頁中找到:編輯Link的時(shí)候,在框架中沒有使用的類會被剝離出來。所以,只是部分框架被綁定在你的APP中,如果你想了解更多的它是如何工作,訪問網(wǎng)頁 Developer Center。

所以,Mono是這里的上帝,它為Unity游戲提供了.Net框架。這是為什么,你使用C#編出來的游戲,能在如此多的平臺上運(yùn)行的原因。這是我的第一貼,我希望我能有更多的想法來更新博客。不論你喜歡或者不喜歡,或者某個地方有錯,甚至你覺得這篇文章完全是胡扯,都可以請留言。

重要更新(2015年9月):IL2CPP技術(shù)改變了腳本后臺工作的方式,淘汰了Mono的VM和AOT編輯器。

下面讀什么?我寫了一個新貼子,關(guān)于Unity3D在引擎之下是如何工作的,我們的代碼是如何與引擎代碼相交互的。

總結(jié)

以上是生活随笔為你收集整理的Unity3d-跨平台(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。