Unity を検索

取り上げているトピック
シェア

本日、Unity 4.6.2 の公開リリースを発表しました。今すぐダウンロードできます。64 ビット iOS をサポートした最初のパブリックリリースで、Unity の新しい IL2CPP テクノロジーを使用しています。

IL2CPP は、Unity 内製の革新的なスクリプティング技術です。プロジェクト内のすべてのスクリプトのパフォーマンスが大幅に向上し、iOS ビルドで使用されている現在の Mono-AOT ソリューションと互換性があります。

IL2CPP により、スクリプティングソリューションを新しいプラットフォーム(WebGL のサポートなど)やアーキテクチャ、たとえば ARM64(iOS デバイスの 64 ビットのビルドを支えるアーキテクチャ)アーキテクチャに迅速に移植することができます。Unity 4.6.2 では、32 ビットと 64 ビットの両方の iOS デバイスで動作するユニバーサルビルドを作成することができるようになります。

劇的なパフォーマンスの向上

アルファ版とベータ版のサイクルでは、Unity コミュニティから本当に有益なフィードバックをたくさんいただきました。また、64 ビット iOS と IL2CPP のサポートを試されたユーザーからは、新しいスクリプトバックエンドによってスクリプトの実行速度が大幅に向上したとの報告が多く寄せられています。

例えば、Andrew Witte 氏が 32 ビットの iOS デバイス(iPad Mini, 1st gen)で RayTraceBenchmark を実行したところ、次のような結果を得ました。

mono_il2cpp_andrew

もちろん最優先するべきは皆さんご自身のシナリオですが、ベンチマークでは大幅な性能向上も確認できました。

UnityScript で書かれた JPEG エンコーダーの単純合計時間は以下のようになりました(このベンチマークは iPad Air 2 で実行されました

jpeg_encoder_new

こちらは WebGL のテストに使用される Unity ベンチマークの一部であるマンデルブローベンチマークです。IL2CPP での大幅な性能向上を示しています(このベンチマークは iPad Air 2 で実行されています)。

mandelbrot_new

iOS の 64ビット 対応を始めよう

この新しいビルドでは、IL2CPP スクリプトバックエンドと 64 ビット iOS サポートをプロジェクトで有効にすることが、わずか数クリックでできます。プレイヤー設定の iOS の箇所に「Scripting Backend」と「Architecture」の 2 つの新しいドロップダウンが追加されています。

ScriptingBackendSelection_800wide (1)

スクリプトバックエンドを IL2CPP に変更することで、64 ビット iOS のサポートが有効になります。デフォルトでは、ARMv7 と ARM64 の両方のバイナリスライスを含む「ユニバーサル」アーキテクチャ用にビルドされます。

既存のプロジェクトがネイティブプラグインに依存している場合、64 ビット iOS と IL2CPP に対応したバージョンにアップグレードする必要があるかもしれません。Unity プラグインの開発者である Prime31 社と提携し、同社のプラグインを 64 ビット iOS で使用できるようにアップグレードしてもらいました。You can download them here.

これが完了したら、プロジェクトを Xcode にエクスポートします。IL2CPP は Xcode プロジェクトに C++ としてスクリプトを出力するので、IL2CPP が生成したコードで Clang コンパイラーのパフォーマンスの最適化を完全に利用するためには、設定を Release にする必要があることに注意してください。

Xcode 6 で撮った以下の 2 枚のスクリーンショットから、その設定方法を確認することができます。

これで、アプリケーションをデバイス上で実行する準備が整いました。アーキテクチャの「ユニバーサル」プレーヤー設定を使用すると、64 ビットと 32 ビットのどちらのデバイスを使用しているかにかかわらず、適切なコードが自動的に実行されます。詳細な 64 ビット iOS へのアップグレードガイドを Unity マニュアルでご覧いただけます。

以下の事柄に注意してください。

  • WebRequest/WebClient API は現在利用可能ですが、機能していません。Delegate BeginInvoke/EndInvoke による非同期ソケットを必要とするものは現在機能していません。この問題には今後のパッチリリースで対応する予定です。

  • 他のデリゲート関数は正常に動作していますが、Delegate BeginInvoke/EndInvoke の動作に不具合があります。この問題には今後のパッチリリースで対応する予定です。

  • RakNet ネットワーキングはまだ IL2CPP に移植されておらず、皆さんやサードパーティのアセンブリがそれを参照すると問題が発生します。この問題には今後のパッチリリースで対応する予定です。

  • IL2CPP バックエンドでは、常にストリッピングが実行されます。そのため、使われている型がストリッピングされないようにするための回避策が必要になる場合があります。

  • ストリッピングが micro-mscorlib に設定された場合、型が見つからずにコンパイルに失敗することがありました。今後のビルドで IL2CPP についてはその選択肢を完全に無効化する予定です。

  • Xcode はビルドにより長い時間を要します。主な理由は、コンパイルするソースコードの量が圧倒的に多いからです。

  • Managed Debugger はサポートされていません。これは私たちのロードマップにも入っています。一方、ベータ版のユーザーは、Xcode デバッガーを使ってスクリプトコードのデバッグを行い、大きな成功を収めています。

  • Xcode の内部プロファイラーを有効にすると、IL2CPP スクリプティングバックエンドを使用するときにコンパイルエラーが発生します。

上記のリストに記載されている項目の中には、その対応のために公開に遅延を発生させるものがあることは重々承知しております。Apple が新しい iOS アプリをアップロードする際には 64 ビットをサポートする必要があるとした 10 月 20 日のアナウンス以降、私たちは 24 時間体制でバグレポートを収集しつつ、新しいウィークリービルドをプッシュしています。

このプロジェクトに携わる全員が、ひとつひとつの問題を可能な限り早く解決しようと深く考えています。

すでにご自身の iOS プロジェクトを App Store に掲載している場合は、ARMv7 上の Mono バックエンドを使用してアップデートを出し続けることをお勧めします。Apple によれば、6 月 1 日までこの方針を取り続けることができると述べています。また、IL2CPP バックエンドを使用したプロジェクトの内部テストをできるだけ早く開始することをおすすめします。

私たちはウィークリービルドを継続しています。パッチリリースは http://unity3d.com/jp/unity/qa/patch-releases で定期的にチェックすることができます。こちらのフォーラムのスレッドにお気軽にご連絡ください。お問い合わせには毎日答えています。

アップデート: RayTraceBenchmark のベンチマーク(Xamarin.iOS 7.0.2.7 LLVM/No-LLVM)の一部がデバッグモードで作られており、間違っていると指摘されていたのでミラーを行いました。そこで、Mono 2.6 と IL2CPP との比較(いずれも Unity でテスト)だけを残して、棒グラフを更新することにしました。

アップデート 2:リリーズモードで動作させた Mono 3.2 とラベル付けした RayTraceBenchmark について検証し、さまざまなデバイスでテストした結果、元の数値を表示した形に投稿を元に戻しました。

2015年1月29日 カテゴリ: テクノロジー | 5 分 で読めます
取り上げているトピック