質問編集履歴
4
アセットや環境を詳しく追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -17,16 +17,13 @@
|
|
17
17
|
- シーンを移動する。
|
18
18
|
※Teratailの最大文字数制限を超過してしまうため、一部削減しています。
|
19
19
|
```
|
20
|
-
|
20
|
+
I Unity : onResume
|
21
21
|
...
|
22
|
+
I Unity : 広告を初期化することを試みます。
|
22
23
|
...
|
23
|
-
|
24
|
+
I Unity : 広告の表示条件が満たされていません。再初期化します。
|
24
25
|
...
|
25
|
-
08-21 18:59:31.662 9854 9870 I Unity : 広告の表示条件が満たされていません。再初期化します。
|
26
|
-
08-21 18:59:31.662 9854 9870 I Unity : UnityEngine.StackTraceUtility:ExtractStackTrace ()
|
27
|
-
...
|
28
|
-
|
26
|
+
I Unity : 広告が閉じられました。シーン遷移を続行します。
|
29
|
-
...
|
30
27
|
```
|
31
28
|
特に初期化の際のエラーといったものは見られませんでした。
|
32
29
|
|
@@ -48,12 +45,15 @@
|
|
48
45
|
### 補足情報(FW/ツールのバージョンなど)
|
49
46
|
- Unity 2020.3.4f1
|
50
47
|
- Advertisement Legacy 4.4.2
|
48
|
+
~~ 追記 ~~
|
49
|
+
- Windows10 22H2
|
51
|
-
I
|
50
|
+
- 実機→Android9.0 PIE
|
52
|
-
|
53
|
-
|
51
|
+
- adb: 1.0.41
|
52
|
+
- APILevel: 26
|
53
|
+
-
|
54
54
|
|
55
55
|
私は初心者であるため色々なツッコミどころがあるかと思われますが、どうかご伝授お願いします...。
|
56
|
-
何か必要な情報がありましたら、ご遠慮なく言ってください。
|
56
|
+
何か必要な情報がありましたら、ご遠慮なく言ってください。
|
57
57
|
### 追記 2
|
58
58
|
@blanket 様からのご伝授により、AdsInitializerに以下のように改善しました。
|
59
59
|
```cs
|
@@ -333,3 +333,9 @@
|
|
333
333
|
- テストモードが原因ではない
|
334
334
|
- apkには異常はない?
|
335
335
|
ということもわかりました。
|
336
|
+
|
337
|
+
# 追記3
|
338
|
+
アセットは以下のようなものを入れています。(パッケージマネージャーのプロジェクト内より)
|
339
|
+
![assets](https://ddjkaamml8q8x.cloudfront.net/questions/2024-08-30/cc8725be-9de4-4f1b-8220-56f8d283aa21.png)
|
340
|
+
それに加え、PlayFabSDKもあります。TextMeshProも。それ以外は特に入れていません。
|
341
|
+
|
3
コードの追記などをしました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -34,20 +34,8 @@
|
|
34
34
|
~~以下、関連するソースコードと変数などの情報を記述します。~~
|
35
35
|
追記の欄をご確認ください。旧コードが必要な場合はコメントしていただければと思います。
|
36
36
|
- 広告マネージャー(AdsInitializer.cs) ※Initalizerと書かれてはいますが表示処理関数も含まれています。
|
37
|
-
また、GameManager(シーン推移)からは、ShowUnityAds関数は以下のように呼ばれます。
|
37
|
+
~~また、GameManager(シーン推移)からは、ShowUnityAds関数は以下のように呼ばれます。~~
|
38
|
-
```cs
|
39
|
-
...
|
40
|
-
if (Random.value < Paramaters.Entity.adDisplayChance)
|
41
|
-
{
|
42
|
-
|
38
|
+
追記の欄をご覧ください。
|
43
|
-
yield return StartCoroutine(AdsInitializer.Instance.ShowUnityAds(() =>
|
44
|
-
{
|
45
|
-
Debug.Log("広告が閉じられました。シーン遷移を続行します。");
|
46
|
-
}));
|
47
|
-
AudioListener.volume = 1f;
|
48
|
-
}
|
49
|
-
...
|
50
|
-
```
|
51
39
|
- Paramaters.Entity.adDisplayChanceはfloat型であり1fです。
|
52
40
|
|
53
41
|
### 試したこと
|
@@ -56,7 +44,6 @@
|
|
56
44
|
- AdsのSDKのVerを下げて実装→しようとしたがQiitaに「動かなくなる」という趣旨のことが書かれてあったため却下
|
57
45
|
- Googleを調べる→X
|
58
46
|
- AdsManagerのインスタンスがないのかと思われましたが存在確認はしっかりと取れました。
|
59
|
-
-
|
60
47
|
|
61
48
|
### 補足情報(FW/ツールのバージョンなど)
|
62
49
|
- Unity 2020.3.4f1
|
@@ -67,17 +54,13 @@
|
|
67
54
|
|
68
55
|
私は初心者であるため色々なツッコミどころがあるかと思われますが、どうかご伝授お願いします...。
|
69
56
|
何か必要な情報がありましたら、ご遠慮なく言ってください。お願いします...
|
70
|
-
### 追記
|
57
|
+
### 追記 2
|
71
58
|
@blanket 様からのご伝授により、AdsInitializerに以下のように改善しました。
|
72
59
|
```cs
|
73
60
|
using System.Collections;
|
74
|
-
using System.Collections.Generic;
|
75
61
|
using UnityEngine;
|
76
62
|
using UnityEngine.UI;
|
77
63
|
using UnityEngine.Advertisements;
|
78
|
-
#if UNITY_EDITOR
|
79
|
-
using UnityEditor.Advertisements;
|
80
|
-
#endif
|
81
64
|
|
82
65
|
public class AdsInitializer : MonoBehaviour, IUnityAdsInitializationListener, IUnityAdsLoadListener, IUnityAdsShowListener
|
83
66
|
{
|
@@ -89,6 +72,8 @@
|
|
89
72
|
private System.Action onAdClosed;
|
90
73
|
public static AdsInitializer Instance = null;
|
91
74
|
private bool isAdReady;
|
75
|
+
private int _retryAttempts = 0; // 再試行回数
|
76
|
+
|
92
77
|
|
93
78
|
private void Awake()
|
94
79
|
{
|
@@ -102,103 +87,120 @@
|
|
102
87
|
Destroy(gameObject);
|
103
88
|
}
|
104
89
|
isAdReady = false;
|
90
|
+
}
|
91
|
+
|
92
|
+
private void Start()
|
93
|
+
{
|
94
|
+
Debug.Log("Game IDは" + _gameId + "に初期化されています。");
|
95
|
+
Debug.Log((Instance == null ? "Instanceがnullです。" : "Instanceがnullではありません。"));
|
96
|
+
|
97
|
+
if (!Advertisement.isInitialized && Advertisement.isSupported)
|
98
|
+
{
|
99
|
+
Debug.Log("広告を初期化することを試みます。");
|
100
|
+
Invoke(nameof(InitializeAds), 2f);
|
101
|
+
}
|
102
|
+
else if (Advertisement.isInitialized)
|
103
|
+
{
|
104
|
+
Debug.Log("広告はすでに初期化されています。");
|
105
|
+
OnInitializationComplete();
|
106
|
+
}
|
107
|
+
else
|
108
|
+
{
|
109
|
+
Debug.LogWarning("広告の初期化またはサポートがありません。");
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
|
114
|
+
private void InitializeAds()
|
115
|
+
{
|
105
116
|
#if UNITY_IOS
|
106
|
-
_gameId = "
|
117
|
+
_gameId = "5678792";
|
107
118
|
_interstitialAdPracementId = "Interstitial_iOS";
|
108
119
|
_rewardAdPracementId = "Rewarded_iOS";
|
109
120
|
_bannerAdPracementId = "Banner_iOS";
|
110
121
|
#elif UNITY_ANDROID
|
111
|
-
_gameId = "
|
122
|
+
_gameId = "5678793";
|
112
|
-
_interstitialAdPracementId = "Interstitial_Android";
|
123
|
+
_interstitialAdPracementId = "Interstitial_Android";
|
113
|
-
_rewardAdPracementId = "Rewarded_Android";
|
124
|
+
_rewardAdPracementId = "Rewarded_Android";
|
114
|
-
_bannerAdPracementId = "Banner_Android";
|
125
|
+
_bannerAdPracementId = "Banner_Android";
|
115
126
|
#else
|
116
|
-
_gameId = "
|
127
|
+
_gameId = "5678793";
|
117
128
|
_interstitialAdPracementId = "Interstitial_Android";
|
118
129
|
_rewardAdPracementId = "Rewarded_Android";
|
119
130
|
_bannerAdPracementId = "Banner_Android";
|
120
131
|
#endif
|
121
|
-
|
132
|
+
|
122
|
-
|
123
|
-
private void Start()
|
124
|
-
{
|
125
|
-
Debug.Log("Game IDは" + _gameId + "に初期化されています。");
|
126
|
-
|
133
|
+
// https://teratail.com/questions/gz01z3aeeplu99#reply-idhv4lq3k7eujv これをみてくれ
|
127
134
|
|
128
135
|
if (!Advertisement.isInitialized && Advertisement.isSupported)
|
129
136
|
{
|
137
|
+
Advertisement.Initialize("5678793", true, this);
|
130
|
-
Debug.Log("広告を
|
138
|
+
Debug.Log("広告を表示しました。");
|
131
|
-
InitializeAds();
|
132
|
-
|
133
|
-
}
|
134
|
-
else if (Advertisement.isInitialized)
|
135
|
-
{
|
136
|
-
Debug.Log("広告はすでに初期化されています。");
|
137
|
-
OnInitializationComplete();
|
138
139
|
}
|
139
140
|
else
|
140
141
|
{
|
141
|
-
Debug.LogWarning("広告の初期化またはサポートがありません。");
|
142
|
-
}
|
143
|
-
|
144
|
-
}
|
145
|
-
|
146
|
-
|
147
|
-
private void InitializeAds()
|
148
|
-
{
|
149
|
-
if (!Advertisement.isInitialized && Advertisement.isSupported)
|
150
|
-
{
|
151
|
-
Advertisement.Initialize(_gameId, true, Instance);
|
152
|
-
}
|
153
|
-
else
|
154
|
-
{
|
155
142
|
Debug.LogWarning("Unity Ads is not supported or already initialized.");
|
156
143
|
}
|
157
144
|
}
|
158
145
|
|
159
146
|
public IEnumerator ShowUnityAds(System.Action onAdClosedCallback)
|
160
147
|
{
|
161
|
-
if (Instance == null)
|
162
|
-
{
|
163
|
-
Debug.LogError("広告マネージャーのインスタンスがnullです。");
|
164
|
-
}
|
165
|
-
|
166
148
|
bool adClosed = false;
|
167
149
|
onAdClosed = () => adClosed = true;
|
168
150
|
|
169
|
-
Debug.Log("広告はサポート" + (Advertisement.isSupported ? "されています" : "されていません"));
|
170
|
-
Debug.Log("isAdReadyは" + (isAdReady ? "true" : "false"));
|
171
|
-
Debug.Log("初期化は" + (Advertisement.isInitialized ? "されています" : "されていません"));
|
172
|
-
|
173
|
-
if (Ad
|
151
|
+
if (/*isAdReady*/true)
|
174
|
-
{
|
152
|
+
{
|
175
|
-
if (
|
153
|
+
if (Advertisement.isInitialized && /* isAdReady */ true)
|
176
154
|
{
|
177
|
-
Debug.Log("広告を
|
155
|
+
Debug.Log("広告を表示します。");
|
178
|
-
Advertisement.
|
156
|
+
Advertisement.Show(_interstitialAdPracementId, this);
|
179
|
-
|
180
|
-
// 広告が準備完了するまで待機
|
181
|
-
while (!isAdReady)
|
182
|
-
{
|
183
|
-
yield return null;
|
184
|
-
}
|
185
157
|
}
|
186
|
-
|
158
|
+
else
|
159
|
+
{
|
187
|
-
Debug.Log("広告
|
160
|
+
Debug.LogError("広告が初期化されていないか、ロードされていません。");
|
188
|
-
|
161
|
+
}
|
189
|
-
|
162
|
+
|
190
|
-
// 広告が閉じるまで待機
|
163
|
+
// 広告が閉じられるまで待機
|
191
164
|
while (!adClosed)
|
192
165
|
{
|
193
166
|
yield return null;
|
194
167
|
}
|
195
168
|
|
169
|
+
Debug.Log("広告が閉じられました。シーン遷移を続行します。");
|
196
170
|
onAdClosedCallback?.Invoke();
|
197
171
|
}
|
198
172
|
else
|
199
173
|
{
|
200
|
-
Debug.Log("広告の
|
174
|
+
Debug.Log("広告の準備ができていません。");
|
175
|
+
onAdClosedCallback?.Invoke();
|
176
|
+
}
|
177
|
+
LoadAd();
|
178
|
+
yield return new WaitForSeconds(1);
|
179
|
+
}
|
180
|
+
|
181
|
+
public void TestLog()
|
182
|
+
{
|
183
|
+
Debug.Log("テストです。");
|
184
|
+
}
|
185
|
+
|
186
|
+
private IEnumerator WaitForAdToClose(System.Action onAdClosedCallback)
|
187
|
+
{
|
188
|
+
bool adClosed = false;
|
201
|
-
|
189
|
+
onAdClosedCallback += () => adClosed = true;
|
190
|
+
|
191
|
+
// タイムアウトの設定(例えば10秒)
|
192
|
+
float timeout = 10f;
|
193
|
+
float elapsedTime = 0f;
|
194
|
+
|
195
|
+
while (!adClosed && elapsedTime < timeout)
|
196
|
+
{
|
197
|
+
elapsedTime += Time.deltaTime;
|
198
|
+
yield return null;
|
199
|
+
}
|
200
|
+
|
201
|
+
if (!adClosed)
|
202
|
+
{
|
203
|
+
Debug.LogWarning("広告は時間内に閉じず、元の機能を再開しました。");
|
202
204
|
onAdClosedCallback?.Invoke();
|
203
205
|
}
|
204
206
|
}
|
@@ -207,13 +209,20 @@
|
|
207
209
|
{
|
208
210
|
Debug.Log("広告の初期化が完了しました。");
|
209
211
|
// 初期化が完了したので、広告をロード
|
210
|
-
isAdReady = false; // 初期化後にロードが行われるので、isAdReadyをリセット
|
211
|
-
|
212
|
+
LoadAd();
|
212
213
|
}
|
213
214
|
|
214
215
|
public void OnInitializationFailed(UnityAdsInitializationError error, string message)
|
215
216
|
{
|
216
217
|
Debug.LogError($"Initialization failed: {error} - {message}");
|
218
|
+
}
|
219
|
+
|
220
|
+
private void LoadAd()
|
221
|
+
{
|
222
|
+
if (!isAdReady)
|
223
|
+
{
|
224
|
+
Advertisement.Load(_interstitialAdPracementId, this);
|
225
|
+
}
|
217
226
|
}
|
218
227
|
|
219
228
|
public void OnUnityAdsAdLoaded(string placementId)
|
@@ -222,48 +231,65 @@
|
|
222
231
|
if (placementId == _interstitialAdPracementId)
|
223
232
|
{
|
224
233
|
isAdReady = true;
|
234
|
+
_retryAttempts = 0; // リセット
|
225
|
-
}
|
235
|
+
}
|
226
|
-
}
|
236
|
+
}
|
227
|
-
|
228
237
|
|
229
238
|
public void OnUnityAdsFailedToLoad(string placementId, UnityAdsLoadError error, string message)
|
230
239
|
{
|
240
|
+
Debug.LogError($"Failed to load Ad: {placementId} - {error} - {message}");
|
241
|
+
isAdReady = false;
|
242
|
+
|
243
|
+
if (_retryAttempts < 3) // 最大3回再試行
|
244
|
+
{
|
245
|
+
_retryAttempts++;
|
246
|
+
StartCoroutine(RetryLoadAd());
|
247
|
+
}
|
248
|
+
}
|
249
|
+
|
250
|
+
public void OnUnityAdsShowFailure(string placementId, UnityAdsShowError error, string message)
|
251
|
+
{
|
231
|
-
Debug.LogError($"Error
|
252
|
+
Debug.LogError($"Error showing Ad Unit {placementId}: {error} - {message}");
|
253
|
+
isAdReady = false;
|
254
|
+
|
255
|
+
if (_retryAttempts < 3)
|
256
|
+
{
|
257
|
+
_retryAttempts++;
|
258
|
+
// StartCoroutine(RetryShowAd());
|
259
|
+
InitializeAds();
|
260
|
+
}
|
261
|
+
}
|
262
|
+
|
263
|
+
public IEnumerator RetryShowAd()
|
264
|
+
{
|
265
|
+
yield return new WaitForSeconds(2f); // 2秒後に再試行
|
266
|
+
ShowUnityAds(onAdClosed); // 再試行する
|
267
|
+
}
|
268
|
+
|
269
|
+
private IEnumerator RetryLoadAd()
|
270
|
+
{
|
271
|
+
yield return new WaitForSeconds(2f); // 2秒後に再試行
|
272
|
+
LoadAd();
|
273
|
+
}
|
274
|
+
|
275
|
+
public void OnUnityAdsShowStart(string placementId)
|
276
|
+
{
|
277
|
+
Debug.Log("広告表示開始");
|
278
|
+
}
|
279
|
+
|
280
|
+
public void OnUnityAdsShowClick(string placementId)
|
281
|
+
{
|
282
|
+
Debug.Log("広告クリック");
|
283
|
+
}
|
284
|
+
|
285
|
+
public void OnUnityAdsShowComplete(string placementId, UnityAdsShowCompletionState showCompletionState)
|
286
|
+
{
|
287
|
+
Debug.Log("広告表示完了");
|
232
288
|
isAdReady = false;
|
233
289
|
onAdClosed?.Invoke();
|
234
|
-
}
|
235
|
-
|
236
|
-
private IEnumerator RetryLoadAd()
|
237
|
-
{
|
238
|
-
yield return new WaitForSeconds(5); // 5秒後に再試行
|
239
|
-
Advertisement.Load(_interstitialAdPracementId, this);
|
240
|
-
}
|
241
|
-
|
242
|
-
public void OnUnityAdsShowFailure(string placementId, UnityAdsShowError error, string message)
|
243
|
-
{
|
244
|
-
Debug.LogError($"Error showing Ad Unit {placementId}: {error} - {message}");
|
245
|
-
onAdClosed?.Invoke();
|
246
|
-
}
|
247
|
-
|
248
|
-
public void OnUnityAdsShowStart(string placementId)
|
249
|
-
{
|
250
|
-
Debug.Log("広告表示開始");
|
251
|
-
}
|
252
|
-
|
253
|
-
public void OnUnityAdsShowClick(string placementId)
|
254
|
-
{
|
255
|
-
Debug.Log("広告クリック");
|
256
|
-
}
|
257
|
-
|
258
|
-
public void OnUnityAdsShowComplete(string placementId, UnityAdsShowCompletionState showCompletionState)
|
259
|
-
{
|
260
|
-
Debug.Log("広告表示完了");
|
261
|
-
onAdClosed?.Invoke();
|
262
|
-
// 広告
|
290
|
+
LoadAd(); // 次の広告をロード
|
263
|
-
Advertisement.Load(_interstitialAdPracementId, this);
|
264
291
|
}
|
265
292
|
}
|
266
|
-
|
267
293
|
```
|
268
294
|
そして、呼び出す側のスクリプトにも少々改善を加えました。
|
269
295
|
```cs
|
@@ -279,19 +305,8 @@
|
|
279
305
|
|
280
306
|
AudioListener.volume = 1f;
|
281
307
|
}
|
282
|
-
if (!isMoving)
|
283
|
-
{
|
284
|
-
|
308
|
+
yield break;
|
285
|
-
fade.enabled = true;
|
286
|
-
fade.color = new Color(0f, 0f, 0f, 0f);
|
287
|
-
for (int i = 0; i < 10; i++)
|
288
|
-
|
309
|
+
...
|
289
|
-
fade.color = new Color(0f, 0f, 0f, i * 0.1f);
|
290
|
-
yield return new WaitForSeconds(0.1f);
|
291
|
-
}
|
292
|
-
SceneManager.LoadScene(scenename);
|
293
|
-
StartCoroutine(FadeOut());
|
294
|
-
}
|
295
310
|
```
|
296
311
|
そのログがこちらです。一部は削減しています。
|
297
312
|
```
|
@@ -311,4 +326,10 @@
|
|
311
326
|
- 表示開始~終了までの一連の長れが実行されている
|
312
327
|
- サポートはされている
|
313
328
|
- 初期化がされていない
|
329
|
+
- GameIDやインタースティシャル広告のユニットが誤っているわけではない
|
330
|
+
また、
|
331
|
+
ということがわかりました。また、 @blanket 様のアドバイスや自分の判断による修正により
|
332
|
+
- 初期化が原因なのは確実、できていない
|
333
|
+
- テストモードが原因ではない
|
334
|
+
- apkには異常はない?
|
314
|
-
ということ
|
335
|
+
ということもわかりました。
|
2
少々改善
test
CHANGED
File without changes
|
test
CHANGED
@@ -103,17 +103,17 @@
|
|
103
103
|
}
|
104
104
|
isAdReady = false;
|
105
105
|
#if UNITY_IOS
|
106
|
-
_gameId = "
|
106
|
+
_gameId = "XXXXXXX";
|
107
107
|
_interstitialAdPracementId = "Interstitial_iOS";
|
108
108
|
_rewardAdPracementId = "Rewarded_iOS";
|
109
109
|
_bannerAdPracementId = "Banner_iOS";
|
110
110
|
#elif UNITY_ANDROID
|
111
|
-
_gameId = "
|
111
|
+
_gameId = "XXXXXXX";
|
112
112
|
_interstitialAdPracementId = "Interstitial_Android";
|
113
113
|
_rewardAdPracementId = "Rewarded_Android";
|
114
114
|
_bannerAdPracementId = "Banner_Android";
|
115
115
|
#else
|
116
|
-
_gameId = "
|
116
|
+
_gameId = "XXXXXXX";
|
117
117
|
_interstitialAdPracementId = "Interstitial_Android";
|
118
118
|
_rewardAdPracementId = "Rewarded_Android";
|
119
119
|
_bannerAdPracementId = "Banner_Android";
|
1
修正案をいただいたため追記をしました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -19,196 +19,21 @@
|
|
19
19
|
```
|
20
20
|
08-21 18:58:51.167 9854 9854 I Unity : onResume
|
21
21
|
...
|
22
|
-
08-21 18:58:57.999 9854 9870 I Unity : UnityEngine.StackTraceUtility:ExtractStackTrace () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/StackTrace.cs:37)
|
23
|
-
08-21 18:58:57.999 9854 9870 I Unity : UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[])
|
24
|
-
08-21 18:58:57.999 9854 9870 I Unity : UnityEngine.Logger:Log (UnityEngine.LogType,object)
|
25
|
-
...
|
26
|
-
08-21 18:58:57.999 9854 9870 I Unity :
|
27
|
-
08-21 18:58:58.078 9854 9870 I Unity : THIS: x<sup>2</sup>=0
|
28
|
-
...
|
29
|
-
(UnityEngine.LogType,UnityEngine.Object,string,object[])
|
30
|
-
08-21 18:58:58.078 9854 9870 I Unity : UnityEngine.Logger:Log (UnityEngine.LogType,object)
|
31
|
-
08-21 18:58:58.078 9854 9870 I Unity : UnityEngine.Debug:Log (object)
|
32
|
-
08-21 18:58:58.078 9854 9870 I Unity : Factor:<ViewFormula>g__GenerateEquation|11_0 (int,int,int) (at D:/UnityProject/Swap Factor/Assets/Scripts/GamePlay/Factor.cs:39)
|
33
|
-
08-21 18:58:58.078 9854 9870 I Unity : Factor:ViewFormula (int) (at D:/UnityProject/Swap Factor/Assets/Scripts/GamePlay/Factor.cs:88)
|
34
22
|
...
|
35
23
|
08-21 18:58:58.220 9854 9870 I Unity : 広告を初期化することを試みます。
|
36
24
|
...
|
37
|
-
08-21 18:58:58.220 9854 9870 I Unity : UnityEngine.Debug:Log (object)
|
38
|
-
08-21 18:58:58.220 9854 9870 I Unity : AdsInitializer:Start () (at D:/UnityProject/Swap Factor/Assets/Scripts/Ad/AdsInitializer.cs:50)
|
39
|
-
08-21 18:58:58.220 9854 9870 I Unity :
|
40
|
-
08-21 18:58:58.220 9854 9870 I Unity : (Filename: /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/StackTrace.cs Line: 37)
|
41
|
-
08-21 18:58:58.220 9854 9870 I Unity :
|
42
25
|
08-21 18:59:31.662 9854 9870 I Unity : 広告の表示条件が満たされていません。再初期化します。
|
43
|
-
08-21 18:59:31.662 9854 9870 I Unity : UnityEngine.StackTraceUtility:ExtractStackTrace () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/StackTrace.cs:37)
|
44
|
-
08-21 18:59:31.662 9854 9870 I Unity : UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[])
|
45
|
-
08-21 18:59:31.662 9854 9870 I Unity : UnityEngine.
|
26
|
+
08-21 18:59:31.662 9854 9870 I Unity : UnityEngine.StackTraceUtility:ExtractStackTrace ()
|
46
27
|
...
|
47
28
|
08-21 18:59:31.687 9854 9870 I Unity : 広告が閉じられました。シーン遷移を続行します。
|
48
|
-
08-21 18:59:31.687 9854 9870 I Unity : UnityEngine.StackTraceUtility:ExtractStackTrace () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/StackTrace.cs:37)
|
49
|
-
08-21 18:59:31.687 9854 9870 I Unity : UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[])
|
50
|
-
08-21 18:59:31.687 9854 9870 I Unity : UnityEngine.Logger:Log (UnityEngine.LogType,object)
|
51
29
|
...
|
52
30
|
```
|
53
31
|
特に初期化の際のエラーといったものは見られませんでした。
|
54
32
|
|
55
33
|
### 該当のソースコード
|
56
|
-
以下、関連するソースコードと変数などの情報を記述します。
|
34
|
+
~~以下、関連するソースコードと変数などの情報を記述します。~~
|
35
|
+
追記の欄をご確認ください。旧コードが必要な場合はコメントしていただければと思います。
|
57
36
|
- 広告マネージャー(AdsInitializer.cs) ※Initalizerと書かれてはいますが表示処理関数も含まれています。
|
58
|
-
```cs
|
59
|
-
using System.Collections;
|
60
|
-
using System.Collections.Generic;
|
61
|
-
using UnityEngine;
|
62
|
-
using UnityEngine.Advertisements;
|
63
|
-
#if UNITY_EDITOR
|
64
|
-
using UnityEditor.Advertisements;
|
65
|
-
#endif
|
66
|
-
|
67
|
-
public class AdsInitializer : MonoBehaviour, IUnityAdsInitializationListener, IUnityAdsLoadListener, IUnityAdsShowListener
|
68
|
-
{
|
69
|
-
private string _gameId;
|
70
|
-
private string _interstitialAdPracementId;
|
71
|
-
private string _rewardAdPracementId;
|
72
|
-
private string _bannerAdPracementId;
|
73
|
-
|
74
|
-
private System.Action onAdClosed;
|
75
|
-
public static AdsInitializer Instance = null;
|
76
|
-
private bool isAdReady;
|
77
|
-
|
78
|
-
private void Awake()
|
79
|
-
{
|
80
|
-
if (Instance == null)
|
81
|
-
{
|
82
|
-
Instance = this;
|
83
|
-
DontDestroyOnLoad(gameObject);
|
84
|
-
}
|
85
|
-
else
|
86
|
-
{
|
87
|
-
Destroy(gameObject);
|
88
|
-
}
|
89
|
-
isAdReady = false;
|
90
|
-
#if UNITY_IOS
|
91
|
-
_gameId = "XXXXXXX";
|
92
|
-
_interstitialAdPracementId = "Interstitial_iOS";
|
93
|
-
_rewardAdPracementId = "Rewarded_iOS";
|
94
|
-
_bannerAdPracementId = "Banner_iOS";
|
95
|
-
#elif UNITY_ANDROID
|
96
|
-
_gameId = "XXXXXXX";
|
97
|
-
_interstitialAdPracementId = "Interstitial_Android";
|
98
|
-
_rewardAdPracementId = "Rewarded_Android";
|
99
|
-
_bannerAdPracementId = "Banner_Android";
|
100
|
-
#else
|
101
|
-
_gameId = "XXXXXXX";
|
102
|
-
_interstitialAdPracementId = "Interstitial_Android";
|
103
|
-
_rewardAdPracementId = "Rewarded_Android";
|
104
|
-
_bannerAdPracementId = "Banner_Android";
|
105
|
-
#endif
|
106
|
-
}
|
107
|
-
|
108
|
-
private void Start()
|
109
|
-
{
|
110
|
-
if (!Advertisement.isInitialized && Advertisement.isSupported)
|
111
|
-
{
|
112
|
-
Debug.Log("広告を初期化することを試みます。");
|
113
|
-
Advertisement.Initialize(_gameId, true, this);
|
114
|
-
}
|
115
|
-
else
|
116
|
-
{
|
117
|
-
Debug.LogWarning("広告の初期化またはサポートがありません。");
|
118
|
-
}
|
119
|
-
}
|
120
|
-
|
121
|
-
public IEnumerator ShowUnityAds(System.Action onAdClosedCallback)
|
122
|
-
{
|
123
|
-
bool adClosed = false;
|
124
|
-
onAdClosed = () => adClosed = true;
|
125
|
-
|
126
|
-
if (Advertisement.isInitialized && Advertisement.isSupported)
|
127
|
-
{
|
128
|
-
if (!isAdReady)
|
129
|
-
{
|
130
|
-
Debug.Log("広告をロードしています...");
|
131
|
-
Advertisement.Load(_interstitialAdPracementId, this);
|
132
|
-
|
133
|
-
// 広告が準備完了するまで待機
|
134
|
-
while (!isAdReady)
|
135
|
-
{
|
136
|
-
yield return null;
|
137
|
-
}
|
138
|
-
}
|
139
|
-
|
140
|
-
Debug.Log("広告を表示します。");
|
141
|
-
Advertisement.Show(_interstitialAdPracementId, this);
|
142
|
-
|
143
|
-
// 広告が閉じるまで待機
|
144
|
-
while (!adClosed)
|
145
|
-
{
|
146
|
-
yield return null;
|
147
|
-
}
|
148
|
-
|
149
|
-
onAdClosedCallback?.Invoke();
|
150
|
-
}
|
151
|
-
else
|
152
|
-
{
|
153
|
-
Debug.Log("広告の表示条件が満たされていません。再初期化します。"); // これが実行されます。
|
154
|
-
Advertisement.Initialize(_gameId, true, this);
|
155
|
-
onAdClosedCallback?.Invoke();
|
156
|
-
}
|
157
|
-
}
|
158
|
-
|
159
|
-
public void OnInitializationComplete()
|
160
|
-
{
|
161
|
-
Debug.Log("広告の初期化が完了しました。"); // これは表示されませんでした。
|
162
|
-
// 初期化が完了したので、広告をロード
|
163
|
-
Advertisement.Load(_interstitialAdPracementId, this);
|
164
|
-
}
|
165
|
-
|
166
|
-
public void OnInitializationFailed(UnityAdsInitializationError error, string message)
|
167
|
-
{
|
168
|
-
Debug.LogError($"Initialization failed: {error} - {message}"); // これすらも表示されませんでした。
|
169
|
-
}
|
170
|
-
|
171
|
-
public void OnUnityAdsAdLoaded(string placementId)
|
172
|
-
{
|
173
|
-
Debug.Log($"広告ユニット {placementId} がロードされました。");
|
174
|
-
if (placementId == _interstitialAdPracementId)
|
175
|
-
{
|
176
|
-
isAdReady = true;
|
177
|
-
}
|
178
|
-
}
|
179
|
-
|
180
|
-
public void OnUnityAdsFailedToLoad(string placementId, UnityAdsLoadError error, string message)
|
181
|
-
{
|
182
|
-
Debug.LogError($"Error loading Ad Unit: {placementId} - {error} - {message}");
|
183
|
-
isAdReady = false;
|
184
|
-
onAdClosed?.Invoke();
|
185
|
-
}
|
186
|
-
|
187
|
-
public void OnUnityAdsShowFailure(string placementId, UnityAdsShowError error, string message)
|
188
|
-
{
|
189
|
-
Debug.LogError($"Error showing Ad Unit {placementId}: {error} - {message}");
|
190
|
-
onAdClosed?.Invoke();
|
191
|
-
}
|
192
|
-
|
193
|
-
public void OnUnityAdsShowStart(string placementId)
|
194
|
-
{
|
195
|
-
Debug.Log("広告表示開始");
|
196
|
-
}
|
197
|
-
|
198
|
-
public void OnUnityAdsShowClick(string placementId)
|
199
|
-
{
|
200
|
-
Debug.Log("広告クリック");
|
201
|
-
}
|
202
|
-
|
203
|
-
public void OnUnityAdsShowComplete(string placementId, UnityAdsShowCompletionState showCompletionState)
|
204
|
-
{
|
205
|
-
Debug.Log("広告表示完了");
|
206
|
-
onAdClosed?.Invoke();
|
207
|
-
// 広告表示後に再度ロード
|
208
|
-
Advertisement.Load(_interstitialAdPracementId, this);
|
209
|
-
}
|
210
|
-
}
|
211
|
-
```
|
212
37
|
また、GameManager(シーン推移)からは、ShowUnityAds関数は以下のように呼ばれます。
|
213
38
|
```cs
|
214
39
|
...
|
@@ -242,3 +67,248 @@
|
|
242
67
|
|
243
68
|
私は初心者であるため色々なツッコミどころがあるかと思われますが、どうかご伝授お願いします...。
|
244
69
|
何か必要な情報がありましたら、ご遠慮なく言ってください。お願いします...
|
70
|
+
### 追記 1
|
71
|
+
@blanket 様からのご伝授により、AdsInitializerに以下のように改善しました。
|
72
|
+
```cs
|
73
|
+
using System.Collections;
|
74
|
+
using System.Collections.Generic;
|
75
|
+
using UnityEngine;
|
76
|
+
using UnityEngine.UI;
|
77
|
+
using UnityEngine.Advertisements;
|
78
|
+
#if UNITY_EDITOR
|
79
|
+
using UnityEditor.Advertisements;
|
80
|
+
#endif
|
81
|
+
|
82
|
+
public class AdsInitializer : MonoBehaviour, IUnityAdsInitializationListener, IUnityAdsLoadListener, IUnityAdsShowListener
|
83
|
+
{
|
84
|
+
private string _gameId;
|
85
|
+
private string _interstitialAdPracementId;
|
86
|
+
private string _rewardAdPracementId;
|
87
|
+
private string _bannerAdPracementId;
|
88
|
+
|
89
|
+
private System.Action onAdClosed;
|
90
|
+
public static AdsInitializer Instance = null;
|
91
|
+
private bool isAdReady;
|
92
|
+
|
93
|
+
private void Awake()
|
94
|
+
{
|
95
|
+
if (Instance == null)
|
96
|
+
{
|
97
|
+
Instance = this;
|
98
|
+
DontDestroyOnLoad(gameObject);
|
99
|
+
}
|
100
|
+
else
|
101
|
+
{
|
102
|
+
Destroy(gameObject);
|
103
|
+
}
|
104
|
+
isAdReady = false;
|
105
|
+
#if UNITY_IOS
|
106
|
+
_gameId = "5678792";
|
107
|
+
_interstitialAdPracementId = "Interstitial_iOS";
|
108
|
+
_rewardAdPracementId = "Rewarded_iOS";
|
109
|
+
_bannerAdPracementId = "Banner_iOS";
|
110
|
+
#elif UNITY_ANDROID
|
111
|
+
_gameId = "5678793";
|
112
|
+
_interstitialAdPracementId = "Interstitial_Android";
|
113
|
+
_rewardAdPracementId = "Rewarded_Android";
|
114
|
+
_bannerAdPracementId = "Banner_Android";
|
115
|
+
#else
|
116
|
+
_gameId = "5678793";
|
117
|
+
_interstitialAdPracementId = "Interstitial_Android";
|
118
|
+
_rewardAdPracementId = "Rewarded_Android";
|
119
|
+
_bannerAdPracementId = "Banner_Android";
|
120
|
+
#endif
|
121
|
+
}
|
122
|
+
|
123
|
+
private void Start()
|
124
|
+
{
|
125
|
+
Debug.Log("Game IDは" + _gameId + "に初期化されています。");
|
126
|
+
Debug.Log("AdsManagerの数は" + GameObject.FindGameObjectsWithTag("Ads").Length.ToString());
|
127
|
+
|
128
|
+
if (!Advertisement.isInitialized && Advertisement.isSupported)
|
129
|
+
{
|
130
|
+
Debug.Log("広告を初期化することを試みます。");
|
131
|
+
InitializeAds();
|
132
|
+
|
133
|
+
}
|
134
|
+
else if (Advertisement.isInitialized)
|
135
|
+
{
|
136
|
+
Debug.Log("広告はすでに初期化されています。");
|
137
|
+
OnInitializationComplete();
|
138
|
+
}
|
139
|
+
else
|
140
|
+
{
|
141
|
+
Debug.LogWarning("広告の初期化またはサポートがありません。");
|
142
|
+
}
|
143
|
+
|
144
|
+
}
|
145
|
+
|
146
|
+
|
147
|
+
private void InitializeAds()
|
148
|
+
{
|
149
|
+
if (!Advertisement.isInitialized && Advertisement.isSupported)
|
150
|
+
{
|
151
|
+
Advertisement.Initialize(_gameId, true, Instance);
|
152
|
+
}
|
153
|
+
else
|
154
|
+
{
|
155
|
+
Debug.LogWarning("Unity Ads is not supported or already initialized.");
|
156
|
+
}
|
157
|
+
}
|
158
|
+
|
159
|
+
public IEnumerator ShowUnityAds(System.Action onAdClosedCallback)
|
160
|
+
{
|
161
|
+
if (Instance == null)
|
162
|
+
{
|
163
|
+
Debug.LogError("広告マネージャーのインスタンスがnullです。");
|
164
|
+
}
|
165
|
+
|
166
|
+
bool adClosed = false;
|
167
|
+
onAdClosed = () => adClosed = true;
|
168
|
+
|
169
|
+
Debug.Log("広告はサポート" + (Advertisement.isSupported ? "されています" : "されていません"));
|
170
|
+
Debug.Log("isAdReadyは" + (isAdReady ? "true" : "false"));
|
171
|
+
Debug.Log("初期化は" + (Advertisement.isInitialized ? "されています" : "されていません"));
|
172
|
+
|
173
|
+
if (Advertisement.isInitialized && Advertisement.isSupported)
|
174
|
+
{
|
175
|
+
if (!isAdReady)
|
176
|
+
{
|
177
|
+
Debug.Log("広告をロードしています...");
|
178
|
+
Advertisement.Load(_interstitialAdPracementId, Instance);
|
179
|
+
|
180
|
+
// 広告が準備完了するまで待機
|
181
|
+
while (!isAdReady)
|
182
|
+
{
|
183
|
+
yield return null;
|
184
|
+
}
|
185
|
+
}
|
186
|
+
|
187
|
+
Debug.Log("広告を表示します。");
|
188
|
+
Advertisement.Show(_interstitialAdPracementId, Instance);
|
189
|
+
|
190
|
+
// 広告が閉じるまで待機
|
191
|
+
while (!adClosed)
|
192
|
+
{
|
193
|
+
yield return null;
|
194
|
+
}
|
195
|
+
|
196
|
+
onAdClosedCallback?.Invoke();
|
197
|
+
}
|
198
|
+
else
|
199
|
+
{
|
200
|
+
Debug.Log("広告の表示条件が満たされていません。再初期化します。");
|
201
|
+
Advertisement.Initialize(_gameId, true, Instance);
|
202
|
+
onAdClosedCallback?.Invoke();
|
203
|
+
}
|
204
|
+
}
|
205
|
+
|
206
|
+
public void OnInitializationComplete()
|
207
|
+
{
|
208
|
+
Debug.Log("広告の初期化が完了しました。");
|
209
|
+
// 初期化が完了したので、広告をロード
|
210
|
+
isAdReady = false; // 初期化後にロードが行われるので、isAdReadyをリセット
|
211
|
+
Advertisement.Load(_interstitialAdPracementId, this);
|
212
|
+
}
|
213
|
+
|
214
|
+
public void OnInitializationFailed(UnityAdsInitializationError error, string message)
|
215
|
+
{
|
216
|
+
Debug.LogError($"Initialization failed: {error} - {message}");
|
217
|
+
}
|
218
|
+
|
219
|
+
public void OnUnityAdsAdLoaded(string placementId)
|
220
|
+
{
|
221
|
+
Debug.Log($"広告ユニット {placementId} がロードされました。");
|
222
|
+
if (placementId == _interstitialAdPracementId)
|
223
|
+
{
|
224
|
+
isAdReady = true;
|
225
|
+
}
|
226
|
+
}
|
227
|
+
|
228
|
+
|
229
|
+
public void OnUnityAdsFailedToLoad(string placementId, UnityAdsLoadError error, string message)
|
230
|
+
{
|
231
|
+
Debug.LogError($"Error loading Ad Unit: {placementId} - {error} - {message}");
|
232
|
+
isAdReady = false;
|
233
|
+
onAdClosed?.Invoke();
|
234
|
+
}
|
235
|
+
|
236
|
+
private IEnumerator RetryLoadAd()
|
237
|
+
{
|
238
|
+
yield return new WaitForSeconds(5); // 5秒後に再試行
|
239
|
+
Advertisement.Load(_interstitialAdPracementId, this);
|
240
|
+
}
|
241
|
+
|
242
|
+
public void OnUnityAdsShowFailure(string placementId, UnityAdsShowError error, string message)
|
243
|
+
{
|
244
|
+
Debug.LogError($"Error showing Ad Unit {placementId}: {error} - {message}");
|
245
|
+
onAdClosed?.Invoke();
|
246
|
+
}
|
247
|
+
|
248
|
+
public void OnUnityAdsShowStart(string placementId)
|
249
|
+
{
|
250
|
+
Debug.Log("広告表示開始");
|
251
|
+
}
|
252
|
+
|
253
|
+
public void OnUnityAdsShowClick(string placementId)
|
254
|
+
{
|
255
|
+
Debug.Log("広告クリック");
|
256
|
+
}
|
257
|
+
|
258
|
+
public void OnUnityAdsShowComplete(string placementId, UnityAdsShowCompletionState showCompletionState)
|
259
|
+
{
|
260
|
+
Debug.Log("広告表示完了");
|
261
|
+
onAdClosed?.Invoke();
|
262
|
+
// 広告表示後に再度ロード
|
263
|
+
Advertisement.Load(_interstitialAdPracementId, this);
|
264
|
+
}
|
265
|
+
}
|
266
|
+
|
267
|
+
```
|
268
|
+
そして、呼び出す側のスクリプトにも少々改善を加えました。
|
269
|
+
```cs
|
270
|
+
if (Random.value < Paramaters.Entity.adDisplayChance)
|
271
|
+
{
|
272
|
+
AudioListener.volume = 0f;
|
273
|
+
Debug.Log("広告表示開始");
|
274
|
+
yield return StartCoroutine(AdsInitializer.Instance.ShowUnityAds(() =>
|
275
|
+
{
|
276
|
+
Debug.Log("広告が閉じられました。シーン遷移を続行します。");
|
277
|
+
}));
|
278
|
+
Debug.Log("広告表示終了");
|
279
|
+
|
280
|
+
AudioListener.volume = 1f;
|
281
|
+
}
|
282
|
+
if (!isMoving)
|
283
|
+
{
|
284
|
+
isMoving = true;
|
285
|
+
fade.enabled = true;
|
286
|
+
fade.color = new Color(0f, 0f, 0f, 0f);
|
287
|
+
for (int i = 0; i < 10; i++)
|
288
|
+
{
|
289
|
+
fade.color = new Color(0f, 0f, 0f, i * 0.1f);
|
290
|
+
yield return new WaitForSeconds(0.1f);
|
291
|
+
}
|
292
|
+
SceneManager.LoadScene(scenename);
|
293
|
+
StartCoroutine(FadeOut());
|
294
|
+
}
|
295
|
+
```
|
296
|
+
そのログがこちらです。一部は削減しています。
|
297
|
+
```
|
298
|
+
I Unity : Game IDは(AndroidのゲームID)に初期化されています。
|
299
|
+
I Unity : AdsManagerの数は1
|
300
|
+
I Unity : 広告を初期化することを試みます。
|
301
|
+
I Unity : 広告表示開始
|
302
|
+
I Unity : 広告はサポートされています
|
303
|
+
I Unity : 初期化はされていません
|
304
|
+
I Unity : 広告の表示条件が満たされていません。再初期化します。
|
305
|
+
I Unity : 広告が閉じられました。シーン遷移を続行します。
|
306
|
+
I Unity : 広告表示終了
|
307
|
+
```
|
308
|
+
以下のことより、
|
309
|
+
- Game Idの間違いではない
|
310
|
+
- 初期化をしようとはしている
|
311
|
+
- 表示開始~終了までの一連の長れが実行されている
|
312
|
+
- サポートはされている
|
313
|
+
- 初期化がされていない
|
314
|
+
ということがわかりました。
|