UnityでNuGetパッケージを使用してIL2CPPを使用した時の参照エラー対策

初めてUnityでNuGetパッケージを使用してみたのですが、

IL2CPPでビルドした場合のみでバグが発生してしまいました。

今回、解決までの四苦八苦をまとめておきます。

 

NuGetパッケージ導入方法

qiita.com

この記事を参考にNuGetパッケージを導入しました。

「Scropting Backend」の設定をIL2CPPではなく、Monoで

ビルドを行った際には何も問題なく動いていました。

 

エラー内容

公開前に、いざ64bitに対応させようと思いIL2CPPに切り替えてビルドした結果、

実機でデバッグした際に上手く動かない!

f:id:apuridasuo:20190926111653p:plain

図:実機ログのエラー内容


今回、私はNuGetパッケージから「Taglib」というパッケージを導入していました。

その中のクラスが見つからない。。。という参照エラーが発生していました。

 

対応内容

1. Projectの「Assets」フォルダ内に「link.xml」という名前のファイルを追加

※「Assets」フォルダ以下ならどこでもOKらしい・・・

2.「 link.xml 」に以下のコードを記入

<linker>
       <assembly fullname="DLLファイル名(拡張子を除く)" preserve="all"/>
</linker>

f:id:apuridasuo:20190926113111p:plain

図:今回のエラー対応を行ったlink.xmlファイル内容

対応は以上です。あとはいつも通りビルドしていただければ
参照エラーは直っています。

エラー原因

docs.unity3d.com

上記の参考サイトにも書いているのですが、

自分なりにかみ砕いた解釈をまとめると・・・(間違ってたらすみません)

IL2CPPでビルドすると、ユーザーが手動で追加したdllは削除される。

だから、「link.xml」で手動追加dllの削除・保持を指定する必要がある。

※.厳密には、手動追加かつGameObjectに設定したスプリクトファイルの

コードが呼び出していないクラスが削除される。と書いてましたが、

ちゃんと呼び出すようにコードを変更しても意味が無かったので

何をしても手動dllは削除される。という考えで対策することにしました。

 

最後に

今回出したアプリは、公開前に

「AppBundle」と今回の件で2つの初エラーが急に来たので

めちゃくちゃ泣きそうでした・・・

そんな直前に苦しめてくれたAndroidアプリ!

play.google.com

f:id:apuridasuo:20190926114912p:plain

通常の音楽プレーヤーに、

再生楽曲のテンポをあなたの走るテンポに合わせる!

という面白機能を合わせてみました。

皆さんぜひ、ダウンロードして色々文句言ってください!

個人製作でロクに宣伝もできないので入れてみました・・・