Unity3d跨平台原理

2021-09-08 10:33:39 字數 1252 閱讀 9278

知乎的乙個提問:unity3d跨平台原理

一些資料:

il是.net框架中中間語言(intermediate language)的縮寫。使用.net框架提供的編譯器可以直接將源程式編譯為.exe或.dll檔案,但此時編譯出來的程式**並不是cpu能直接執行的機器**,而是一種中間語言il(intermediate language)

使用中間語言的優點有兩點,一是可以實現平台無關性,既與特定cpu無關;二是

只要把.net框架某種語言編譯成il**,就實現.net框架中語言之間的互動操作(這就是為什麼unity3d裡面可以c#和js混編)。(《c#程式設計及應用教程》(第2版),

馬駿 主編)

xamarin(現以被微軟收購)是mono專案的乙個分支,但這裡面最大的區別xamarin是商業專案.mono做為跨平台的框架已得到越來越多的商業專案的肯定,令外界擔心的版權問題\可靠性\穩定性也得到證實,使用mono最大的好處是可以使用其它平台眾多的專案解決方案,而不必被限制在windows平台下貧乏而又昂貴的各種解決方案.

在mac os上,因為ios的現有限制,面向ios的c#**會通過aot編譯技術直接編譯為arm彙編**。而在android上,應用程式會轉換為il,啟動時再進行jit編譯。

除錯時遇到乙個mono執行時異常:

1

2

executionengineexception: attempting to jit compile method'...'

whilerunning with --aot-only.

最後發現原因是使用了泛型介面,導致mono需要jit編譯,但在ios平台中,mono是以full aot模式執行的,無法使用jit引擎,於是引發了這個異常。

mono的aot和.net的ngen一樣,都是通過提前編譯來減少jit的工作,但預設情況下aot並不編譯所有il**,而是在優化和jit之間取得乙個平衡。由於ios平台禁止jit編譯,於是mono在ios上需要full aot編譯和執行。即預先對程式集中的所有il**進行aot編譯生成乙個本地**映像,然後在執行時直接載入這個映像而不再使用jit引擎。目前由於技術或實現上的原因在使用full aot時有一些限制,具體可以參考monotouch的文件,這裡提幾條常見的:

jit:

aot:

Unity3d跨平台原理

知乎的乙個提問 unity3d跨平台原理 一些資料 il是.net框架中中間語言 intermediate language 的縮寫。使用.net框架提供的編譯器可以直接將源程式編譯為.exe或.dll檔案,但此時編譯出來的程式 並不是cpu能直接執行的機器 而是一種中間語言il intermedi...

Unity3D 跨平台原理

unity3d的跨平台原理核心在於對指令集cil 通用中間語言 的應用。首先需要知道,unity中的mono是基於通用語言架構 common language infrastructure,cli 和c 的ecma標準實現的,與微軟的.net框架有著諸多類似之處,因此分析unity的跨平台性,本質即...

Unity3D開發(九) Unity3d流光效果

遊戲開 壇 hello game 遊戲開發群 201276069 之前曾經注意過material 中紋理的屬性都有 tiling 和offset 但沒有深究過其用途,今天才知道竟然可以利用 offset做uv 動畫,從而完成各種有趣的動畫,比如流光效果!流過效果即通常一條高光光在物體上劃過,模擬高光...