読者です 読者をやめる 読者になる 読者になる

Unityで作ったアプリのAndroid版で set_interactable can only be called in main thread などというエラーが出て困った話

Unityで作ったアプリのAndroid版で set_interactable can only be called in main thread などというエラーが出て困っておりました。

メインスレッド以外でset_interactable呼ぶなや!ってことみたいです。

どうもAdMobのinterstitialがCloseした時のCallbackで色々やってたのが良くなかったみたいです。
具体的には、以下のようなコードのCloseCallbackの中身が良くなかったです。

interstitial = new InterstitialAd (ad_id);
request = new AdRequest.Builder ().Build ();
interstitial.LoadAd(request);
interstitial.OnAdClosed += CloseCallback;

CloseCallbackではフラグを立てるだけにして、Updateの中でflagを監視し、flagが立ったらやりたいことをする。っというようにすることで解決できました。

プラグインの用意するcallbackはメインスレッドで呼ばれない可能性があるので、中身に詳しくなければ複雑な処理はしないほうが良いなと思いました。