Single Tech Games

single tutorial unity 2d android

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

Hola gente! hoy les traigo un nuevo video tutorial de Unity 3D, la semana pasada avance poquito, y es que me toma mucho tiempo hacer todos los tutoriales de un solo golpe y aparte los videos quedan muy largos, bueno el día de hoy vamos a ver cómo hacer un salto en Unity 2D con RayCasting y , utilizando ese nuevo motor y la verdad no es tan complicado, quizás lo complicado es cuando por ejemplo quieres calcular un salto exacto usando el motor, es que hay temas como la velocidad que podría hacer que tu salto sea mucho más potente, o menos, lo cual puede ser genial pero de repente muy inesperado.

La siguiente semana nos toca ver Line of Sight, o línea de vista algo que les prometí, y que también es un poco largo, después la verdad no sé ni de qué les voy  hablar XD estaba pensando en colocar joystick de unity en vez de los controles con sprites, y bueno recibo sugerencias también, si quieren aprender algo  en particular que tenga que ver con los juegos de plataforma para móviles entren a mi página de contacto o comenten este post y lo tomaré en cuenta.
Código
JugadorScript

using UnityEngine;
using System.Collections;
public class JugadorScript : MonoBehaviour {
	public float velocidad = -10f;
	public float fuerzaSalto = 200f;
	private Animator animador;
	public bool moviendose;
	public bool enTierra;
	public Transform bordeDeTierra;
	private float tiempoSalto, retrasoSalto = 0.5f;
	private bool salto;
	// Use this for initialization
	void Start () {
		animador = GetComponent<Animator>();
	}
	// Update is called once per frame
	void Update () {
		if(!moviendose)
			animarMovimiento (0.0f);
		Raycasting ();
	}
	void Raycasting(){
		Debug.DrawLine (this.transform.position, bordeDeTierra.position, Color.red);
		enTierra = Physics2D.Linecast(this.transform.position, bordeDeTierra.position,1<< LayerMask.NameToLayer("Piso"));
		//0000 0000 0000 0000 0000 0001 0000 0000
		// ~(1<< LayerMask.NameToLayer("Piso"))
		//  1<< LayerMask.NameToLayer("Piso") | 1<< LayerMask.NameToLayer("Aire")
		tiempoSalto -= Time.deltaTime;
		if(tiempoSalto <= 0 && enTierra && salto){
			animador.SetTrigger("Caer");
			salto = false;
		}
	}
	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);
	}
	public void saltar(){
		if(enTierra){
			rigidbody2D.AddForce (Vector2.up * fuerzaSalto);
			animador.SetTrigger("Saltar");
			tiempoSalto = retrasoSalto;
			salto = true;
		}
	}
	private void animarMovimiento(float velocidad){
		animador.SetFloat ("Velocidad", velocidad);
	}
}

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 SaltarJugador(){
		foreach (JugadorScript jugador in jugadores) {
			if(jugador != null){
				jugador.saltar();
			}
		}
	}
	public void setJugadorMoviendose(bool moviendose){
		foreach (JugadorScript jugador in jugadores) {
			if(jugador != null){
				jugador.moviendose = moviendose;
			}
		}
	}
}

botonArrScript

using UnityEngine;
using System.Collections;
public class botonArrScript : 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.GetMouseButtonDown (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.SaltarJugador ();
			}
		}
	}
}


Suerte!

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

My brother recommended I might like this blog.
He was entirely right. This post truly made my day. You cann’t
imagine just how much time I had spent for this information! Thanks!

HERI

A ok,entonces si vale la pena aprender a uasr unity.

HERI

Hola Julio, me gustaria saber si con UNITY en la versión gratis le puedo poner un icono a las aplicaciones android o no?.