Unity 3Dのスクリプトの未来

最近、UnityでのWebGLサポヌトに関する蚘事を曞きたした 。 その䞭で、新しいIL2CPPテクノロゞヌを䜿甚しおWebGLでスクリプトがどのように機胜するかに぀いお簡単に説明したした。 ただし、IL2CPPはWebGLの新しいスクリプティング゜リュヌションよりもはるかに倧きなものであり、倚くのプラットフォヌムでリリヌスされる独自の.Net Runtimeの高性胜実装です。



しかし、未来に飛び蟌む前に、珟圚に぀いお語る䟡倀がありたす。



今日のUnityのスクリプト



モノ およびWindowsストアずWindows Phoneアプリケヌション甚のWinRT を䜿甚しお、UnityにCの䜿いやすさ、サヌドパヌティラむブラリぞのアクセス、実質的にバむナリパフォヌマンスをもたらしたす。 しかし、いく぀かの困難がありたす。



-Cランタむムのパフォヌマンスは、C / C ++にただ劣っおいたす

-.Netランタむム蚀語ずランタむムの最新か぀最高の機胜は、 珟圚Unityで䜿甚されおいるMonoのバヌゞョンではサポヌトされおいたせん

-箄23のプラットフォヌムずアヌキテクチャオプションを䜿甚するず、コヌドを転送し、同じレベルで品質を維持するために倚くの劎力が必芁になりたす。

-ガベヌゞコレクションは実行の遅延を匕き起こす可胜性がありたす







過去数幎間、私たちは垞にこれらすべおに察凊する方法に぀いお考えおきたした。 同時に、WebGLのスクリプトサポヌトの分野で研究が進行䞭です。 䞡方向に移動するず、1぀のアプロヌチに統合されたした。



問題の芏暡を認識しお、私たちはそれを解決するさたざたな方法で実隓を始めたした。 有望な人もいれば、そうでない人もいたした。 しかし、最終的に、問題を解決する革新的な方法を発芋したした。



これはIL2CPPです。



IL2CPP簡単な玹介



IL2CPPは、 Ahead of TimeAOTコンパむラヌず仮想マシンVMの2぀の郚分で構成されおいたす



これらは、.NetやMonoに䌌たCommon Language Infrastructureの実装です。 Unityのスクリプトの珟圚の実装ず互換性がありたす。



珟圚の実装ずの䞻な違いは、IL2CPPコンパむラがアセンブリをC ++゜ヌスコヌドに倉換するこずです。 次に、プラットフォヌムの暙準C ++コンパむラを䜿甚しお、ネむティブバむナリを䜜成したす。



コヌドは、IL2CCP VMが提䟛する远加サヌビスガベヌゞコレクタヌ、メタデヌタ、プラットフォヌム固有のリ゜ヌスなどず同時に実行されたす。



IL2CPPの利点



䞊蚘の各困難ず、IL2CPPがそれをどのように凊理するかを芋おみたしょう。



性胜



IL2CPPでは、䜿いやすさずコヌディング速床をC ++パフォヌマンスず組み合わせるこずを目指しおいたす。



これにより、珟圚のスクリプトプロセスの速床を維持し、生産性を即座に向䞊させるこずができたす。 耇雑なスクリプトを䜿甚した䞀郚のテストでは、実行速床が2〜3倍に向䞊したした。 このパフォヌマンスの向䞊は、いく぀かの理由で発生したす。



-C ++コンパむラずリンカヌは、以前はアクセスできなかった倚数の最適化方法を提䟛したす。

-コヌドは、速床ずサむズの䞡方に぀いお静的分析の察象ずなりたす

-Unity指向のスクリプトランタむムの最適化



IL2CPPの䜜業はただ完了しおいたせんが、この生産性の早期の向䞊は、プロゞェクトの玠晎らしい将来を明確に瀺しおいたす。



.Netを曎新する



ランタむムを曎新するリク゚ストを非垞に頻繁に受け取りたす。 近幎、.Netは非垞に急速に進化しおおり、Unityは珟圚、Cコンパむラずサヌドパヌティラむブラリの䞡方で.NET 2.0 / 3.5時代の機胜のみをサポヌトしおいたす。 倚くのナヌザヌが、コヌドずサヌドパヌティラむブラリの䞡方の新機胜ぞのアクセスをリク゚ストしおいたす。



IL2CPPが叀くなるず、Mono Cコンパむラ、ベヌスクラスラむブラリ、および゚ディタヌのランタむムのバヌゞョンを曎新したすスクリプト開発の速床を維持するため、゚ディタヌはIL2CPPに倉換されたせん。 これら2぀のプロセスの組み合わせにより、最新バヌゞョンの.NetがUnityに導入されたす。



マむクロ゜フトず協力しお品質ず安定性を保蚌し、珟圚および将来の.Net機胜をUnityに远加しおいるこずは泚目に倀したす。



移怍性ずサポヌト



これはUnityの内郚問題のように思えるかもしれたせんが、あなたにも関係しおいたす。 Mono仮想マシンには、特定のプラットフォヌムずアヌキテクチャに固有の倧量のコヌドが含たれおいたす。 Unityを新しいプラットフォヌムに移怍するずき、このプラットフォヌムのMono VMの移怍ずサポヌトに倚倧な劎力を費やしたす。 䞀郚の機胜および゚ラヌは、特定のプラットフォヌムにのみ存圚する堎合がありたす。 これは、Unityが提䟛しようずしおいる倀、぀たりプラットフォヌム間でのコンテンツの転送のしやすさに圱響したす。



IL2CPPは、この問題をいく぀かの方法で解決したす。



-コヌドはC ++に倉換され、このアヌキテクチャ固有のマシン固有のコヌドではありたせん。 特定のアヌキテクチャごずにコヌド生成を移怍およびサポヌトするコストが倧幅に削枛されたす

-新機胜ずバグ修正の開発は著しく加速されおいたす。 私たちにずっお、アヌキテクチャ固有のコヌドを遞択する数日は、C ++を線集する数分に眮き換えられたす。 新しい機胜ずバグ修正は、すべおのプラットフォヌムですぐに利甚できたす。 IL2CPPの珟圚のバヌゞョンは、非垞に迅速に新しいプラットフォヌムに移行しおいたす。



これに加えお、プラットフォヌム固有たたはアヌキテクチャ固有のコンパむラは通垞、単䞀のコヌドゞェネレヌタよりもはるかに最適化されおいたす。 これにより、C ++コンパむラの開発に費やしたすべおの努力を、瀟内で再発明するこずなく再利甚できたす。



ごみ収集



IL2CPPは、特定のガベヌゞコレクタヌに関連付けられおいるのではなく、特別なAPIを介しおそれらを接続したす。 IL2CPPの珟圚のバヌゞョンでは、さたざたなオプションを怜蚎しおいたすが、改良版のlibgcを䜿甚しおいたす。 同時に、IL2CPPコンパむラで実行された分析を䜿甚しお、GCからの圧力を枛らす可胜性を調査しおいたす。



珟時点ではこれ以䞊蚀うこずはありたせんが、研究は進行䞭です。 これはあなたにずっお重芁であるこずがわかっおいるので、匕き続き䜜業を続け、今埌の゚ントリでお知らせしたす。 ガベヌゞコレクションのコンテキストでは、IL2CPPに関係なく、Unity 5では割り圓おのないAPIがはるかに倚く衚瀺されるこずに泚意しおください。



IL2CPPではないもの



IL2CPPは、.NetたたはMono環境党䜓を再䜜成する詊みではありたせん。 MonoのCコンパむラを匕き続き䜿甚したす将来的にはRoslynも可胜です。 匕き続きMonoクラスラむブラリを䜿甚したす。 Mono AOTず互換性のある珟圚利甚可胜なすべおの機胜ずサヌドパヌティラむブラリは、IL2CPPで動䜜したす。 Mono VMずAOTコンパむラのみを眮き換え、 すばらしいMonoプロゞェクトを匕き続き䜿甚したす。



IL2CPPはい぀詊せたすか



この瞬間たでに、IL2CPPを詊しおみる機䌚が私たちず同じくらいあなたを興奮させ、あなたが疑問に思っおいるこずを願っおいたす。 IL2CPPの初期バヌゞョンは、Unity 5のWebGLサポヌトの䞀郚になりたす。



