Single Tech Games

Tutorial Unity 3D: Implementando el Plugin (SDK) de Revmob en Android #Unity3D

Hola Gente! Esta semana este es el ultimo vídeo tutorial prometido que me faltaba y es como hacer los banners e interstitials con el plugin de Revmob en Unity 3D, realmente es bien simple, no se ni porque lo hago 😛 pero intente hacerlo un poquito ameno, al menos al comienzo, bueno este vídeo usa el proyecto de Flappy Bird sin ads ni google services.

De Revmob podemos decir que es una empresa seria, paga alto, no tanto como Admob pero podemos decir que es segundo lugar, tiene fácil instalación en Unity, paga cada $50 que es un plus, Leadbolt te paga llegando a los $100 recién.
Y bueno así lo tienen este ultimo tutorial para implementar el SDK de revmob en unity 3D y creo que ese será el último en buen tiempo en lo que refiere a Ad networks.
Solo me queda hacerles recordar que cuando terminen de configurar el revmob no se olviden de cambiar los ads de testing:
revmobfinal
Proyecto de Flappy Bird

 https://app.box.com/s/jhqczcgwkr6f9zvl32xp
Código
revmobScript

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class revmobScript : MonoBehaviour, IRevMobListener {
	private static readonly Dictionary<string, string> REVMOB_APP_IDS = new Dictionary<string, string>() {
		{ "Android", "123456789abcde"},
		{ "IOS", "copy your iOS RevMob Media ID here" }
	};
	private RevMob revmob;
	public static revmobScript RevmobScript;
	void Awake() {
		#if UNITY_EDITOR
		Debug.Log("Session iniciada.");
		#elif UNITY_ANDROID
		revmob = RevMob.Start(REVMOB_APP_IDS, "Revmob");
		#endif
		if(RevmobScript != null)
			GameObject.Destroy(RevmobScript);
		else
			RevmobScript = this;
		DontDestroyOnLoad(this);
	}
	public void cargarFullScreen()
	{
		#if UNITY_EDITOR
		Debug.Log("cargarFullScreen Revmob.");
		#elif UNITY_ANDROID
		revmob.CreateFullscreen ();
		#endif
	}
	public void cargarBanner()
	{
		#if UNITY_EDITOR
		Debug.Log("cargarBanner Revmob.");
		#elif UNITY_ANDROID
		revmob.CreateBanner (RevMob.Position.TOP, 0, 0, 250, 50);
		//revmob.CreateBanner();
		#endif
		//revmob.CreateBanner (RevMob.Position.TOP, 0, 0, 250, 50);
	}
	public void MostrarFullScreen()
	{
		#if UNITY_EDITOR
		Debug.Log("MostrarFullScreen Revmob.");
		#elif UNITY_ANDROID
		revmob.ShowFullscreen();
		#endif
	}
	public void MostrarBanner()
	{
		#if UNITY_EDITOR
		Debug.Log("MostrarBanner Revmob.");
		#elif UNITY_ANDROID
		revmob.ShowBanner ();
		#endif
	}
	public void EsconderBanner()
	{
		#if UNITY_EDITOR
		Debug.Log("EsconderBanner Revmob.");
		#elif UNITY_ANDROID
		revmob.HideBanner ();
		#endif
	}
	#region IRevMobListener implementation
	public void SessionIsStarted () {
		//		Debug.Log("Session started.");
	}
	public void SessionNotStarted (string revMobAdType) {
		//		Debug.Log("Session not started.");
	}
	public void AdDidReceive (string revMobAdType) {
		//		Debug.Log("Ad did receive.");
	}
	public void AdDidFail (string revMobAdType) {
		//		Debug.Log("Ad did fail.");
	}
	public void AdDisplayed (string revMobAdType) {
		//		Debug.Log("Ad displayed.");
	}
	public void UserClickedInTheAd (string revMobAdType) {
		//		Debug.Log("Ad clicked.");
	}
	public void UserClosedTheAd (string revMobAdType) {
		//		Debug.Log("Ad closed.");
	}
	public void InstallDidReceive(string message) {
		//		Debug.Log("Install received");
	}
	public void InstallDidFail(string message) {
		//		Debug.Log("Install not received");
	}
	public void EulaIsShown() {
		//		Debug.Log("Eula is displayed");
	}
	public void EulaAccepted() {
		//		Debug.Log("Eula was accepted");
	}
	public void EulaRejected() {
		//		Debug.Log("Eula was rejected");
	}
	#endregion
}

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;
	private revmobScript revmob;
	private bool fullScreenMostrado;
	// Use this for initialization
	void Start () {
		revmob = revmobScript.RevmobScript;
		anim = this.gameObject.GetComponent<Animator> ();
		revmob.cargarBanner ();
		revmob.MostrarBanner ();
		revmob.cargarFullScreen ();
	}
	// 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;
		}
	}
	//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;
		}
	}
	void OnGUI()
	{
		GUIStyle customButton = new GUIStyle("button");
		customButton.fontSize = 20;
		int anchoBoton = Screen.width / 3;
		int altoBoton = Screen.height / 7;
		if(juegoTerminado)
		{
			// Dibujamos un boton  de Reinicio
			if(!fullScreenMostrado)
			{
				revmob.EsconderBanner();
				revmob.MostrarFullScreen();
				fullScreenMostrado = true;
			}
			if (
				GUI.Button(
				new Rect(
				Screen.width / 2 - (anchoBoton / 2),
				(1 * Screen.height / 3) - (altoBoton / 2),
				anchoBoton,
				altoBoton
				),
				"Reiniciar!",customButton
				)
				)
			{
//				admob.ShowBanner();
				Application.LoadLevel("escena1");
			}
		}
	}
}

Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="flappy.gordo" android:versionName="1.0" android:versionCode="1" android:installLocation="preferExternal">
  <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
  <application android:theme="@android:style/Theme.NoTitleBar" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false">
  <meta-data android:name="com.google.android.gms.version"
             android:value="@integer/google_play_services_version" />
    <activity android:name="com.unity3d.player.UnityPlayerNativeActivity" android:label="@string/app_name" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
      <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
      <meta-data android:name="android.app.lib_name" android:value="unity" />
    </activity>
    <activity android:name="com.revmob.ads.fullscreen.FullscreenActivity"
              android:theme="@android:style/Theme.Translucent"
              android:configChanges="keyboardHidden|orientation">
    </activity>
  </application>
  <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="21" />
  <uses-feature android:glEsVersion="0x00020000" />
  <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
  <uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
  <uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>

Suerte!

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