Unity激励广告:观看2次后解锁全部游戏关卡的实现方法
实现观看2次激励广告解锁全关卡功能
核心思路
要实现需求,需要完成三个核心环节:
- 持久化记录用户观看激励广告的次数
- 广告观看完成后更新次数,达到2次时触发全关卡解锁逻辑
- 修改原有关卡解锁判断逻辑,兼容全解锁状态
代码实现
1. 扩展广告完成回调逻辑
在你的广告管理类中,添加广告次数统计与全解锁触发逻辑:
// 定义存储广告观看次数的常量键 private const string AD_WATCH_COUNT_KEY = "RewardedAdWatchedCount"; public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState) { if (adUnitId.Equals(_adUnitId) && showCompletionState.Equals(UnityAdsShowCompletionState.COMPLETED)) { Debug.Log("Unity Ads 激励广告观看完成"); // 读取当前已观看次数,默认值为0 int watchedCount = PlayerPrefs.GetInt(AD_WATCH_COUNT_KEY, 0); watchedCount++; // 持久化更新后的次数 PlayerPrefs.SetInt(AD_WATCH_COUNT_KEY, watchedCount); PlayerPrefs.Save(); // 检查是否达到2次观看要求,触发全关卡解锁 if (watchedCount >= 2) { UnlockAllLevels(); Debug.Log("已满足2次观看要求,所有关卡已解锁"); } // 加载下一条广告 Advertisement.Load(_adUnitId, this); } } // 全关卡解锁方法 private void UnlockAllLevels() { // 示例逻辑:根据项目实际的关卡存储方式调整 // 假设GameManager中存储了总关卡数TotalLevels for (int i = 1; i <= GameManager.Instance.TotalLevels; i++) { // 用PlayerPrefs标记关卡为已解锁,键名需与项目原有逻辑一致 PlayerPrefs.SetInt($"Level_Unlocked_{i}", 1); } PlayerPrefs.Save(); // 触发关卡选择UI刷新(如果有) // UIManager.Instance.RefreshLevelPanel(); }
2. 修改原有关卡解锁判断逻辑
找到项目中原有的关卡解锁检查代码,加入全解锁状态的判断分支:
public bool IsLevelAvailable(int levelIndex) { // 优先判断是否已触发全关卡解锁 int watchedCount = PlayerPrefs.GetInt(AD_WATCH_COUNT_KEY, 0); if (watchedCount >= 2) { return true; } // 保留原有的前序关卡解锁逻辑 if (levelIndex == 1) { return true; // 第一关默认解锁 } // 检查前序关卡是否已完成 return PlayerPrefs.GetInt($"Level_Completed_{levelIndex - 1}", 0) == 1; }
注意事项
- 如果项目不用PlayerPrefs做持久化,可以替换为ScriptableObject、本地文件或云端存储方案
- 关卡解锁的存储键名必须与项目原有逻辑保持一致,避免出现状态冲突
- 全解锁后建议添加UI提示,让用户明确知晓所有关卡已开放
内容的提问来源于stack exchange,提问作者iSTAR
相关产品推荐
相关产品推荐

