我在我的应用程序上使用了统一广告。一切运行良好,但我想添加一个功能,处理广告按钮的交互性,无论广告是否准备好,贯穿整个应用程序的生命周期。
我编写的最简单的解决方案是在update()方法中检查ads的可用性:
public class AdButton : MonoBehaviour
{
// Some stuff here
void Update()
{
if (myButton)
myButton.interactable = Advertisement.IsReady(placementId);
}
}但我也考虑过使用Actions事件:
public class AdsManager : MonoBehaviour
{
public static event Action<bool> AdReady;
// Some stuff here
void update()
{
adReady?.invoke(Advertisement.isReady(placementId));
}
}public class AdButton : MonoBehaviour
{
// Some stuff here
void OnEnable()
{
AdsManager.AdReady += RefreshButton;
}
void RefreshButton(bool interactivity)
{
myButton.interactable = interactivity
}
void OnDisable()
{
AdsManager.AdReady -= RefreshButton;
}
}问题是,我在Unity中是新手,我对update()方法有点害怕。我一直读到,由于该函数的性质(每帧调用一次),应用程序很容易超载。
我应该担心这些代码行还是调用每一帧这些指令不会减慢我的应用程序?
谢谢你的帮助。
西莫
发布于 2021-02-13 01:14:42
我的建议是采用行动方法,这是我过去采取的方法,例如:
private Action onAdReadyListener;
public void RegisterOnReadyListener(Action onAdReadyListener)
{
this.onAdReadyListener = onAdReadyListener;
if (Advertisement.IsReady(myPlacementId))
{
onAdReadyListener?.Invoke();
}
}
public void OnUnityAdsReady(string placementId)
{
if (placementId == myPlacementId)
{
onAdReadyListener?.Invoke();
}
}OnUnityAdsReady()是由UnityAds包提供的覆盖方法。当广告准备好被查看时,它就会被调用。
这里的想法是注册侦听器,将Action作为参数传递给RegisterOnReadyListener()方法,并将其存储为成员变量。
如果广告立即准备就绪,那么Action将立即被调用。如果Ad还没有准备好,那么当Action包调用OnUnityAdsReady()回调时,UnityAds就会被调用。
每次观看广告时,当下一个广告准备被观看时,OnUnityAdsReady()将被调用。这意味着每次广告准备就绪时都会调用Action。
有关这一主题的几点建议:
environment.
https://stackoverflow.com/questions/66176519
复制相似问题