Como crear un infinite runner 2D con UNITY
Creando el protagonista con GIMP para UNITY
Usando la técnica de animación por sprites crearemos un protagonista para nuestro juego. Vamos a crear dos animaciones, lo que serán unas seis imágenes en total que vamos a importar a UNITY.
Cualquier duda o comentario de la lección no dudeis en dejarla en el foro del curso.
El script que creamos para controlar al player:
public class PlayerController : MonoBehaviour { [SerializeField] private float _speed = 1f; //Velocidad a la que cambia de carril el caracter private Vector2 _targetPos; private int _maxHeight = 0; [SerializeField] private float _iHealth2Update = 0; //Variable que indica la variacion de salud en el tiempo. [SerializeField] private float _iHealth = 100, _iPoints = 0; [SerializeField] private Vector2[] _positionsAvailable; //Numero de carriles por los que se movera [SerializeField] private int _positionActual = 1; [SerializeField] private GameObject particleMove= null; //Sistema de particulas a lanzar al moverse private bool _isAlive; // Use this for initialization private void Awake() { //La posicion maxima es la longitud del array de posiciones. _maxHeight = _positionsAvailable.Length - 1; } void Start () { /*Invocamos la funcion de modificar la salud, solo si _iHealth2Update tiene algún valor informado. */ if (_iHealth2Update != 0) { InvokeRepeating("UpdateHealthRep", 1, 1); } _isAlive = true; } // Update is called once per frame void Update () { if (_iHealth <= 0) { //En el caso de que la salud sea menor de 0: GameOver! _isAlive = false; Destroy(gameObject); } else { //Si el player esta vivo movimiento. transform.position = Vector2.MoveTowards(transform.position, _targetPos, _speed * Time.deltaTime); if (Input.GetKeyDown(KeyCode.UpArrow) && (_positionActual < _maxHeight)) { //Si se pulsa la tecla arriba, cambiamos la targetPos por una mas grande del array. if (particleMove != null) { Instantiate(particleMove, transform.position, Quaternion.identity); } _positionActual += 1; _targetPos = _positionsAvailable[_positionActual]; } else if (Input.GetKeyDown(KeyCode.DownArrow) && (_positionActual > 0)) { //Si se pulsa la tecla abajo, cambiamos la targetPos por una mas pequeña del array. if (particleMove != null) { Instantiate(particleMove, transform.position, Quaternion.identity); } _positionActual -= 1; _targetPos = _positionsAvailable[_positionActual]; } } } private void UpdateHealthRep() { //Se encarga de ir modificando cada segundo la vida del player. if (_isAlive) { UpdateHealth(_iHealth2Update); } } public void UpdatePoints(float pPoints2Update) { if (_isAlive){ _iPoints = _iPoints + pPoints2Update; GameManager.gm.UpdatePointsText(_iPoints); } } }