Muestra la puntuación
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 2 de 56.
El text de un texto es una cadena, así que un número tiene que convertirse en texto antes de mostrarse. Al unirlo a una cadena con +, se consigue esto: "Wood: " + wood es Wood: 12 cuando wood es 12, y wood.ToString() es 12. El int por sí solo no sirve: woodText.text = wood; falla con CS0029, No se puede convertir implícitamente el tipo 'int' en 'string'.
El número está en un campo int, y el texto solo lo muestra. Un método vuelve a escribir el texto a partir del campo; cada cambio en el número lo llama, y Start() también lo hace, para que el primer fotograma muestre el valor real en vez de lo que se escribió en el Inspector. Aquí, la barra espaciadora corta 3 troncos:
public TMP_Text woodText;
private int wood;
void Start()
{
ShowWood();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
wood += 3;
ShowWood();
}
}
void ShowWood()
{
woodText.text = "Wood: " + wood;
}El texto cambia solo cuando cambia wood. Volver a escribirlo en cada Update() se vería igual, pero crearía una cadena nueva 60 veces por segundo sin motivo. El orden importa: si se llamara a ShowWood() antes de wood += 3, mostraría la cantidad anterior, una pulsación por detrás.
Desafío
FácilEl jardinero planta árboles. Las flechas lo mueven y la barra espaciadora planta un retoño mientras queden semillas, como ya hace Gardener.cs. Muestra los conteos en pantalla; la escena vincula seedsText y treesText:
seedsTextmuestra las semillas restantes, comoSeeds: 4, ytreesText, los árboles plantados, comoTrees: 1.- Ambos son correctos desde el primer fotograma y después de cada plantación. El Inspector le da al jardinero 5 semillas, aunque los textos de la escena todavía dicen
Seeds: 10yTrees: ?. - Escribe un método que establezca ambos textos y llámalo donde sea necesario.
Pulsa Play, planta hasta que se agoten las semillas y después pulsa Check.
Pruébalo tú mismo
using UnityEngine;
using TMPro;
public class Gardener : MonoBehaviour
{
public float speed = 4f;
public int seeds = 10;
public GameObject saplingPrefab;
public TMP_Text seedsText;
public TMP_Text treesText;
private int trees;
void Update()
{
float move = Input.GetAxisRaw("Horizontal");
transform.Translate(move * speed * Time.deltaTime, 0f, 0f);
if (Input.GetKeyDown(KeyCode.Space) && seeds > 0)
{
Vector3 spot = new Vector3(transform.position.x, 0.5f, 1.5f);
Instantiate(saplingPrefab, spot, Quaternion.identity);
seeds--;
trees++;
}
}
// Muestra Seeds: y Trees: en los dos textos desde el primer fotograma
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Creación de juegos reales
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: corredor infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada