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!
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!
A ok,entonces si vale la pena aprender a uasr unity.
🙂
Hola Julio, me gustaria saber si con UNITY en la versión gratis le puedo poner un icono a las aplicaciones android o no?.
Si se puede 🙂 lo unico es que va aparecer una pantalla con el logo de Unity al iniciar el Juego