Estoy usando Unity Ads en mi aplicación. Todo funciona bien, pero quiero agregar una función que maneje la interactividad del botón Anuncio, ya sea que el Anuncio esté listo o no, durante toda la vida útil de la aplicación.
La solución más simple que he codificado consiste en verificar la disponibilidad de los anuncios dentro del método update()
:
public class AdButton : MonoBehaviour { // Some stuff here void Update() { if (myButton) myButton.interactable = Advertisement.IsReady(placementId); } }
pero también pensé en usar eventos de 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; } }
El problema es que soy nuevo en Unity y me da un poco de miedo el método update()
. He estado leyendo que es fácil sobrecargar la aplicación debido a la naturaleza de esa función (llamada una vez por cuadro).
¿Debería preocuparme por estas líneas de código o por llamar a cada cuadro? ¿Estas instrucciones no ralentizan mi aplicación?
Gracias por tu ayuda.
simo
Mi sugerencia sería usar el enfoque de Acción, ese es el enfoque que he tomado en el pasado, por ejemplo:
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()
es un método de anulación proporcionado por el paquete UnityAds. Se invoca cuando un anuncio está listo para ser visto.
La idea aquí es registrar un oyente, pasando una Action
como parámetro al método RegisterOnReadyListener()
y almacenándolo como una variable miembro.
Si un anuncio está listo de inmediato, la Action
se invocará de inmediato. Si el anuncio no está listo de inmediato, se invocará la Action
cuando el paquete UnityAds invoque la devolución de llamada OnUnityAdsReady()
.
Cada vez que se ve un anuncio, se OnUnityAdsReady()
cuando el próximo anuncio esté listo para ser visto. Esto significa que la Action
se invocará cada vez que un Anuncio esté listo.
Un par de consejos para este tema: