Liberación de Código #2: Robin Wood: El arquero Legendario
Robin Wood: El arquero legendario, un juego 2D de acción donde rescatas aldeanos disparando flechas. Descarga el código fuente Unity gratis.
Aprende paso a paso cómo crear un sistema de verificación de edad en Unity con teclado numérico y validación de año de nacimiento.

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:
GameObject y nómbralo como AgeVerificationContainer que será el padre de Year y KeyboardKeyboard. Este será nuestro teclado numérico.Keyboard, añade:
Keyboard, añade un GameObject llamado Year, y en su interior, un TMP_Text para mostrar los dígitos introducidos. Nómbralo Text.Container, he añadido un Componente Vertical Layout para separar Year y Keyboard verticalmente.Keyboard he añadido un Grid Layout Group para ordenar automáticamente los botones en forma de grid.

AdsPanel → donde irán tus anuncios.ShopPanel → para la tienda.Ambos estarán desactivados por defecto.
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;
}
}

AgeVerification.AgeVerification.ClickNumber(int) e introduce el número correspondiente.
ClearAge()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.ShopPanel.
Con este sistema has aprendido a:
Este es un ejemplo básico, pero puedes expandirlo fácilmente:
Documentación Oficial: