Engine

Il motore di gioco: grafo di scena, componenti, scripting, fisica, una pipeline PBR, editor di mondo e build native per desktop e mobile.

In breve#

Un motore di gioco completo nel browser: costruisci una scena, dalle un comportamento, premi play ed esportala sul web o in un binario nativo per desktop e mobile.

È di gran lunga il più grande studio di aukimi. Questa pagina lo mappa come fa l'interfaccia, per il cassetto in cui vive ogni pannello, invece di elencare le funzionalità in ordine alfabetico.

Il layout#

Engine, con il grafo di scena, il viewport, l'inspector e la console

Barra dei menuFile · Edit · View · Windows · Run · Plugins
Barra degli strumentinome del progetto, annulla/ripeti, il selettore di modalità del viewport (3D · 2.5D · 2D · TXT), il selettore di scena, i quattro pulsanti dei pannelli, FX Master, HUD, la casella della risoluzione, il transport (play, pausa, stop) e Build
Sinistrauna colonna di icone, grafo di scena, elenco, audio, console, e il pannello che apre
Centroil viewport, con la propria barra dei gizmo (traslazione, rotazione, scala, mondo/locale, griglia, snapping, inquadratura) e un selettore di qualità
Destral'inspector dell'entità selezionata
In bassoConsole e Profiler, fianco a fianco
Barra di statomodalità, dimensione del viewport, numero di entità, stato della griglia

I quattro pulsanti dei pannelli#

La barra degli strumenti di Engine: nome della scena, annulla, il selettore di modalità del viewport, i quattro pulsanti dei pannelli e il transport

Non si comportano tutti allo stesso modo, ed è utile conoscere la differenza prima di mettersi a cercare qualcosa:

PulsanteComportamento
Systemsapre un cassetto
Toolsapre lo stesso cassetto, Systems e Tools si chiudono a vicenda
Assetsattiva o disattiva un dock persistente
Scriptsapre una finestra modale

Systems e Tools condividono uno slot di proposito; sono posti fianco a fianco perché si veda che lo fanno.

Systems#

I sottosistemi del motore stesso: quello che una scena ha, piuttosto che quello con cui si costruisce.

GruppoPannelli
Pluginsil browser dei plugin
RenderingRendering · Rendering Pipeline · Look Presets · Shader Lab · Render Style · Shadows · Mesh LOD · Post Process Volumes
GameplayMultiplayer room · Physics · AI & Navigation · Gameplay Zones
WorldScene Graph · Level Streaming · Baking · Light Probes · Decals

Il rendering#

L'interruttore FX Master sulla barra degli strumenti accende e spegne l'intera pipeline di post-processing con un solo clic: il modo più rapido per vedere quanto ti costa. Individualmente: bloom, profondità di campo, SSR, SSAO, GTAO, SSGI, temporal AA, FXAA, motion blur, nebbia volumetrica, ombre di contatto, color grading, grana pellicola, aberrazione cromatica, vignettatura e tone mapping, più la geometria in stile Nanite e l'occlusione Hi-Z.

I Look Presets sono configurazioni complete di quanto sopra. Render Style cambia il registro, stilizzato invece che fotografico. Shader Lab è dove scrivi i tuoi. Mesh LOD e Post Process Volumes sono i due che si ripagano da soli su una scena grande: livello di dettaglio per singola mesh, e post-processing che si applica solo dentro un volume.

Il motore di rendering è Babylon.js. Parte su WebGL e passa da solo a WebGPU quando il browser lo supporta, tornando indietro da solo se questo fallisce.

I sistemi di gameplay#

Physics copre sia il solver 3D (Havok) sia quello 2D. AI & Navigation è la navmesh e gli agenti che la usano. Gameplay Zones sono volumi trigger con un comportamento agganciato. Multiplayer room collega la scena a un server Colyseus (vedi sotto).

I sistemi di mondo#

Level Streaming carica e scarica parti di un livello man mano che il giocatore si muove. Baking precalcola l'illuminazione; Light Probes catturano la luce indiretta e i riflessi in punti dello spazio. Decals proiettano dettaglio sulle superfici senza aggiungere geometria.

Tools#

Quello con cui si costruisce.

