void Update() { if (GetGameOverState() == false && Time.timeScale != 0) { //cojemos la cabeza primero y su controlador GameObject obj = cabeza; SnakePart part = obj.GetComponent <SnakePart>(); //control de movimiento (solo cabeza) ControlMovement(part); //actualizamos la posicion siguiente de cada parte de la serpiente while (obj != null) { //calcula la siguiente posición CalculaNextPosition(part); //si la dirección actual es distinta de 0 (si hay movimiento) o si hay cambios de dirección pendientes if (part.GetCurrentDirection() != Vector2.zero || part.GetNumDirections() > 0) { //Si la posición actual es >= que la siguiente (si ya se ha llegado a la siguiente posición) if (DistanciaMaxima(obj.transform.position, part.GetNextPosition(), part.GetCurrentDirection())) { //actualizamos la actual a la siguiente (la nueva siguiente se actualiza en el update) part.SetPrevPosition(part.GetNextPosition()); //por si nos pasamos actualizamos la posición del objeto obj.transform.position = part.GetPrevPosition(); //si tiene que crecer, añadimos una nueva parte if (crecer && obj == ultimaParte) { crecer = false; AddPart(); } //si hay direcciones pendientes, cambiamos de dirección if (part.GetNumDirections() > 0) { Vector2 newDirection = part.NextDirection(); obj.transform.position = Vector3.Lerp(obj.transform.position, new Vector3(obj.transform.position.x + newDirection.x, obj.transform.position.y + newDirection.y), Time.deltaTime * speed); } //si no hay direccion pendiente mantenemos la actual else { obj.transform.position = Vector3.Lerp(obj.transform.position, new Vector3(obj.transform.position.x + part.GetCurrentDirection().x, obj.transform.position.y + part.GetCurrentDirection().y), Time.deltaTime * speed); } //comprovamos si hay siguiente parte e iniciamos movimiento si no se mueve GameObject nextGameObject = part.GetNextPart(); if (nextGameObject) { SnakePart partNextObject = nextGameObject.GetComponent <SnakePart>(); if (partNextObject.GetCurrentDirection() == Vector2.zero) { partNextObject.NextDirection(); } } } //si aun no se ha llegado a la siguiente posición, continua con el actual movimiento else { obj.transform.position = Vector3.Lerp(obj.transform.position, new Vector3(obj.transform.position.x + part.GetCurrentDirection().x, obj.transform.position.y + part.GetCurrentDirection().y), Time.deltaTime * speed); } } //cambiamos a la parte siguiente si existe obj = part.GetNextPart(); if (obj) { part = obj.GetComponent <SnakePart>(); } } text.text = numParts.ToString(); } }