Unityで作成したAndroidアプリに、Admobの動画リワード広告を導入した時の話。
導入が終わり、無事に動画が再生されることを確認した。
しかし、動画再生を終了させ、音を鳴らそう(再生)としたら以下のようなエラーが出てアプリが落ちて再生できなかったのだ。
■エラー内容
/Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)
2019-09-09 19:20:19.031 12486-13490/jp.sample.title E/Unity: ExecutionEngineException: SIGILL
at UnityEngine.Resources.Load (System.String path) [0x00000] in :0
at SoundManager.PlaySE (SE_TYPE type, Boolean roop, Single pitch, Boolean Overlap) [0x00000] in :0
at ShopGUI.MovieEndEvent (Boolean yes) [0x00000] in
このようなエラーに悩んでいる人は、他にもいるのでは?
この記事では、解消方法を解説します。
現象発生手順
現象が発生したときの開発環境
・Unity2017.4.19
・Android Studio 3.5(UnityからAndroid Studio向けにエクスポートしてからStudioでビルドしている)
・Admob SDK
①UnityにAdmobをインストールする
②OnAdClosedのコールバック先を実装する(実装内容に音を鳴らす処理があること)
■補足・OnAdClosedの機能
OnAdClosedは、ユーザーが「閉じる」アイコンまたは「戻る」ボタンを使って
動画リワードを閉じたときに呼び出される。
③Admob SDK(Unity)の公式サイトを参考に、リワード動画を再生する処理を実装する
④実装したアプリを起動して、動画を再生する
⑤動画終了後、OnAdClosedがコールバックされることを確認する。
OnAdClosedの呼び出し先で音楽を鳴らすために呼び出した関数
AudioSource.PlayOneShot
⑥その結果、以下のようなエラーが出たのだ。
/Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)
2019-09-09 19:20:19.031 12486-13490/jp.sample.title E/Unity: ExecutionEngineException: SIGILL
at UnityEngine.Resources.Load (System.String path) [0x00000] in :0
at SoundManager.PlaySE (SE_TYPE type, Boolean roop, Single pitch, Boolean Overlap) [0x00000] in :0
at ShopGUI.MovieEndEvent (Boolean yes) [0x00000] in
ググった結果わかったことは、Admobから呼び出されたOnAdClosedと同じスレッドで音楽を再生しようとしてはいけないとのこと。音楽再生は、別スレッドでコードを書くように言われているが、次の方法で比較的簡単に解決しました。
対処方法
OnAdClosedの呼び出し先で、IEnumerator型の関数を呼び出し、IEnumerator内の処理で音を鳴らすようにします。
擬似コードを書くとこんな感じ。
main(){
//コールバック指定
OnAdClosed += CallbackOnAdClosed();
}
private void CallbackOnAdClosed(){
//ここで「AudioSource.PlayOneShot」を処理しないこと!
//エラーがでて再生できないため
//音楽を鳴らす処理をStartCoroutineで呼び出す
StartCoroutine(PlaySE());
}
IEnumerator void PlaySE(){
//念の為1フレーム飛ばす
yield return null;
AudioSource.PlayOneShot();
}
このような対処をすることによって、解決するのでした。
Admobの実装は、一筋縄にいかないですな〜。
\IT未経験者からのサポートあり!転職サービス3選!!/
サービス名 | |||
---|---|---|---|
未経験 | 未経験OK | 未経験の転職専用 | 経験者向け |
公開の求人数 | ITエンジニア全体で1万件以上 ITエンジニア未経験で600件以上 |
未公開 | 5,000件以上 |
利用対象 | 全職種 | IT特化 | IT特化 |
特徴 | ✓誰もが知る転職サービス ✓経歴を登録しておくとオファーが来る |
✓企業担当者と条件交渉 ✓スキルの身につく企業を紹介 |
✓IT専門のエージェントが対応 ✓転職成功すると年収200万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |