Unity3D广告间隔控制:Objective-C代码转C#实现需求
Unity C# 实现同款广告间隔控制逻辑
没问题,我帮你把这段Objective-C的广告间隔控制逻辑转换成Unity适用的C#代码,先拆解下原代码的核心逻辑:
- 第一次调用直接显示广告,同时标记“首次调用”状态为已完成
- 后续每次调用时,检查距离上次尝试显示广告的时间间隔,如果小于60秒就跳过显示;如果间隔达标,更新时间戳后再显示广告
- 不管是否触发广告显示,只要不是跳过的情况,都会更新上次尝试的时间戳(原OC代码里的变量名
gCBLastFail有点误导,实际是记录每次尝试的时间,而非仅失败时)
下面是对应实现的C#代码,适配Unity的时间系统:
using UnityEngine; // 建议把广告管理逻辑放在一个单例类里,方便全局调用 public class AdManager : MonoBehaviour { // 记录上次尝试显示广告的时间(对应原OC的gCBLastFail) private static float _lastAdAttemptTime = -999f; // 标记是否是第一次调用广告(对应原OC的isFirssst,修正了拼写) private static bool _isFirstTime = true; // 广告冷却间隔,提取为常量方便后续修改 private const float AdCooldownInterval = 60f; // 对外暴露的显示全屏广告方法 public void ShowFullScreenAds() { // 使用Time.realtimeSinceStartup获取真实运行时间,不受游戏时间缩放(比如暂停)影响 float currentTime = Time.realtimeSinceStartup; if (!_isFirstTime) { float timeSinceLastAttempt = currentTime - _lastAdAttemptTime; // 间隔不足60秒,直接返回不显示广告 if (timeSinceLastAttempt < AdCooldownInterval) { return; } } // 更新上次尝试时间为当前时间 _lastAdAttemptTime = currentTime; // 首次调用标记置为false _isFirstTime = false; // 调用实际的Google AdMob全屏广告显示方法 ShowGoogleAdmobAds(); } // 这里替换成你实际的AdMob全屏广告调用逻辑 private void ShowGoogleAdmobAds() { // 示例:如果你用的是Google Mobile Ads插件,比如插屏广告的显示逻辑 // InterstitialAd.Instance?.Show(); Debug.Log("显示Google AdMob全屏广告"); } }
关键细节说明:
- 用
Time.realtimeSinceStartup替代OC的[NSDate timeIntervalSinceReferenceDate]:这个API返回的是游戏启动到当前的真实秒数,不会因为Time.timeScale设置为0(比如游戏暂停)而停止计时,更适合做广告间隔的时间判断 - 静态变量
_lastAdAttemptTime和_isFirstTime:保持了原OC中static变量的全局状态,跨方法调用、跨脚本实例(只要这个类被加载过)都能保留状态 - 常量
AdCooldownInterval:把60秒提取成常量,后续要调整间隔只需要修改这个值即可,不用改业务逻辑
使用提示:
- 建议把
AdManager做成单例,方便在游戏其他地方通过AdManager.Instance.ShowFullScreenAds()调用 ShowGoogleAdmobAds方法需要替换成你实际集成的Google AdMob代码,比如插屏广告、激励广告的显示逻辑
内容的提问来源于stack exchange,提问作者Guru
相关产品推荐
相关产品推荐