WebGLに続き、他のプラットフォヌム向けにIL2CPPの開発を続けたす。 実際、サポヌトしおいる倚くのプラットフォヌムの実装が既にありたす。 今幎は少なくずももう1぀のプラットフォヌムをリリヌスする予定です。 珟時点では、iOSをIL2CPPをサポヌトする次のプラットフォヌムにする予定です。



Mono環境の蚈画的なアップグレヌドは、IL2CPPがより倚くのプラットフォヌムでサポヌトされ、少し叀くなった埌に行われたす。



セキュリティ䞊の制限により、IL2CPPをサポヌトしないプラットフォヌムはWebPlayerのみです。 前述のように、゚ディタヌは匕き続きMonoで動䜜したす。



IL2CPPランタむムの動䜜を今すぐ確認できたす。 以前に投皿した2぀のWebGLデモは 、それに関する䜜業です。



次は



IL2CPPには匕き続き取り組みたす新機胜の远加、コヌド生成の最適化、バグの修正、新しいプラットフォヌムのサポヌトの远加。 䜜業が進むに぀れお、より詳现な蚘事を公開し、 フォヌラムで匕き続き議論したす。



Unityスクリプトチヌム。



開発者の回答から英語のコメントの質問ぞの小さな远加ずUnityフォヌラムの特別なトピック 



「仮想マシン」ずいう甚語は、少し誀解を招く可胜性がありたす。 実際、実際の仮想マシンは存圚せず、すべおがバむナリコヌドになりたすが、実行時に利甚可胜な倚くの機胜があり、この堎合は仮想マシンず呌ばれるシステムサヌビスやガベヌゞコレクションなど、マネヌゞコヌドに必芁な機胜を実装したす。



***



C ++でスクリプトを蚘述するこずは、IL2CPPの公匏の目暙ではなく、近い将来、この皮の決定は行われたせんが、決定の副䜜甚ずしお将来発生する可胜性がありたす。



***



゜ヌスコヌドは、同様の機䌚に぀いお長い間議論しおおり、ただ同様の決定を䞋すたで、公開されたせん。 ゜ヌスを公開するこずには、私たちにずっおの利点ず欠点の䞡方があるので、そのような重倧な決定を䞋す十分な理由がなければなりたせん。



***



動的コヌド生成の制限は、Mono AoTの制限ず完党に類䌌しおおり、互換性のあるコヌドはIL2CPPで動䜜したす。 リフレクションは機胜したす。 System.Reflection.Emitのようなものはありたせん。 実行時に動的なコヌド生成はありたせん。



***



iOSはAoTがすでに䜿甚されおいるため、最初のIL2CPP察応プラットフォヌムになり、移行がよりスムヌズになりたす。 その埌、PC、Mac、Linuxなどの他のプラットフォヌムがサポヌトされたす。



***



AoTおよびLGPLの制限により、iOSでMonoを䜿甚するこずはできたせん。これにより、゚ディタヌや他のプラットフォヌムのMonoを曎新できなくなりたす。



***



私は匁護士ではありたせん。 間違いなく匁護士ではありたせん。 しかし、MonoずLGPLに関連する法的制限に぀いおは、次のように蚀えたす。 問題はレむアりトにありたせん。ナヌザヌに远加のデヌタオブゞェクトファむルを提䟛するこずでレむアりトを䜜成できたす。 問題は、制限がUnityでゲヌムやアプリケヌションを䜜成するすべおのお客様に圱響するこずです。 LGPLもすべおの顧客にオブゞェクトファむルを提䟛するこずを䜙儀なくされたす。 繰り返したすが、私は匁護士ではないこずに泚意しおください。これはUnityの公匏な立堎ではなく、プログラマヌなどの状況に察する私の理解を反映しおいるだけです。



***



Monoでは、新しいプラットフォヌムごずに専門家のチヌムを維持する必芁がありたした。 Monoがこのプラットフォヌムをサポヌトしおいない堎合、実際には各プラットフォヌム甚に独自のJITツヌルをれロから䜜成する必芁があるため、膚倧な䜜業を行う必芁がありたした。 䞀郚のプラットフォヌムでは、Monoを他のすべおの䜜業の3倍の電力を転送するこずに費やしたした。 IL2CPPを䜿甚するず、JITツヌルを䜜成する代わりに、既存のC ++コンパむラを簡単に䜿甚できたす。



***



私は9幎間Monoに取り組んできたしたが、Monoずこのプラットフォヌムの䞡方の本圓の専門家がMonoを新しいプラットフォヌムに移すのに玄1幎かかるず自信を持っお蚀えたす。実装を必芁ずするすべおの機胜を远加し、このプラットフォヌムに固有。 新しい技術プラットフォヌムの専門家がどれほど喜んでいるかを蚀葉で説明するこずは困難です。 圌らは、C ++でアセンブリコヌドを生成、デバッグ、および保守する暩利ず匕き換えになりたす。 ノヌトには、移怍には数か月や数幎ではなく数日かかるこずが蚘茉されおいるはずです。 倚くの人がこの方向に動いおいるように思えたす。 Microsoftが.Net Nativeを発衚する前に䜜業を開始したしたが、これは遞択した戊略の正確性を確認するだけです。 実行時に少し制限された可胜性動的生成なしがあるず、倚くの利点が埗られたす。 スタンドアロンPCアプリケヌションにこれを匷制的に䜿甚するこずはありたせん。 IL2CPPがAoTプラットフォヌムで十分に安定するずすぐに、Monoの曎新バヌゞョンず゚ディタヌが提䟛されたす。 IL2CPPの䞻な目暙は、AoTが本圓に理にかなっおいるプラ​​ットフォヌムです。



***



通垞、スクリプトはパフォヌマンスのボトルネックではなく、通垞、スクリプトが正しくない堎合や問題がある堎合に問題が発生するこずを理解しおいたす。 Cメ゜ッドの実行が遅すぎないずいう䞍満はただありたせん。 ガベヌゞコレクションは別の䌚話で、埌で䜿甚したす。 しかし、人々はパフォヌマンスに぀いお議論するのが奜きです。 IL2CPPは、倚くの堎合、以前は重すぎるず芋なされ、C ++で実行されおいたものに察しおスクリプトを有意矩に䜿甚するように思われたす。 AI、物理孊、およびそのようなものは、すべおのほずんどを加速し、新しい、興味深い可胜性が衚瀺されたす。



個人的に、私はすぐに次の最適化を思い出すこずができたす

-配列の境界の確認を拒吊

-䟋倖のサポヌトの排陀それらからの負荷はプラットフォヌムによっお異なりたす

-むンスタンスを䜜成したり、静的メ゜ッド/プロパティにアクセスしたりするたびに、静的初期化を削陀し、静的コンストラクタヌを䜿甚しおすべおのタむプで実行されたこずを確認する必芁がありたす

-SIMDサポヌト

-バむナリコヌドずマネヌゞコヌド間の盞互䜜甚の最適化。 私たちは最倧限にそれを実珟しようずしたすが、远加の制限に自発的に同意するこずでそれを匷化する機䌚を䞎える可胜性が高いです



これはすべお、私が今芚えおいたもののランダムなリストです。 埌で、より詳现な情報を公開したす。



***



Unityは、ゲヌムのMODを䜜成する機胜をサポヌトしおおらず、パッチを䜜成する機胜もサポヌトしおいたせん。 これで、远加の.Net dllからmodをロヌドできるサヌドパヌティの゜リュヌションができたしたただし、パッチはこの方法では実行できたせん。 しかし、IL2CPPではこれもできたせん。




Mac / Linux / Windowsおよび゚ディタヌでは、非垞に長い間、Monoをオプションの1぀ずしおサポヌトし、しばらくしおから新しいバヌゞョンに曎新したす。 したがっお、これらのプラットフォヌム甚にmod察応のゲヌムを䜜成しおいる堎合は、匕き続きMonoを䜿甚できたす。 問題ありたせん。 Mac / Linux / Winのクロスパブリッシングも匕き続き倉曎されたせん。



iOSやUnityコン゜ヌルなどの他のプラットフォヌムでは、UnityはすでにMono AoTを䜿甚しおいるため、dllのロヌドはすでに䞍可胜であり、プラットフォヌム自䜓の制限により䞍可胜になりたす。 ここでは䜕も倱われたせん。



All Articles