Si has creado juegos con Unity, hay algunas diferencias clave que necesitarás conocer para empezar en All Out.
Si vienes de Unity, te sentirás como en casa con entidades + componentes, una jerarquía, un inspector, y prefabs reutilizables. El mayor cambio de mentalidad es que los juegos de All Out son multijugador primero: el estado del juego se sincroniza por ti, y escribes la mayor parte de la lógica como si fuera autoritativa del servidor por defecto.
Resumen: Qué es diferente frente a Unity
El multijugador es lo predeterminado: el estado del juego se replica automáticamente del servidor a los clientes. Generalmente no escribes RPC, SyncVars ni lógica de aparición de Netcode.
Sé intencional sobre dónde se ejecuta el código:
Usa entradas de juego/UI que afecten el estado en servidor + cliente local (ver is_local_or_server() patrones en las pautas de autoría de CSL).
Usa lógica puramente cosmética solo local.
Evita el estado singleton global: varios jugadores se conectan a la misma sesión. Prefiere almacenar el estado en el jugador o en componentes del mundo.
Primero móvil: evita asumir solo teclado a menos que tu juego apunte explícitamente a PC.
Mapa de conceptos (Unity → All Out)
Unity
All Out
Escena
Escena (mundo)
GameObject
Entidad
Transform
Transformación de entidad (posición/rotación/escala)
Diseño del proyecto: dónde viven los “scripts” y los “assets”
Scripts: El código de tu juego vive en archivos .csl . Los proyectos nuevos comienzan con un main.csl que importa el motor y define puntos de entrada del ciclo de vida. Ver Primeros pasos con CSL.
Activos: Los recursos del juego viven bajo el directorio /res de tu proyecto y se referencian por ruta sin el prefijo /res (ejemplo: "ui/button.png"). Ver Assets y Resources.
Imports (diferencia importante)
En Unity, cada script de C# se compila y puede usar sus propias directivas using . En All Out, mantén los imports centralizados:
Importa "core:ao" en main.csl
Si agregas una carpeta (como ui/), importa la carpeta una vez en main.csl
Evita agregar imports en otros archivos
Ejemplo:
Ciclo de vida: MonoBehaviour → CSL
En Unity normalmente adjuntas un MonoBehaviour a un GameObject e implementas:
Start() / Awake()
Update() / LateUpdate()
OnDestroy()
En CSL, normalmente usarás:
Procs globales en main.csl (para configuración a nivel de juego)
Métodos del ciclo de vida del componente en tus componentes
Si estás acostumbrado a OnTriggerEnter / OnCollisionEnter, ten en cuenta que CSL no se basa en callbacks de colisión para scripting de gameplay. Un patrón común es consultar componentes cercanos y comprobar distancias.
Mentalidad multijugador: entradas, UI y “dónde se ejecuta el código”
En Unity a menudo puedes asumir “mi cliente posee mi personaje”. En All Out, piensa con autoridad del servidor:
Entrada/UI que afecta el gameplay: ejecútala donde pueda afectar el estado autoritativo (comúnmente servidor + cliente local)
Elementos cosméticos: solo local
Consulta las pautas de autoría de CSL para ver ejemplos que usan is_local_or_server() frente a is_local().
Errores comunes al pasar de Unity a All Out
Gestores singleton: prefiere estado por jugador o por entidad en lugar de GameManager singletons de estilo .
Hábitos de imports: importa el motor y las carpetas desde main.csl (no disperses imports en muchos archivos).
Asumir un solo jugador: piensa siempre “¿qué pasa con 10 jugadores conectados?”
Entrada de escritorio codificada de forma fija: evita requerir teclado/ratón a menos que sea intencional.