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!
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
Lo más probale es que no hayas adjuntado el script de forma correcta al boton, revisa en el editor de unity si los scripts están bien usados y en cada boton como corresponde
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?
Esa es una pregunta muy rara, no entiendo muy bien a que te refieres a con que pase de un nivel a otro, ¿que pase de una pantalla a otra? o hablas de las escenas, en todo caso me parece que el concepto esta un poco difuso, un personaje no pasa de una escena a otra, y si hablas de caracteristicas del personaje eso se maneja por script y se mantiene siempre en memoria si hace lo quieres
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
En ese caso creas 2 o más escenas distintas, una con tu personaje pequeño caminando por el mundo y otra con tu personaje dentro de la casa, lo que cambia es el fondo, pero el personaje es creado en ambas escenas, y mantienes sus caracteristicas por script.