GruppoPannelli
EditorsScripts · Blueprint Editor · UI Editor · Tilemap
WorldSky Studio · Terrain · Water · Tree Generator · Plant Generator · Rock Generator · Kitbash
GameplayInventory · Data tables · Dialogue Trees
AnimationTimeline · Cinematic Sequencer · Camera Tools
AudioAudio Manager
DebugProfiler

I generatori di mondo#

Terrain, acqua, cielo e quattro generatori di contenuto: alberi, piante, rocce e pezzi da kitbash. Hanno un capitolo tutto loro più avanti.

La scrittura del gameplay#

Inventory, Data tables (Tools → Data) e Dialogue Trees sono i tre editor che permettono a un gioco di avere contenuto senza che quel contenuto viva nel codice, nel dettaglio più avanti.

L'animazione#

Timeline per l'animazione delle entità, Cinematic Sequencer per le inquadrature, e Camera Tools per il framing. Vedi Animazione e telecamera.

Gli editor di mondo#

Sette pannelli sotto Tools → World. Sono il modo rapido per riempire una scena, e il motivo per cui un livello non deve per forza cominciare con una sessione di modellazione.

Terrain#

Una scena può contenere più terreni; ognuno è una riga nell'elenco Terrains e viene creato a una di tre risoluzioni, 128² (veloce), 256² (bilanciata) o 512² (dettagliata).

Il pannello ha dieci modalità, e hanno una cosa in comune: la maschera dipinta in Masks limita ognuna di esse.

ModalitàCosa fa
Sculptdiciassette pennelli sul campo di altezza
Paintfino a otto livelli di texture, su due splatmap
Generaterumore, texturing automatico e import di elevazioni reali
Sketchdisegna creste e valli, sintetizza un terreno che le rispecchi
Maskslimita ogni altra modalità a una parte della superficie
Waterlivello del mare, e la scelta tra acqua di terreno e un oceano FFT
Pathsuna strada di Bézier cotta nel terreno
Vegetationdispersione a pennello o basata su regole
SDFun terreno raymarchato, renderizzato invece che poligonizzato
Biomesterreno, piante, alberi e rocce in un solo passaggio

Sculpt. Alza 1, Abbassa 2, Smussa 3, Appiattisci 4, Pizzica 5, Gonfia 6, Rumore 7, Accentua 8, Timbro 9, Terrazza 0, Erodi E, Riempi F, Clona C (Alt-clic imposta la sorgente), Sfoca B, Rampa R, più i due strumenti d'acqua: River traccia un corso, Lake riempie in un punto.

Il pennello stesso ha una propria dinamica: curva di pressione, mouse pigro (lazy mouse), attenuazione, simmetria, pattern, e variazione casuale sia su dimensione che su forza. Stamp porta sei forme: cratere, picco montuoso, plateau, valle fluviale, cupola, collinetta di rumore. L'erosione esiste in due forme: il pennello E è locale, mentre Adjustments applica erosione idraulica, termica ed eolica su tutto il terreno.

Paint. Otto livelli, perché due splatmap RGBA portano quattro canali ciascuna. La libreria di materiali è organizzata per categoria: erba, terra, foresta, rocce, strade e superfici, scogliere, sabbia, neve, vulcanico, palude, fantasy, e i tuoi, e ogni livello porta la propria scala UV, lo spostamento (displacement), una mappa di dettaglio e un rilievo di superficie (forza del bump, profondità di parallasse). Break texture tiling (cell bombing) è l'impostazione che impedisce a una texture di terreno ripetuta di leggersi come una griglia.

Generate costruisce a partire dal rumore, poi Generate Textures assegna i materiali per altitudine e pendenza, con una variazione d'ombra nord/sud e litorali di sabbia o ciottoli dove c'è acqua. Real World importa tile di elevazione pubbliche NASA/USGS: scegli un punto di riferimento o digita le coordinate, imposta lo zoom, e il pannello riporta l'intervallo di elevazione recuperato.

Sketch è l'altra via d'accesso. Disegna tratti di creste e valli su una mappa 2D, scegli fino a tre paesaggi sorgente reali, e il terreno viene sintetizzato per rispecchiare lo sketch, eventualmente fuso con quello già presente, texturizzato ed eroso nello stesso passaggio.

Masks si dipingono con un pennello e poi si modificano nel loro insieme: cancella, inverti, sfoca, espandi, riduci. Le maschere intelligenti ne derivano una dal terreno stesso: per altezza, per pendenza, per livello o per cavità.

Paths. Clicca per posare punti di controllo e una curva liscia li attraversa; trascina i punti ambra per spostarli, le maniglie ciano per curvare. Bake Path appiattisce il terreno sotto, dipinge la texture e alza gli argini.

Vegetation ha due metà. Il pennello posiziona e rimuove istanze a mano; le regole di dispersione le posizionano per condizione, peso dei livelli, seed, scala minima/massima, e la fascia di altezza e pendenza che ogni risorsa accetta. Erba e fiori sfumano oltre una distanza di visualizzazione configurabile, e Export to Scene trasforma le istanze in oggetti di scena.

Biomes è la versione a un clic di tutto quanto sopra: scegli un bioma, spunta le categorie che vuoi (terreno, alberi, piante ed erba, fiori, alghe vicino all'acqua, rocce), imposta una densità, e Apply Biome dipinge il terreno e disperde tutto, riportando quante istanze di ciascuno ha posizionato. La varietà d'età degli alberi mescola giovani germogli e alberi antichi invece di timbrare lo stesso albero ovunque, e il ground blend (RVT) fonde la base di ogni roccia nel colore del terreno sottostante.

SDF è un renderer diverso, non uno strumento diverso: il terreno viene raymarchato da un campo di distanza, forma per ottave, lacunarità e persistenza, texturing per erba/roccia/neve con una linea della neve e una soglia di pendenza, e ombre morbide, ambient occlusion e nebbia proprie.

I terreni grandi hanno un sistema di LOD con geometria a gonna (skirt geometry, che è ciò che chiude i vuoti tra i livelli), transizioni fluide, frustum culling e un overlay di statistiche. Le heightmap si importano ed esportano come PNG a 16 bit, PNG a 8 bit o RAW a 16 bit; le splatmap come un unico PNG RGBA o un file per livello; e l'intero terreno, o solo le sue impostazioni, come preset.

Sky Studio#

L'atmosfera. Quattro tipi di cielo: uniforme, sfumato, HDRI, e un'atmosfera fisica con scattering di Rayleigh e di Mie, assorbimento di Mie, ozono, albedo del suolo, torbidità, raggio del pianeta e spessore dell'atmosfera.

Tutto dipende dall'ora del giorno, che può scorrere da sola: il sole per elevazione, azimut e intensità, con una propria intensità d'ombra; la luna per fase; le stelle con scintillio; e un'aurora. Le nuvole volumetriche hanno spessore, erosione, scala del rumore e distorsione a spirale (curl), e ricevono luce per assorbimento, scattering, ambiente e un termine powder; i cirri e la fascia di Venere sono separati. La prospettiva aerea è la foschia che si ispessisce con la distanza e sfuma la geometria lontana verso l'orizzonte: è l'impostazione che fa leggere un paesaggio come grande.

Dieci preset da cui partire: giorno pieno, alba, tramonto, crepuscolo, notte, coperto, tempestoso, deserto, artico e spazio.

L'acqua#

Due schede: Ocean (FFT) per il mare aperto, Shore & lakes per tutto il resto.

⚠️ L'acqua si crea nell'editor Terrain: gli strumenti River e Lake, oppure Show Water, e si regola qui. Aprire questo pannello su una scena senza acqua dà impostazioni senza nulla a cui applicarle.

L'acqua costiera porta colore, opacità, forza e velocità delle onde, increspatura (choppiness), larghezza della schiuma e Fresnel, con riflessi in screen space e sfocatura di rifrazione. Sotto c'è lo shader WGSL vero e proprio: due scale di normali con le proprie direzioni e velocità di scorrimento, soglia e morbidezza della schiuma, forza di rifrazione e indice di rifrazione, e la luce dentro l'acqua: assorbimento, torbidità, scattering e translucenza.

Tree Generator#

Due modalità, Tree e Trunk. Un albero è deciduo o sempreverde, ha un'età che va da germoglio ad antico, e può essere vivo, morto, uno snag (tronco spezzato in piedi) o un tronco caduto. Tutto è generato da seme, quindi Randomize seed è il modo più rapido di ottenere un albero diverso con lo stesso carattere.

La forma si regola per livello di ramo: figli, lunghezza, raggio, rastremazione (taper), nodosità, torsione, sezioni, segmenti, angolo e altezza di partenza, più la variazione naturale, il fototropismo e il gravitropismo: i due che fanno piegare un albero verso la luce e curvare sotto il proprio peso, e una forza globale con la propria intensità. La base ha l'allargamento delle radici (root flare, lobi e altezza) e il contrafforte.

Le foglie sono billboard, a faccia singola o doppia, con conteggio, dimensione, angolo, varianza, aggregazione (clump), arricciamento, cadenza (droop), lucentezza e normali arrotondate. La corteccia viene in sei stili: scanalata, di pioppo, di pino, di betulla, liscia, di palma, con rilievo, muschio, base umida, scolorimento solare, ambient occlusion della chioma e virata autunnale. Quattro stagioni cambiano tutto l'aspetto in una volta.

Forest ne disperde molti in una volta: conteggio, raggio di diffusione, varianza di scala, e un mix di età (unica, naturale, giovane, vecchia, uniforme). Add age progression posiziona in fila tutti e cinque gli stadi di vita, il modo più rapido per giudicarli fianco a fianco. Un albero esce come entità di scena o come GLB, e ogni impostazione si può salvare come preset.

Plant Generator#

Cinque tipi: fiore, cespo, erbacea, felce, erba, che condividono uno stelo (conteggio, altezza, spessore, curvatura, colore) e foglie (conteggio, dimensione, larghezza, angolo). Le felci aggiungono coppie di foglioline, ampiezza e arco della fronda; l'erba aggiunge conteggio dei fili e arco.

Un fiore è opzionale su ognuno di essi: petali, file di petali, lunghezza, larghezza, arricciamento, punta, fioritura, dimensione del centro, e tre colori (petalo, punta del petalo e centro), con translucenza e rugosità per il modo in cui la luce attraversa la foglia. Aggiungine uno alla scena, dispersone molti, o esporta in GLB.

Rock Generator#

Tre tipi: roccia, pietra, scogliera, in tre stili: realistico, toon, o low poly con contorno.

La forma è rumore su una sfera: scala, forza, ottave, persistenza, distorsione e un'opzione crestata, più gli strati con la propria frequenza e i tagli a faccette con profondità e nitidezza per la pietra angolosa. Raggio, dettaglio, appiattimento, varianza di forma e base piatta decidono la silhouette, e quattro preset di erosione (fresca, consumata, naturale, erosa) muovono tutto quanto in una volta.

La superficie ha variazione di colore, venature minerali, licheni e muschio, una texture di dettaglio con la propria ripetizione e forza, blending triplanare e rilievo in parallasse. Usa di default un materiale Stone incluso; invia un materiale da Matter all'Engine per sostituirlo.

Kitbash, la stessa libreria di Sculpt#

Kitbash è condiviso con Sculpt: questo pannello e l'Edit Forge di Sculpt leggono un'unica libreria. Un pezzo costruito lì si posiziona qui, e un pezzo dipinto qui può essere salvato lì.

Quello che la scena memorizza è il pezzo e le sue dimensioni, non i suoi vertici: ecco perché un edificio fatto di kitbash costa quasi nulla nel file e può essere aggiornato in seguito a partire dalla sua sorgente.

Arma un pezzo dal catalogo e ogni clic sinistro lo posiziona. Tre modalità di snapping decidono dove atterra: on terrain (i pezzi seguono l'altezza del terreno sotto di loro), on water (il piano di costruzione si posiziona al livello dell'acqua), e snap to sockets (punta un punto di connessione su un pezzo già posizionato e quello nuovo ruota per raggiungerlo). Una catena cresce dalla sua estremità libera, i socket occupati escono dai candidati, e ogni clic è un proprio passo di annullamento. Ctrl/Cmd resta riservato alla selezione e Alt alla rotazione. Le collezioni mantengono la propria sorgente e versione, così un'istanza può essere aggiornata quando l'originale cambia.

Gli altri editor#

Gli editor di mondo riempiono una scena; questi le danno un'interfaccia, una mappa, le sue tabelle di contenuto e gli strumenti per verificare quanto costa.

L'editor HUD#

Tools → Editors → UI. Sei schede: Templates, Elements, Layers, Preview, Style e Script, sopra un'anteprima che passa tra tre dimensioni di dispositivo: desktop 960×540, tablet 768×432, mobile 375×667.

Gli elementi vengono in tre gruppi (Display, Data, Input) e si annidano: panel e flex contengono figli, quindi la scheda Layers è un vero albero e non un elenco piatto. La cronologia arriva a cinquanta passi.

⚠️ La scheda Style è CSS-simile, e la differenza conta. L'HUD è disegnato sul canvas dalla GUI di Babylon, e il vero CSS non lo raggiunge. Le regole che scrivi qui si traducono in proprietà della GUI; i selettori sono #nome per un elemento, .tipo per un genere (.text, .panel) e * per tutto.

La scheda Script è l'altro modo di costruirne uno: l'API ui.*, createText, createPanel, createProgress, createButton, con due modi di eseguirla. Build Layout la esegue a tempo di progettazione e lascia elementi reali da regolare a mano; Run Live la esegue nel gioco.

Due collegamenti verso l'esterno: la grafica dell'HUD si apre in Inkwell o Vectra ed è collegata anziché copiata, e un documento Vectra può essere importato come elementi HUD. L'elemento minimappa è a sé stante, con portata, griglia e marcatori per giocatore, nemici, alleati, oggetti e obiettivi.

L'editor di tilemap#

Undici strumenti: pennello, gomma, riempimento, rettangolo, selezione, contagocce, timbro, autotile, prop, zona e percorso, su quattro proiezioni di mappa: ortogonale, isometrica, isometrica sfalsata e esagonale.

L'autotiling viene fornito con quattro template, e il numero nel nome di ciascuno è il numero di tile che si aspetta: Blob 47 (angoli e bordi completi), Wang 16 (basato sui bordi), Simple 4 (NSEO), e RPG Maker A2 (48 tile, compatibile con le mappe create lì).

Due livelli si posano sopra le tile stesse. Le zone dipingono significato di gameplay: costruibile, acqua, foresta, strada, campo, residenziale, commerciale, bloccato; e i prop posizionano oggetti per categoria: alberi, rocce, edifici, vegetazione, acqua, percorsi. Le mappe vivono nel database del browser stesso, quindi una mappa non salvata sopravvive a un ricaricamento.

Inventory, data tables e dialogue#

I tre editor che permettono a un gioco di avere contenuto senza che quel contenuto viva nel codice.

Inventory modifica un catalogo e lo applica alla scena. Un oggetto porta delle azioni, e un'azione è un trigger: use, equip, unequip, più uno di otto tipi: message, heal, damage, grant, remove, event, toast, scene. Il pannello stesso ha tre layout (griglia, elenco, compatto), tre preset di aspetto (graphite, midnight, warm), e quattro slot visivi (sfondo, slot, equipaggiamento, tooltip) che si aprono in un altro modulo per un ridisegno adeguato.

Data tables sono tipizzate: una colonna è text, number, bool o ref. Il CSV entra ed esce. Ogni modifica passa attraverso funzioni pure, ed è questo che mantiene identica la tabella scritta dall'export a quella letta dalla build.

Dialogue trees sono nodi con un parlante e una battuta. Un nodo continua verso un singolo next, oppure si ramifica in choices, ciascuna con il proprio testo e la propria destinazione: l'interruttore di ramificazione è l'unica decisione strutturale dell'editor.

Animazione e telecamera#

Cinematic Sequencer costruisce sequenze con una durata e un flag di loop, una traccia per entità, e keyframe catturati alla playhead: Add Key prende il valore corrente dell'entità invece di chiedertelo digitato. L'editor a grafo sottostante mostra il tempo contro il progresso, con maniglie rotonde per l'easing: la pendenza è la velocità. Le inquadrature hanno una propria durata, ed è disponibile un framing Cinemascope (1,422:1) per il letterbox.

Camera Tools copre FOV, posizione, target, modalità e velocità, più i bookmark per i punti di vista a cui torni spesso, e i layer di telecamera.

L'audio#

L'Audio Manager contiene eventi audio, tracce e un mixer con canali e categorie. Gli effetti per singola sorgente sono un low-pass, un high-pass e un reverb send; una modalità random sceglie tra più clip così che un suono ripetuto smetta di leggersi come un loop. Lo scrubbing riproduce l'audio mentre trascini la playhead.

Il profiler#

Una scomposizione del frame, non un contatore di frame: render della telecamera, valutazione delle mesh, particelle, sprite e compilazione degli shader, ciascuno marcato reale o stimato in modo che un numero venuto da una misurazione non venga mai scambiato per uno venuto da un modello. Accanto, i contatori: mesh e mesh attive, luci, telecamere, corpi fisici.

La registrazione è esplicita, e finisce su un elenco di Issues piuttosto che su un grafico da interpretare: FPS bassi, molte draw call, molti triangoli, molta memoria, misurati contro il frame rate obiettivo che imposti.

Costruire una scena#

Le entità#

Il viewport di Engine, con il gizmo sull'entità selezionata

Una scena nuova arriva con una Main Camera, una Directional Light, uno Skybox e un Ground Plane.

Il grafo di scena, con le quattro entità con cui parte una scena nuova

Cosa puoi aggiungere: Empty, Cube, Sphere, Cylinder, Plane, Light, Camera, Script, Mesh, più due famiglie che arrivano già cablate:

  • Characters: terza persona, prima persona (FPS), vista dall'alto, platform, base.
  • Props: Pickup (cura) e Hazard (danno).

Il grafo di scena cerca, filtra per tipo, aggiunge, duplica o elimina; le entità si annidano, e il reparenting è un trascinamento. Il posizionamento ha lo snapping e un pennello di dispersione (scatter brush) per popolare velocemente il terreno.

L'inspector#

Transform (posizione, rotazione, scala), un interruttore Enabled, e i componenti dell'entità: aggiunti, configurati e rimossi qui, con Add Script in fondo. Seleziona più entità e l'inspector passa alla modifica in batch, così una modifica di campo si applica a tutte.

La console#

Non solo un log. Filtra per livello (tutti, log, info, warning, error), collega un messaggio all'entità che l'ha prodotto, e porta un prompt di espressione: digita un'espressione, Invio la esegue sulla scena viva, le frecce scorrono la cronologia.

Dargli un comportamento#

Tre strade, e coesistono.

Gli script#

JavaScript con hook di ciclo di vita, e un riferimento tutto suo:

function start() {}                     // una volta, all'avvio dell'entità
function update(dt) {}                  // ogni frame
function fixedUpdate(dt) {}             // passo fisso, per la fisica
function onCollisionEnter(other) {}     // primo frame di contatto
function onCollisionStay(other) {}      // ogni frame di contatto continuo
function onCollisionExit(other) {}      // il contatto è appena finito
function onTriggerEnter(other) {}       // entrata in un volume trigger
function onTriggerExit(other) {}
function onMessage(msg, data, senderId) {}   // messaggistica tra entità
function onAnimationEvent(name, data) {}
function onDestroy() {}

Collisioni e trigger scattano sia in 2D che in 3D, e ogni lato riceve la propria normale di contatto: other.contact.normal punta dall'entità altra verso questa. È ciò che permette a uno script di distinguere "ci sono atterrato sopra" da "mi è atterrato addosso": uno schiacciamento da platform legge other.contact.normal.y > 0.5.

L'editor di script#

F2, oppure Add Script su un'entità. Un editor Monaco a schede, più script aperti insieme, ciascuno conservato nel database del browser piuttosto che nel file di progetto, così un buffer non salvato sopravvive a un ricaricamento.

Cinque dialetti, un solo programma. Il selettore di linguaggio offre JavaScript, BASIC, Python, C# e Rust. Quello che fa non è quello che sembra: JavaScript è la fonte di verità, e gli altri quattro sono viste transpilate dal JS memorizzato. Passare da Python a Rust non traduce il Python: torna al JS da cui quel Python è stato generato e traduce quello. È la traduzione a più salti a corrompere un programma, e l'editor si rifiuta di farla.

Tredici template in cinque categorie, ciascuno etichettato per difficoltà:

CategoriaTemplate
Basicsscript vuoto con gli stub del ciclo di vita
Movementrotazione automatica · WASD · movimento 3D basato sugli assi · salto fisico con rilevamento del terreno · camera in terza persona che segue
Gameplayzona trigger · barra della vita con danno e cura · spawner temporizzato
AIpattuglia con allarme di prossimità del giocatore
Advancedcutscene asincrona in stile Verse · concorrenza strutturata · test completo della superficie API

I preset dei controller di personaggio e i prop di avvio del gioco (pickup, hazard) compaiono nello stesso elenco, il modo pratico per posare un controller funzionante su un personaggio importato.

Eseguire e debuggare. F5 esegue, F9 imposta un breakpoint. Il debugger si ferma a una riga, avanza di un singolo frame, e riporta valori live tramite espressioni di watch. Script Lab esegue un programma senza alcuna entità collegata, un blocco appunti per l'API piuttosto che un componente su un oggetto.

Accanto al codice: un riferimento API, un elenco di simboli del file aperto, e una libreria di snippet con preferiti e recenti. Ctrl+S salva, Ctrl+F cerca, Ctrl+H sostituisce, e l'editor viene fornito con otto temi.

Blueprint e comportamenti#

Un grafo visuale, una libreria di comportamenti già pronti, e una macchina a stati sopra la pila di comportamenti.

Il grafo porta 267 nodi in ventidue gruppi: Math, Scene, Entity, Animation, Flow Control, String, Events, Physics, UI, Array, Vector, Transform, Debug, Input, Utility, Game, Boolean, Camera, Tween, Variables, Audio e le famiglie 2D e 3D. Tre proprietà li separano, e sono quelle che fanno il grafo: 17 nodi evento avviano l'esecuzione, 117 nodi puri calcolano un valore senza effetti collaterali né pin di esecuzione, e 9 nodi latenti finiscono più tardi: sono quelli che rendono esprimibile un ritardo o un tween senza dover scrivere una propria macchina a stati.

Quattro strumenti: seleziona V, panoramica H, commento C, reroute R, su un canvas che zooma da 0,1× a 3× con una minimappa. Le variabili vengono in sei tipi: booleano, intero, float, stringa, vector3 e oggetto. La descrizione di ogni nodo è nel suo tooltip, l'unico posto in cui una libreria di quella grandezza può spiegarsi.

La macchina a stati#

Un pannello tutto suo, e deliberatamente non quello dell'Animator: le condizioni dell'Animator sono un enum piatto con un'interfaccia scritta a mano per ogni caso, mentre queste sono strutturate e parlano del mondo.

Sette condizioni, e ognuna è una domanda posta alla scena: sees (un target taggato a portata, opzionalmente entro un angolo e in linea di vista), lost (nessun target da N secondi), distance contro una soglia, health, message received, timer (il tempo trascorso nello stato corrente), e flag (un valore sulla blackboard condivisa). Due combinatori, and e or, sono elencati entrambi anche se l'or esisteva già implicitamente (due transizioni verso lo stesso stato sono un or), ma "mi vede E ho ancora vita" non aveva alcuna forma.

⚠️ La vita si confronta come frazione del massimo, mai come valore assoluto. Una soglia "sotto 30 HP" non sopravvive a un ribilanciamento; "sotto 0,3" sì.

All'entrata o all'uscita da uno stato, quattro effetti: send un messaggio, set una chiave della blackboard, play una clip di animazione, o attiva un effetto nominato. Nessuno di essi muove nulla: il movimento resta ai comportamenti, e la macchina decide quale comportamento è attivo.

Una transizione può partire da *, cioè da qualsiasi stato. Il validatore restituisce l'elenco dei problemi invece di interrompersi al primo, così una macchina scritta a metà si disegna comunque e vedi tutto ciò che non va in una volta sola. Le posizioni dei nodi fanno parte dei dati: un grafo il cui layout vive fuori dalla scena torna riorganizzato in modo casuale per la persona successiva che lo apre.

BASIC#

La modalità viewport TXT è un ambiente BASIC classico con programmi dimostrativi inclusi, e il linguaggio ha un riferimento tutto suo. È un linguaggio vero qui, non un giocattolo: moduli multi-file (#INCLUDE), numerici tipizzati (interi con e senza segno a 8/16/32/64 bit, float32 e float64), record annidati, metodi oggetto con SELF, riferimenti (REF/BYREF), TRY/CATCH/FINALLY strutturato, compilazione condizionale, coroutine, handle tipizzati, e calcolo WebGPU con storage buffer e WGSL puro.

OPTION EXPLICIT è opzionale; le variabili implicite classiche restano il default, così i programmi importati continuano a funzionare.

Giocare e distribuire#

Play#

Play, Pause, Stop. Allo stop, un banner riporta cosa ha cambiato la sessione, così una modifica fatta in modalità play non viene mai mantenuta né persa in silenzio. Le sessioni possono essere registrate e riprodotte in un bug report, e i segnalibri di scenario permettono a un playtest di iniziare dal centro di un livello.

Build#

Build prende un tipo di gioco (rilevato dalla scena, o impostato a mano: sidescroller/platform, prima/terza persona, testuale) e un target.

  • Web: WebGPU con fallback su WebGL, WebXR opzionale (VR/AR), minificazione, un contatore FPS, e un'opzione embed assets che produce un unico file.
  • Desktop e mobile: build native. La scena viene esportata come dati (scene.glb + scene.json) e compilata tramite un progetto Bevy (Rust) generato; gli script vi girano invariati su un runtime QuickJS integrato.

La compressione è configurabile per asse, algoritmo, texture, mesh, con un preset di qualità che li lega insieme. Le build vengono conservate in una cronologia con le loro dimensioni (originale contro compressa) e possono essere riscaricate in seguito.

Una build nativa contiene solo quello che l'esportatore sa esportare. Il glTF non cattura shader personalizzati, thin instance, il cielo procedurale o il post-processing, quindi un sistema runtime non ancora portato sul lato Bevy risulterà mancante in una build desktop o mobile pur sembrando perfetto sul web. Verifica una build nativa prima di farci affidamento.

Multiplayer#

Il pannello Multiplayer room collega una scena a un server di gioco Colyseus. È disponibile un server di test condiviso e gratuito, senza account e senza configurazione; a un progetto può anche essere assegnato un server tutto suo. La stanza è identificata da un codice di condivisione che puoi tenere per te o distribuire.

File letti e scritti#

Formato nativo.engine
Import.glb, .gltf, .obj, .fbx, .png, .svg, .mp4, .webm, .mov, .scene
Exportuna build web, una build nativa desktop/mobile, scene.glb + scene.json

Inviare lavoro ad altri studi#

Accetta mesh da Sculpt, Retopo e Pigment, scene intere da Render, pixel art, animazioni, set di materiali PBR da Matter, rig 2D, progetti video, immagini, arte vettoriale e oggetti Vectra.

Produce rig 2D.

Un mock-up di schermata da Vectra arriva come struttura, non come immagine. Diventa una gerarchia HUD che Engine può disporre e scriptare: la differenza tra un design che puoi cablare e uno screenshot di quel design.

Scorciatoie#

Cmd/Ctrl + K raggiunge i comandi propri di Engine dalla palette, insieme a quelli globali. Engine ha anche un pannello di scorciatoie da tastiera dedicato e cercabile nelle proprie impostazioni; ne ha molte di più di quante ne starebbero in la pagina delle scorciatoie.

Limiti e problemi comuni#

  • Un viewport vuoto è di solito il browser, non la scena. Engine richiede WebGL 2; verifica che l'accelerazione hardware sia attiva.
  • Systems e Tools condividono un cassetto. Se un pannello è "sparito", probabilmente è nell'altro.
  • La console è il primo posto dove guardare, non l'ultimo: collega gli errori all'entità che li ha generati.
  • Un componente aggiunto in modalità play potrebbe non sopravvivere allo stop. Leggi il banner che appare quando fermi la sessione.
  • La fisica differisce tra 2D e 3D nel solver, anche se le callback di script sono le stesse. Un contatto a riposo in 2D viene rilevato con una pelle (skin) di 2 mm, perché il solver riporta la compenetrazione esattamente a zero prima che il rilevamento venga eseguito.