Version: 2017.3
iOS 2D テクスチャ オーバーライド
Unity Remote

iOS 64ビットへのアップグレード

iOS 64 ビットのサポートは IL2CPP と呼ばれるスクリプティングバックエンドを使って実装されます。それは、C#/UnityScript コードで動いています。

IL2CPP ランタイムはネイティブバイナリを作成するため、標準で使用するプラットフォームの C++ コンパイラを活用している間、アセンブリを C++ に変換するために事前コンパイルと仮想マシンを組み合わせます。これにより、パフォーマンス、プラットフォーム間の互換性、メンテナンス性の高さが実現しました。

IL2CPP は iOS ARM 64ビットのデプロイをサポートするスクリプトバックエンドなので、新しいアプリのリリースで Apple の App Store を利用するためには必須です。

IL2CPP の詳細はこちらのブログ記事 、iOS 64ビットと IL2CPP のアップデートに関しては こちらのブログ記事 を参照してください。

iOS で IL2CPP を使用する方法

プレイヤー設定Scripting Backend ドロップダウンメニューから IL2CPP を選択してください。

Scripting Backend の選択
Scripting Backend の選択

デフォルト設定では、Universal アーキテクチャ(_ARM64_ と ARMv7 のどちらも含まれています)になっており、必要であれば プレイヤー設定 から特定のアーキテクチャに切り替える必要があります。アプリをアップし、64ビットで動作させるためにいくつか行うべきことがあります。

  • テスト動作させるため、64ビット対応のデバイスが必要です。 A7 以降のチップを搭載したデバイスが該当します(最近のデバイスであれば、iPhone 5s、iPad Air、iPad Mini Retina、iPhone6、iPhone 6 plus、iPad Mini 3、iPad Air 2 です)。
  • すべてのコンパイルされたプラグイン(と提供されているソースコード)は64ビットに対応している必要があります。サードパーティのプラグインを使用している場合、プラグインの提供元にプラグインの64ビット対応、IL2CPP への互換が可能になるよう連絡してください。現時点で最新の Prime31 プラグインは正常動作することが確認できています。
  • もしあなたがプラグイン提供者か、ネイティブプラグインを自作している場合、以下の点を意識しておく必要があります。
    • IL2CPP と Mono Runtime API 間には互換性がありません(想定されていません)。つまり、プラグインが mono_* 関数を使用している場合、リンクされないということです。この問題の解決に一番よい方法は、マネージドデリゲート/コールバックアプローチに切り替え、マネージドコールバックをプラグインのネイティブ側に渡し、ネイティブデータやイベントが発生したとき、渡した先から戻りそれらを呼び出すことです。
    • すべての事前コンパイルされている静的ライブラリ(.a ファイル)由来のプラグインは ARM64 スライスを有しているべきです。
    • ネイティブコード/型の変換を行う場合、ポインターとロング型は64ビットの長さを持つのに対し、int 型は依然として32ビットの長さであることを念頭に置いてください。
  • IL2CPP によって生成される C++ コードの総量を縮小するためには(_Stripping level_ が Disabled に設定されている場合であっても)常に管理対象のコードストリッピングをいくらか整理してやることです。あなたがその手助けをする必要があるときもあります。 iOS プレーヤーサイズ最適化マニュアルの ビルドした iOS プレイヤーのサイズ最適化 ガイドを見てください。

トラブルシューティング

  • Q: IL2CPP でコードを実行すると Mono に比べて遅いのはなぜでしょうか? A: コードのパフォーマンステストは Xcode を Release 設定にして、テストするようにしてください。問題が解決しない場合は、バグ報告をお願いします !
  • Q: 以下のエラーや、その類似のエラーが発生してコンパイルに失敗する Xcode プロジェクトを Unity が生成してしまいます。Method not found: 'Default constructor not found...ctor() of System.ComponentModel.Int64Converter' A: デシリアライザーとシリアライザーはよく、いくつかの型に対して .NET Reflection API のみから参照します。この場合、これらのメソッドやクラスまでもがプロジェクトからストリッピングされている可能性があります。マネージドコードストリッパーに ビルドした iOS プレイヤーのサイズ最適化 経由での指定や、あなたのスクリプトの一ヶ所に明示的な参照を行うダミーコードを記入することによる説明を行うことで、特定のクラス / メソッドは使用されているというヒントを与えることができます。
  • Q: Unity 他のエラーを伴ってコンパイルに失敗する Xcode プロジェクトを生成してしまいます。 A: すべてのプラグインが ARM64 と IL2CPP をサポートしているかを確認し、サポートしていた場合はプロジェクト(かスクリプト部分のみ)を添付してバグレポートを送信してください。ご協力ありがとうございます。
iOS 2D テクスチャ オーバーライド
Unity Remote