admobのインタースティシャル広告を表示後にUnityのwaitForSecondsが動かなくなる件について

Unity

最初は意味が分かりませんでした・・・

どうも、壁です!

最近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

タイトルとURLをコピーしました