Single Tech Games

single tutorial unity 2d android

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

Hola Gente! Hoy les traigo un nuevo video tutorial de Unity 2D, estuve de buen humor cuando lo hice así que me verán hablar cada tontería, en fin, esta semana seguimos trabajando en ese juego 2D que ya habíamos comenzado la semana pasada, algunos pequeños cambios que decidí hacerle al fondo por disque copyright, es raro cuando todas las imágenes las enseño a hacer antes de hacer un juego, y utilizo las imágenes de Open Game Art, pero bueno, la cuenta no se verá afectada solo la “Monetización”… si ganar $5 al mes se le puede decir monetizar a algo XD

Hoy toca animación de nuevo, si de nuevo, pero no la animación de la del juego anterior, esta vez es más simple y rápida, la siguiente semana ya toca salto, video que ya hice, y después por fin Line Of Sight, estoy avanzando bastante lento en estos tutoriales tratando de explicar de forma más detallada el código, sobre todo porque he visto muchos principiantes en programación, pensé terminar la serie en 2 videos por ahora ya tengo planes de 4, y veré si le aumento un poco más conforme vea que hay algo que les pueda enseñar que sea interesante.
Código
botonIzqScript

using UnityEngine;
using System.Collections;
public class botonIzqScript : MonoBehaviour {
	private PersonajeScript personaje;
	private CircleCollider2D presionar;
	// Use this for initialization
	void Start () {
		presionar = this.gameObject.GetComponent<CircleCollider2D>();
		personaje = this.transform.parent.gameObject.GetComponent<PersonajeScript> ();
	}
	// Update is called once per frame
	void Update () {
		tocandoPantalla ();
	}
	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)) {
			//Vector3 posicionTap = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
			Vector3 posicionTap = Camera.main.ScreenToWorldPoint (Input.mousePosition);
			Vector2 posicionTap2D = new Vector2 (posicionTap.x, posicionTap.y);
			bool presiono = presionar.OverlapPoint (posicionTap2D);
			if (presiono) {
				personaje.MoverJugadorIzquierda ();
				personaje.setJugadorMoviendose (true);
			}
		}else{
			personaje.setJugadorMoviendose (false);
		}
	}
}

botonDerScript

using UnityEngine;
using System.Collections;
public class botonDerScript : MonoBehaviour {
	private PersonajeScript personaje;
	private CircleCollider2D presionar;
	// Use this for initialization
	void Start () {
		presionar = this.gameObject.GetComponent<CircleCollider2D>();
		personaje = this.transform.parent.gameObject.GetComponent<PersonajeScript> ();
	}
	// Update is called once per frame
	void Update () {
		tocandoPantalla ();
	}
	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)) {
			//Vector3 posicionTap = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
			Vector3 posicionTap = Camera.main.ScreenToWorldPoint (Input.mousePosition);
			Vector2 posicionTap2D = new Vector2 (posicionTap.x, posicionTap.y);
			bool presiono = presionar.OverlapPoint (posicionTap2D);
			if (presiono) {
				personaje.MoverJugadorDerecha ();
				personaje.setJugadorMoviendose (true);
			}
		}else
			personaje.setJugadorMoviendose (false);
	}
}

PersonajeScript

using UnityEngine;
using System.Collections;
public class PersonajeScript : MonoBehaviour {
	// Use this for initialization
	private JugadorScript[] jugadores;
	void Start () {
		jugadores = GetComponentsInChildren<JugadorScript> ();
	}
	// Update is called once per frame
	void Update () {
	}
	public void MoverJugadorDerecha(){
		foreach (JugadorScript jugador in jugadores) {
			if(jugador != null){
				jugador.moverDerecha();
			}
		}
	}
	public void MoverJugadorIzquierda(){
		foreach (JugadorScript jugador in jugadores) {
			if(jugador != null){
				jugador.moverIzquierda();
			}
		}
	}
	public void setJugadorMoviendose(bool moviendose){
		foreach (JugadorScript jugador in jugadores) {
			if(jugador != null){
				jugador.moviendose = moviendose;
			}
		}
	}
}

JugadorScript

using UnityEngine;
using System.Collections;
public class JugadorScript : MonoBehaviour {
	public float velocidad = -10f;
	private Animator animador;
	public bool moviendose;
	// Use this for initialization
	void Start () {
		animador = GetComponent<Animator>();
	}
	// Update is called once per frame
	void Update () {
		if(!moviendose)
			animarMovimiento (0.0f);
	}
	public void moverIzquierda(){
		float velocidadMovimiento = velocidad * Time.deltaTime;
		animarMovimiento (Mathf.Abs(velocidadMovimiento));
		transform.Translate (Vector2.right * velocidadMovimiento);
		transform.eulerAngles = new Vector2 (0, 0);
	}
	public void moverDerecha(){
		float velocidadMovimiento = velocidad * Time.deltaTime;
		animarMovimiento (Mathf.Abs(velocidadMovimiento));
		transform.Translate (Vector2.right * velocidadMovimiento);
		transform.eulerAngles = new Vector2 (0, 180);
	}
	private void animarMovimiento(float velocidad){
		animador.SetFloat ("Velocidad", velocidad);
	}
}


Suerte!

0 0 votes
Article Rating
Subscribe
Notify of
guest
6 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
jesus nazario vasquez

Estimado Julio una consulta, cuando realizo lo del tutorial mi personaje no se anima cuando se va a la derecha pero si se va cuando se va a la izquierda y segui todos los pasos que pude observar de tu video que problema puede haber pasado, y tampoco cuando mantengo presionado avanza solo debo de realizar click

Hola, queria preguntarte una cosa, si yo quisiera que mi personaje pasar de un nivel a otro con que script se podría hacer o que recomendaciones me harias?

Es decir, yo lo que quiero es que mi personaje cuando llegue a puerta de una casa entre, un ejemplo como pokemon cuando el personaje entra en la casas o en los gimnasios