Single Tech Games

unity video ads tutorial

Tutorial – Implementando el plugin de Unity Video Ads en Unity 3D (games)

Hola Gente! Regresando esta semana con formas de hacer money 😛 esta vez toca Unity Ads, que es solo vídeo y que está pagando por encima del mercado en CPM.

Para los que no saben CPM es que te pagan por vistas, a diferencia de CPI donde te pagan cuando presionan el Ad, ahora para considerarse una vista, tiene que ser visto todo el vídeo.
La verdad es muy simple implementar Unity Ads en Unity 3D, solo hay que bajarse el SDK que en realidad es un plugin que pueden encontrar en Asset Store de Unity, no esperen encontrar Banners o Interstitial como Admob u otros.
Tiene juegos muy populares que lo implementan, como Crossy Road que llego a ganar 1 millón de dólares en 45 días, claro que tienen que tener un juego como ese para ganar esa cantidad 😛
El único gran problema que tiene por ahora es que paga por deposito bancario y no por Paypal lo que lo hace bastante dificil de cobrar, ojala arreglen eso en el futuro
En todo caso no lo probé en Android pero no creo que haya ningún problema, al final salio que estaba corriendo bien el Ad así que me imagino que todo irá bien
Links:
Página de Unity Ads : https://unityads.unity3d.com/
Plugin de Unity Ads : https://www.assetstore.unity3d.com/en/#!/content/21027
Guia para implementarlos bien (esteticamente): http://blogs.unity3d.com/2015/04/15/a-designers-guide-to-using-video-ads/
Mi recomendación es que jueguen Crossy Road para que vean lo bien implementados que están: https://play.google.com/store/apps/details?id=com.yodo1.crossyroad&hl=en
Código
VideosUnityScript

using UnityEngine;
using System.Collections;
using UnityEngine.Advertisements;
using UnityEngine.UI;
public class VideosUnityScript : MonoBehaviour {
	public Button botonVideo;
	public Text textoBotonVideo;
	void Awake() {
		if (Advertisement.isSupported) {
			Advertisement.Initialize ("11111", true); //Modod prueba, utilizar el de abajo al momento de ir a produccion
			//Advertisement.Initialize ("11111");
		} else {
			Debug.Log("Plataforma no soportada");
		}
	}
	public void MostrarBoton() {
		if(Advertisement.IsReady())
			textoBotonVideo.text = "Mostrar Ad";
		else
			textoBotonVideo.text = "Esperar...";
		botonVideo.gameObject.SetActive(true);
	}
	public void ShowAd(string zone = "")
	{
		if (string.Equals (zone, ""))
			zone = null;
		ShowOptions options = new ShowOptions ();
		options.resultCallback = AdCallbackhandler;
		if (Advertisement.isReady (zone))
			Advertisement.Show (zone, options);
	}
	void AdCallbackhandler (ShowResult result)
	{
		switch(result)
		{
		case ShowResult.Finished:
			Debug.Log ("Ad Entregado. Entregando Monedas...");
			break;
		case ShowResult.Skipped:
			Debug.Log ("Ad Descartado. No damos nada...");
			break;
		case ShowResult.Failed:
			Debug.Log("Ad Fallo. No hay dinero :( ");
			break;
		}
	}
}

flappyScript

using UnityEngine;
using System.Collections;
public class flappyScript : MonoBehaviour {
	//Declaramos la velocidad inicial del pajaro sea igual a zero, Vector3.zero = 0,0,0
	//1,1,0
	Vector3 velocidad = Vector3.zero;
	//Declaramos un vector que controle la gravedad, no usaremos la fisica de unity
	public Vector3 gravedad;
	//Declaramos un vector que define el salto (aleteo) del pajaro
	public Vector3 velocidadAleteo;
	//Declaramos si se debe aletear, si se toco la pantalla o se presiono espacio
	bool aleteo = false;
	//Declaramos la velocidad maxima de rotacion del pajaro
	public float velocidadMaxima;
	public TubosScript tubo1;
	public TubosScript tubo2;
	private Animator anim;
	private bool juegoTerminado;
	private bool juegoIniciado;
	public RectTransform botonesMenu;
	public VideosUnityScript videosUnity;
	// Use this for initialization
	void Start () {
		anim = this.gameObject.GetComponent<Animator> ();
	}
	// Update is called once per frame
	void Update (){
		//aumenta con el numero de presiones en la pantalla
		int numPresiones = 0;
		foreach (Touch toque in Input.touches) {
			if (toque.phase == TouchPhase.Ended)
				numPresiones++;
		}
		//Si la persona presiona el boton de espacio o hace clic en la pantalla con el mouse, o tocas con el dedo
		if (Input.GetKeyDown(KeyCode.Space) | Input.GetMouseButtonDown(0) | numPresiones > 0) {
			if(juegoTerminado == false)
				aleteo = true;
			juegoIniciado = true;
			tubo1.juegoIniciado = true;
			tubo2.juegoIniciado = true;
		}
		if(juegoTerminado)
			MostrarBotones();
	}
	//Este es el update de la fisica, que es ligeramente mas lento que el update del juego
	void FixedUpdate () {
		if(juegoIniciado)
		{
			//A la velocidad le sumamos la gravedad (Para que el pajaro caiga)
			velocidad += gravedad * Time.deltaTime;
			//Si presionaron espacio o hicieron clic
			if (aleteo == true)
			{
				//Que solo sea una vez
				aleteo = false;
				//El vector velocidad recibe el impulso hacia arriba al pajaro
				velocidad.y = velocidadAleteo.y;
			}
			//Hacemos que el pajaro reciba la velocidad (la gravedad lo hace caer mas rapido)
			transform.position += velocidad * Time.deltaTime;
			float angulo = 0;
			if (velocidad.y >= 0) {
				//Cambiamos el angulo si Y es positivo que mire arriba
				angulo = Mathf.Lerp (0, 25, velocidad.y/velocidadMaxima);
			}
			else {
				//Cambiamos el angulo si Y es negativo que mire abajo
				angulo = Mathf.Lerp (0, -75, -velocidad.y/velocidadMaxima);
			}
			//Rotamos
			transform.rotation = Quaternion.Euler (0, 0, angulo);
		}
	}
	//Cada vez que haya una colision con cualquier objeto que tenga un collider se actiavara esta funcion
	//Collider son Box Collider 2D, Circle Collider 2D, etc.
	void OnCollisionEnter2D (Collision2D colision)
	{
		//Si colisionamos con el tubo, que se detengan los tubos
		if(colision.gameObject.name == "TuboAbajo" | colision.gameObject.name == "TuboArriba"|colision.gameObject.name == "Piso")
		{
			//Hacemos que la velocidad de los tubos se haga cero
			tubo1.velocidad = new Vector3(0,0,0);
			tubo2.velocidad = new Vector3(0,0,0);
			anim.SetTrigger("JuegoTerminado");
			juegoTerminado = true;
		}
		if(colision.gameObject.name == "Piso")
		{
			gravedad = new Vector3(0,0,0);
		}
		if(colision.gameObject.name == "TuboAbajo")
		{
			colision.gameObject.GetComponent<BoxCollider2D>().enabled = false;
		}
	}
	private void MostrarBotones()
	{
//		botonesMenu.gameObject.SetActive(true);
		videosUnity.MostrarBoton();
	}
}

Suerte!

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments