Single Tech Games

single tutorial unity 2d android

Tutorial de Unity 2D (Ver 4.3) – Un juego básico de plataforma para Android V

Hola gente! Hoy llego con el último video de Android, creo que si fusionamos estos tutoriales con los anteriores tendrán una idea solida de cómo hacer un juego para móviles, en resumen hemos implementado eventos táctiles, salto, línea de vista, animaciones por enésima vez, resolución en varias plataformas. La verdad no creo que me falte nada de la parte básica lo único que me quedo en el tintero fue el control de Unity.

Lo que me falto del video
Como estaba con sueño se me olvido explicar un poco más el script de cómo hacer una resolución que se adapta a la pantalla, sobre todo la parte que dice int PIXEL_TO_UNITS, ese número en teoría es el tamaño que nosotros le dimos a Unity para nuestras imágenes, ósea si hacen clic en la imagen del personaje y luego van a inspector verán esto:
inspector unity
Se supone que debimos haber puesto 100 pero si lo hacen se darán cuenta que se ve demasiado grande así que con 50 sentí que estaba todo bien, ustedes pueden modificar ese número y ver con cual les va mejor.
Bueno el siguiente video me lo pidieron hace tiempo y es para satisfacer algunas dudas de cómo un desarrollador de apps o videojuegos para móviles puede hacer dinero en Google Play Store, ITunes App Store, Windows phone Store, intentaré no ser tan básico sino también poner mis experiencias y lo que sé sobre las diferentes formas de hacer dinero con aplicaciones.
Código
CamaraScript

<pre>using UnityEngine;
using System.Collections;
public class CamaraScript : MonoBehaviour {
	void Start () {
		float TARGET_WIDTH = 800.0f;
		float TARGET_HEIGHT = 480.0f;
		int PIXELS_TO_UNITS = 50; // 1:1 Radio de pixeles a unidades
		float desiredRatio = TARGET_WIDTH / TARGET_HEIGHT;
		float currentRatio = (float)Screen.width/(float)Screen.height;
		if(currentRatio >= desiredRatio)
		{
			//La resolucion tiene bastante ancho, solo necesitamos usar el alto para determinar el tamaño de la camara
			Camera.main.orthographicSize = TARGET_HEIGHT / 2 / PIXELS_TO_UNITS;
		}
		else
		{
			//Nuestra camara necesita hacer menos zoom para que el alto de las imagenes entren en la pantalla
			//Se determina que tan grande necesita ser, y luego eso se aplica
			float differenceInSize = desiredRatio / currentRatio;
			Camera.main.orthographicSize = TARGET_HEIGHT / 2 / PIXELS_TO_UNITS * differenceInSize;
		}
	}
}

botonDerScript

	private void tocandoPantalla(){
		int numPresiones = 0;
		foreach (Touch toque in Input.touches) {
			if (toque.phase != TouchPhase.Ended && toque.phase != TouchPhase.Canceled)
				numPresiones++;
		}
		if (numPresiones > 0 | Input.GetMouseButton (0)) {
			foreach (Touch toque in Input.touches) {
				Vector3 posicionTap = Camera.main.ScreenToWorldPoint(toque.position);
				Vector2 posicionTap2D = new Vector2 (posicionTap.x, posicionTap.y);
				bool presiono = presionar.OverlapPoint (posicionTap2D);
				if (presiono) {
					personaje.MoverJugadorDerecha ();
					personaje.setJugadorMoviendose (true);
				}
			}
		}else
			personaje.setJugadorMoviendose (false);
	}

botonArrScript

	private void tocandoPantalla(){
		int numPresiones = 0;
		foreach (Touch toque in Input.touches) {
			if (toque.phase != TouchPhase.Ended && toque.phase != TouchPhase.Canceled)
				numPresiones++;
		}
		if (numPresiones > 0 | Input.GetMouseButtonDown (0)) {
			foreach (Touch toque in Input.touches) {
				Vector3 posicionTap = Camera.main.ScreenToWorldPoint(toque.position);
				Vector2 posicionTap2D = new Vector2 (posicionTap.x, posicionTap.y);
				bool presiono = presionar.OverlapPoint (posicionTap2D);
				if (presiono) {
					personaje.SaltarJugador ();
				}
			}
		}
	}

botonIzqScript

	private void tocandoPantalla(){
		int numPresiones = 0;
		foreach (Touch toque in Input.touches) {
			if (toque.phase != TouchPhase.Ended && toque.phase != TouchPhase.Canceled)
				numPresiones++;
		}
		if (numPresiones > 0 | Input.GetMouseButton (0)) {
			foreach (Touch toque in Input.touches) {
				Vector3 posicionTap = Camera.main.ScreenToWorldPoint(toque.position);
				Vector2 posicionTap2D = new Vector2 (posicionTap.x, posicionTap.y);
				bool presiono = presionar.OverlapPoint (posicionTap2D);
				if (presiono) {
					personaje.MoverJugadorIzquierda ();
					personaje.setJugadorMoviendose (true);
				}
			}
		}else{
			personaje.setJugadorMoviendose (false);
		}
	}


Paquete del juego Final:
https://www.box.net/shared/2ecgm0l96ovofxaxyif2
Suerte!

0 0 votes
Article Rating
Subscribe
Notify of
guest
10 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
locoadg

Hola julio, perdón por mi insistencia he intentado poner la cámara en el objeto personaje y jugado y usar los botones del menu UI pero me pasa lo siguiente, en personaje una vez que aprete los botones de movimiento la cámara no seguía al jugador, Entonces lo que hice fue ponerla en el jugador, ahora la cámara me sigue pero pasa algo, cada vez que voy hacia la derecha aparece media pantalla azul y tapa los botones y al irme a la izquierda obviamente los botones no me seguían, Luego utilice los botones UI para que “siguieran” al jugador pero tampoco funcionó puesto que los botones no andaban y les puse el script de movimiento pero no andaba, luego puse los objetos de botones que ya estaban y bue… no funciona tampoco que debo hacer? como hago esto? necesito tu ayuda llevo una semana parado en esto u.u

locoadg

Hola Julio! me preguntaba como se puede hacer para que la pantalla siga al jugador todo el tiempo?

Luciano Diaz

Hola julio! me preguntaba como hago para que la cámara siga al personaje cada vez que se mueve?

Jelbux

Hola, tengo este error con el scrip de la camara sabes que puede ser? copie el codigo al pie de la letra.
Este es el error: The associated scrip can not be loaded
Please fix any compile errors and assign a valid scrip
Este es el codigo del scrip:
using UnityEngine;
using System.Collections;
public class CamaraScript : MonoBehaviour {
void Start () {
float TARGET_WIDTH = 800.0f;
float TARGET_HEIGHT = 480.0f;
int PIXELS_TO_UNITS = 50; // 1:1 Radio de pixeles a unidades
float desiredRatio = TARGET_WIDTH / TARGET_HEIGHT;
float currentRatio = (float)Screen.width/(float)Screen.height;
if(currentRatio >= desiredRatio)
{
//La resolucion tiene bastante ancho, solo necesitamos usar el alto para determinar el tamaño de la camara
Camera.main.orthographicSize = TARGET_HEIGHT / 2 / PIXELS_TO_UNITS;
}
else
{
//Nuestra camara necesita hacer menos zoom para que el alto de las imagenes entren en la pantalla
//Se determina que tan grande necesita ser, y luego eso se aplica
float differenceInSize = desiredRatio / currentRatio;
Camera.main.orthographicSize = TARGET_HEIGHT / 2 / PIXELS_TO_UNITS * differenceInSize;
}
}
}

fco

hola julio, tengo una duda, como hago para acceder y modificar las variables enteras publicas de un script desde otro script contenido en otro objeto?