En este tutorial aprenderás a implementar un sistema de verificación de edad en Unity, muy útil cuando tu juego o aplicación necesita restringir el acceso a ciertos contenidos (por ejemplo, anuncios o compras dentro de la app).
El flujo será el siguiente:

  1. El usuario pulsa un botón (por ejemplo, Ver Ads o Entrar en la Tienda).
  2. Se abre un teclado numérico donde el jugador debe introducir su año de nacimiento (4 dígitos).
  3. Si el cálculo demuestra que el usuario es mayor de edad, se abre el panel correspondiente.
  4. Si es menor, el teclado se cierra y no se muestra nada más.

🖼️ Paso 1: Crear la UI en Unity

  1. Abre tu escena en Unity.
  2. Crea un Canvas (si no lo tienes ya en la escena).
  3. Dentro del Canvas, añade un GameObject y nómbralo como AgeVerification
  4. Añade un GameObject Container que será el padre de Year y Keyboard
  5. Dentro de Container, añade otro GameObject y nómbralo Keyboard. Este será nuestro teclado numérico.
  6. Dentro del Keyboard, añade:
    • Diez botones (0–9) que servirán de teclado.
    • Opcionalmente, un botón Limpiar.
  7. Al mismo nivel que Keyboard, añade un GameObject llamado Year, y en su interior, un TMP_Text para mostrar los dígitos introducidos. Nómbralo Text.
  8. En Container, he añadido un Componente Vertical Layout para separar Year y Keyboard verticalmente.
  9. En Keyboard he añadido un Grid Layout Group para ordenar automáticamente los botones en forma de grid.
  1. Crea otros dos paneles fuera del teclado:
    • AdsPanel → donde irán tus anuncios.
    • ShopPanel → para la tienda.

Ambos estarán desactivados por defecto.


💻 Paso 2: Crear el script AgeVerification

En tu carpeta Scripts, crea un archivo llamado AgeVerification.cs y pega el siguiente código:

using TMPro;
using UnityEngine;

public class AgeVerification : MonoBehaviour
{
    [Header("UI")]
    public TMP_Text AgeText;
    public GameObject keyboardPanel;   // Panel del teclado numérico
    public int minAge = 18;            // Edad mínima requerida

    private const int MaxDigits = 4;
    private string _ageInput = string.Empty;
    private GameObject _pendingAdultPanel;

    void Awake()
    {
        UpdateAgeLabel();
        if (keyboardPanel != null) keyboardPanel.SetActive(false);
    }

    // Inicia la verificación desde cualquier botón (Ads, Tienda, etc.)
    public void StartAgeGate(GameObject panelToEnableIfAdult)
    {
        _pendingAdultPanel = panelToEnableIfAdult;
        ClearAge();
        ShowKeyboard();
    }

    // Se llama desde los botones 0–9
    public void ClickNumber(int number)
    {
        if (_ageInput.Length >= MaxDigits) return;

        _ageInput += number.ToString();
        UpdateAgeLabel();

        if (_ageInput.Length == MaxDigits)
            AgeCompleted();
    }

    public void ClearAge()
    {
        _ageInput = string.Empty;
        UpdateAgeLabel();
    }

    public void Backspace()
    {
        if (_ageInput.Length == 0) return;
        _ageInput = _ageInput[..^1];
        UpdateAgeLabel();
    }

    private void AgeCompleted()
    {
        bool isAdult = false;

        if (int.TryParse(_ageInput, out int year))
        {
            int currentYear = System.DateTime.Now.Year;
            int age = currentYear - year;

            isAdult = age >= minAge && age < 120;
        }

        HideKeyboard();

        if (isAdult && _pendingAdultPanel != null)
            _pendingAdultPanel.SetActive(true);

        _pendingAdultPanel = null;
        ClearAge();
    }

    private void ShowKeyboard() => keyboardPanel?.SetActive(true);
    private void HideKeyboard() => keyboardPanel?.SetActive(false);

    private void UpdateAgeLabel()
    {
        if (AgeText != null) AgeText.text = _ageInput;
    }
}

⚙️ Paso 3: Conectar los botones

  1. Selecciona cada botón numérico (0–9).
  2. En el componente Button → OnClick(), arrastra el GameObject que tiene el script AgeVerification.
  3. Selecciona la función AgeVerification.ClickNumber(int) e introduce el número correspondiente.
  1. Haz lo mismo con los botones especiales:
    • Botón Limpiar → ClearAge()

🚪 Paso 4: Integrar los orígenes (Ads y Tienda)

  1. Selecciona el botón Ads y en su evento OnClick() llama a: AgeVerification.StartAgeGate(AdsPanel); Así, el flujo abrirá el teclado y solo si el usuario es mayor de edad se activará el panel AdsPanel.
  2. Haz lo mismo con el botón Tienda, pero pasando ShopPanel.

✅ Resultado final

  • El jugador pulsa el botón Ads o Tienda.
  • Se abre el teclado numérico.
  • Introduce su año de nacimiento (4 dígitos).
  • Si es mayor de edad, se abre el panel correspondiente.
  • Si es menor, el teclado se cierra y no ocurre nada más.

🚀 Conclusión

Con este sistema has aprendido a:

  • Crear un teclado numérico en Unity.
  • Implementar un script reutilizable para varios orígenes (ads, tienda, etc.).
  • Validar la edad calculando el año de nacimiento introducido.
  • Controlar la apertura y cierre automático de paneles según la verificación.

Este es un ejemplo básico, pero puedes expandirlo fácilmente:

  • Mostrar mensajes de error si la edad no es válida.
  • Guardar en PlayerPrefs si ya verificó la edad una vez.
  • Añadir efectos visuales al abrir/cerrar el teclado.

Documentación Oficial:

Share this content:

por David Cantón Nadales

David Cantón Nadales, ingeniero de software de Sevilla, España, es autor del bestseller Build Your own Metaverse with Unity. Reconocido como Microsoft MVP y Top Voices en Aplicaciones Móviles de LinkedIn. Con más de 20 años de experiencia, David ha liderado cientos proyectos a lo largo de su carrera, incluyendo videojuegos y aplicaciones de realidad virtual y aumentada con Oculus, Hololens, HTC Vive, DayDream y LeapMotion. Ha trabajado como Tech Lead en importantes multinacionales como Grupo Viajes El Corte Inglés y actualmente en SCRM Lidl del Grupo Schwarz. Fue embajador de la comunidad Samsung Dev Spain y organizador del Google Developers Group Sevilla. Durante el confinamiento por COVID-19, destacó como emprendedor social con la creación de Grita, una red social que facilitaba el apoyo psicológico entre personas. En 2022, ganó los Samsung Top Developers Awards.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.