最初は意味が分かりませんでした・・・
どうも、壁です!
最近Unityエディタに脆弱性が発覚したことにより
リリースしているゲームアプリを再度安全な
Unityエディタでビルドし直して再度リリースする
必要が出てきました
これは大変だ…
んで、久しぶりにUnityエディタで開いてみて
ゲームできるかデバッグしてみたのですが
タイトルの通りadmobのインタースティシャル広告を
表示後にUnityのwaitForSecondsの処理を通ると
何もゲームが進まなくなってしまいました!
ここについて調べたことを記載していきます!
といってもgptさんに聞いただけなんですけどね
まずは原因分析
とりあえず動くつもりでデバッグしていたら
広告後表示後のゲーム画面で
突然何も操作ができなくなってしまったのです
全然意味が分からなかったので
まずはVSCodeのソース上で
ブレークポイントをいっぱい設置して
どこまで処理が動いているかを確認していきました!
そうするとなぜかコルーチン内の
yield return new WaitForSeconds
で処理が止まってしまって動かなくなってしまいました
ワーイ、ジャパニーズピーポー!!
と叫びたくなったのですが
グッと堪えてchat-GPTに聞いてみました
すると
インタースティシャル広告を表示時に
裏でTime.timeScale = 0に更新されるらしく
(そんなの知らねーってば)
その後自分でTime.timeScale = 1に更新しないと
yield return new WaitForSeconds
は時間が停止しているのでいつまで経っても
終わらないということでした
いやいや、それは…聞いてないよー
対処方法
勝手にTimeScaleを0にされるので
広告が閉じられた時に
TimeScaleを1にしてあげる必要があります
仮に以下のようにインタースティシャル広告が表示されるような
コードが以下とした時に
void ShowInterstitial()
{
if (interstitialAd != null && interstitialAd.CanShowAd())
{
interstitialAd.OnAdFullScreenContentClosed += HandleAdClosed;
interstitialAd.Show();
}
}
5行目でインタースティシャル広告が閉じられた時に
なにか関数を実行するようにします
んで以下のようにTimeScaleを1に戻してあげるわけです
void HandleAdClosd()
{
Time.timeScale = 1f;
}
3行目のようにしてあげればよいってことです!
修正後
gptさんの言われた通り修正してみたら
本当に動くようになりました!
いやー、これはブログ書くの終焉ですかね…
AIあれば必要ないやん!
ってことでまた次回!w
