Engine

Silnik gier: graf sceny, komponenty, skrypty, fizyka, potok PBR, edytory świata i natywne buildy na desktop i urządzenia mobilne.

W jednym zdaniu#

Pełny silnik gier w przeglądarce: zbuduj scenę, nadaj jej zachowanie, naciśnij play i wyeksportuj ją do weba albo do natywnego binarnego pliku na desktop i urządzenia mobilne.

To zdecydowanie największe studio w aukimi. Ta strona mapuje je tak, jak robi to interfejs, według szuflady, w której mieszka każdy panel, zamiast wymieniać funkcje alfabetycznie.

Układ#

Engine, z grafem sceny, viewportem, inspektorem i konsolą

Pasek menuFile · Edit · View · Windows · Run · Plugins
Pasek narzędzinazwa projektu, cofnij/ponów, przełącznik trybu viewportu (3D · 2.5D · 2D · TXT), selektor sceny, cztery przyciski paneli, FX Master, HUD, pole rozdzielczości, transport (play, pause, stop) i Build
Lewa stronapasek ikon, graf sceny, lista, dźwięk, konsola oraz panel, który się otwiera
Środekviewport, z własnym paskiem gizmo (przesuń, obróć, skaluj, świat/lokalnie, siatka, przyciąganie, kadrowanie) i selektorem jakości
Prawa stronainspektor dla zaznaczonej encji
DółConsole i Profiler, obok siebie
Pasek stanutryb, wymiar viewportu, liczba encji, stan siatki

Cztery przyciski paneli#

Pasek narzędzi Engine: nazwa sceny, cofnij, przełącznik trybu viewportu, cztery przyciski paneli i transport

Nie wszystkie zachowują się tak samo, i warto znać różnicę, zanim zaczniesz czegoś szukać:

PrzyciskZachowanie
Systemsotwiera szufladę
Toolsotwiera tę samą szufladę, Systems i Tools zamykają się nawzajem
Assetsprzełącza trwały dok
Scriptsotwiera modal

Systems i Tools celowo dzielą jeden slot; są umieszczone obok siebie, żeby było widać, że to robią.

Systems#

Własne podsystemy silnika: rzeczy, które scena ma, a nie rzeczy, którymi tworzysz.

GrupaPanele
Pluginsprzeglądarka wtyczek
RenderingRendering · Rendering Pipeline · Look Presets · Shader Lab · Render Style · Shadows · Mesh LOD · Post Process Volumes
Gameplaypokój Multiplayer · Physics · AI & Navigation · Gameplay Zones
WorldScene Graph · Level Streaming · Baking · Light Probes · Decals

Rendering#

Przełącznik FX Master na pasku narzędzi włącza i wyłącza cały potok post-processingu jednym kliknięciem: najszybszy sposób, żeby zobaczyć, ile cię to kosztuje. Pojedynczo: bloom, depth of field, SSR, SSAO, GTAO, SSGI, temporal AA, FXAA, motion blur, mgła wolumetryczna, contact shadows, korekcja kolorów, ziarno filmowe, aberracja chromatyczna, winieta i tone mapping, plus geometria w stylu Nanite i okluzja Hi-Z.

Look Presets to całe konfiguracje powyższego. Render Style zmienia rejestr, stylizowany zamiast fotograficznego. Shader Lab to miejsce, w którym piszesz własne. Mesh LOD i Post Process Volumes to dwa, które zwracają się na dużej scenie: poziom szczegółowości per mesh, oraz post-processing działający wyłącznie wewnątrz wolumenu.

Renderer to Babylon.js. Startuje na WebGL i przełącza się na WebGPU, gdy przeglądarka je ma, wracając samodzielnie, gdy to się nie uda.

Systemy rozgrywki#

Physics obejmuje zarówno solver 3D (Havok), jak i ten 2D. AI & Navigation to navmesh i agenci na nim. Gameplay Zones to wolumeny wyzwalające z dołączonym zachowaniem. Multiplayer room łączy scenę z serwerem Colyseus (patrz niżej).

Systemy świata#

Level Streaming wczytuje i zwalnia części poziomu w miarę ruchu gracza. Baking przelicza oświetlenie z góry; Light Probes przechwytują światło pośrednie i odbicia w punktach przestrzeni. Decals rzutują detal na powierzchnie bez dodawania geometrii.

Tools#

Rzeczy, którymi tworzysz.

GrupaPanele
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

Generatory świata#

Terrain, water, sky i cztery generatory zawartości, drzewa, rośliny, skały i elementy kitbash. Mają swój własny rozdział poniżej.

Tworzenie rozgrywki#

Inventory, Data tables (Tools → Data) i Dialogue Trees to trzy edytory, które pozwalają grze mieć zawartość, bez konieczności trzymania jej w kodzie szczegółowo poniżej.

Animacja#

Timeline dla animacji encji, Cinematic Sequencer dla ujęć, oraz Camera Tools dla kadrowania. Zobacz Animacja i kamera.

Edytory świata#

Siedem paneli pod Tools → World. To szybki sposób na wypełnienie sceny, i powód, dla którego poziom nie musi zaczynać się od sesji modelowania.

Terrain#

Scena może zawierać kilka terenów; każdy jest wierszem na liście Terrains i jest tworzony w jednej z trzech rozdzielczości, 128² (szybka), 256² (zrównoważona) albo 512² (szczegółowa).

Panel ma dziesięć trybów, a łączy je jedno: maska namalowana w Masks ogranicza każdy z nich.

TrybCo robi
Sculptsiedemnaście pędzli na polu wysokości
Paintdo ośmiu warstw tekstur, na dwóch splatmapach
Generateszum, automatyczne teksturowanie i import prawdziwej rzeźby terenu
Sketchnarysuj grzbiety i doliny, zsyntetyzuj teren, żeby pasował
Masksogranicz każdy inny tryb do części powierzchni
Waterpoziom morza, oraz wybór między wodą terenu a oceanem FFT
Pathsdroga Béziera wypieczona w podłoże
Vegetationrozrzucanie pędzlem albo według reguł
SDFteren raymarchowany, renderowany, a nie meshowany
Biomesgleba, rośliny, drzewa i skały w jednym przebiegu

Sculpt. Podnieś 1, Obniż 2, Wygładź 3, Spłaszcz 4, Uszczypnij 5, Nadmuchaj 6, Szum 7, Wyostrz 8, Stempel 9, Terasuj 0, Erozja E, Wypełnij F, Klon C (Alt-klik ustawia źródło), Rozmyj B, Rampa R, plus dwa narzędzia wodne, River rysuje koryto, Lake wypełnia w punkcie.

Sam pędzel ma dynamikę: krzywa nacisku, leniwa mysz, opadanie, symetria, wzór oraz jitter zarówno rozmiaru, jak i siły. Stamp niesie sześć kształtów, krater, szczyt góry, płaskowyż, dolina rzeczna, kopuła, wzgórze szumowe. Erozja przychodzi w dwóch formach: pędzel E jest lokalny, podczas gdy Adjustments uruchamia erozję hydrauliczną, termiczną i wietrzną na całym terenie.

Paint. Osiem warstw, bo dwie splatmapy RGBA trzymają po cztery kanały każda. Biblioteka materiałów jest posortowana po kategorii, trawa, ziemia, las, skały, drogi i powierzchnie, klify, piasek, śnieg, wulkaniczne, podmokłe, fantasy i własne, a każda warstwa niesie skalę UV, przemieszczenie, mapę detalu i relief powierzchni (siła bump i głębokość parallax). Break texture tiling (cell bombing) to ustawienie, które powstrzymuje powtarzającą się teksturę gruntu przed czytaniem się jako siatka.

Generate buduje z szumu, potem Generate Textures przypisuje materiały według wysokości i nachylenia, z wariacją cienia północ/południe oraz brzegami piaszczystymi albo żwirowymi tam, gdzie jest woda. Real World importuje publiczne kafle wysokości NASA/USGS: wybierz punkt orientacyjny albo wpisz współrzędne, wybierz powiększenie, a panel zgłasza zakres wysokości, który przyniósł.

Sketch to inne wejście. Narysuj pociągnięcia grzbietów i dolin na mapie 2D, wybierz do trzech prawdziwych krajobrazów źródłowych, a teren zostanie zsyntetyzowany zgodnie ze szkicem, opcjonalnie wmieszany w to, co już tam jest, automatycznie teksturowany i erodowany w tym samym przebiegu.

Masks są malowane pędzlem, a potem edytowane jako całość: wyczyść, odwróć, rozmyj, powiększ, zmniejsz. Inteligentne maski wyprowadzają jedną z samego terenu, po wysokości, po nachyleniu, po warstwie albo po wklęsłości.

Paths. Kliknij, żeby upuścić punkty kontrolne, a gładka krzywa przechodzi przez nie; przeciągnij bursztynowe punkty, żeby je przesunąć, cyjanowe uchwyty, żeby wygiąć krzywą. Bake Path spłaszcza podłoże pod spodem, maluje teksturę i podnosi nasypy.

Vegetation ma dwie połowy. Pędzel umieszcza i usuwa instancje ręcznie; reguły rozrzutu umieszczają je według warunku, wag warstw, ziarna, minimalnej/maksymalnej skali oraz pasma wysokości i nachylenia, które akceptuje każdy zasób. Trawa i kwiaty zanikają za konfigurowalnym dystansem rysowania, a Export to Scene zamienia instancje w obiekty sceny.

Biomes to jednokliknięciowa wersja wszystkiego powyższego: wybierz biom, zaznacz kategorie, których chcesz (gleba, drzewa, rośliny i trawa, kwiaty, glony przy wodzie, skały), ustaw gęstość, a Apply Biome maluje podłoże i rozrzuca wszystko, zgłaszając, ile instancji każdego rodzaju umieścił. Różnorodność wieku drzew miesza sadzonki z prastarymi drzewami, zamiast stemplować to samo drzewo wszędzie, a ground blend (RVT) zlewa podstawę każdej skały z kolorem terenu pod nią.

SDF to inny renderer, nie inne narzędzie: teren jest raymarchowany z pola odległości, kształt przez oktawy, lacunarity i persistence, teksturowanie przez trawę/skałę/śnieg z linią śniegu i progiem nachylenia, oraz własne miękkie cienie, ambient occlusion i mgła.

Duże tereny mają system LOD z geometrią spódnicy (która zamyka szczeliny między poziomami), płynnymi przejściami poziomów, wycinaniem frustum i nakładką statystyk. Mapy wysokości importują się i eksportują jako 16-bitowe PNG, 8-bitowe PNG albo RAW 16-bit; splatmapy jako jeden PNG RGBA albo jeden plik na warstwę; a cały teren, albo tylko jego ustawienia, jako preset.

Sky Studio#

Atmosfera. Cztery typy nieba, solid, gradient, HDRI oraz fizyczna atmosfera z rozpraszaniem Rayleigha i Mie, absorpcją Mie, ozonem, albedo gruntu, turbidity, promieniem planety i grubością atmosfery.

Wszystko zależy od pory dnia, która może cyklować sama: słońce po wysokości, azymucie i intensywności, z własną intensywnością cienia; księżyc po fazie; gwiazdy z migotaniem; oraz zorza. Volumetric clouds mają grubość, erozję, skalę szumu i zniekształcenie curl, oraz światło przez absorpcję, rozproszenie, ambient i człon powder; cirrus i Belt of Venus są osobne. Aerial perspective to zamglenie gęstniejące z odległością i zanikające dalekiej geometrii w horyzont, to ustawienie, które sprawia, że krajobraz czyta się jako rozległy.

Dziesięć presetów na start: pogodny dzień, świt, zachód, zmierzch, noc, pochmurno, burzowo, pustynia, arktyka i kosmos.

Water#

Dwie karty: Ocean (FFT) dla otwartego morza, Shore & lakes dla reszty.

⚠️ Woda jest tworzona w edytorze Terrain: narzędziami rzeki i jeziora, albo Show Water, a dostrajana tutaj. Otwarcie tego panelu na scenie bez wody daje ustawienia, które nie mają do czego się przyłożyć.

Woda przybrzeżna niesie kolor, krycie, siłę i prędkość fal, choppiness, szerokość piany i Fresnela, z odbiciami w przestrzeni ekranu i rozmyciem refrakcji. Pod spodem jest sam shader WGSL: dwie skale normalnych z własnymi kierunkami i prędkością przewijania, próg i miękkość piany, siła refrakcji i współczynnik załamania, oraz światło wewnątrz wody, absorpcja, turbidity, rozpraszanie i przezierność.

Tree Generator#

Dwa tryby, Tree i Trunk. Drzewo jest liściaste albo iglaste, ma wiek od sadzonki po prastare i może być żywe, martwe, uschnięte na pniu albo powalone. Wszystko jest oparte na ziarnie, więc Randomize seed to najszybszy sposób na inne drzewo o tym samym charakterze.

Kształt jest per poziom gałęzi: dzieci, długość, promień, zwężenie, powykręcanie, skręt, sekcje, segmenty, kąt i wysokość startu, plus naturalna wariacja, fototropizm i grawitropizm: dwa, które sprawiają, że drzewo pochyla się do światła i opada pod własnym ciężarem, oraz globalna siła z własną mocą. Podstawa ma nasadę korzeniową (płaty i wysokość) i przypory.

Liście to billboardy, jedno- albo dwustronne, z liczbą, rozmiarem, kątem, wariancją, zbijaniem w kępki, zwijaniem, opadaniem, połyskiem i zaokrąglonymi normalnymi. Kora ma sześć stylów, ridged, aspen, pine, birch, smooth, palm, z reliefem, mchem, wilgotną podstawą, wypaleniem słońcem, ambient occlusion korony i jesiennym przebarwieniem. Cztery pory roku przełączają cały wygląd naraz.

Forest rozrzuca wiele naraz: liczba, promień rozrzutu, wariancja skali oraz mieszanka wieku (pojedynczy, naturalny, młody, stary, równy). Add age progression umieszcza wszystkie pięć etapów życia w rzędzie, co jest najszybszym sposobem na ocenienie ich obok siebie. Drzewo wychodzi jako encja sceny albo jako GLB, a każde ustawienie można zapisać jako preset.

Plant Generator#

Pięć rodzajów, kwiat, kępa, zioło, paproć, trawa, dzielące łodygę (liczba, wysokość, grubość, krzywizna, kolor) i liście (liczba, rozmiar, szerokość, kąt). Paprocie dodają pary listków, rozwarcie listków i łuk liścia; trawa dodaje liczbę i łuk źdźbeł.

Kwiat jest opcjonalny dla każdego z nich: płatki, rzędy płatków, długość, szerokość, zwijanie, ostrość czubka, rozkwit, rozmiar środka i trzy kolory, płatek, czubek płatka i środek, z przezierem i chropowatością dla tego, jak światło przechodzi przez liść. Dodaj jeden do sceny, rozrzuć wiele, albo wyeksportuj GLB.

Rock Generator#

Trzy rodzaje, kamień, głaz, klif, w trzech stylach: realistyczny, toon, albo low poly z konturem.

Kształt to szum na sferze: skala, siła, oktawy, persistence, warp oraz opcja ridged, plus warstwy z własną częstotliwością i cięcia fasetowe z głębokością i ostrością dla kanciastego kamienia. Promień, detal, spłaszczenie, wariancja kształtu i płaski spód decydują o sylwetce, a cztery presety erozji, świeży, zwietrzały, naturalny, erodowany, poruszają to wszystko naraz.

Powierzchnia ma wariację koloru, żyły mineralne, porosty i mech, teksturę detalu z powtarzaniem i siłą, mieszanie triplanarne i relief parallax. Domyślnie używa dołączonego materiału Stone; wyślij materiał z Matter do Engine, żeby go nadpisać.

Kitbash, ta sama biblioteka co Sculpt#

Kitbash jest współdzielony z Sculpt: ten panel i Edit Forge w Sculpt czytają jedną bibliotekę. Element zbudowany tam jest umieszczany tutaj, a element pomalowany tutaj może zostać zapisany do niej z powrotem.

To, co przechowuje scena, to część i jej wymiary, nie jej wierzchołki, dlatego budynek z kitbash kosztuje niemal nic w pliku i może być zaktualizowany później ze swojego źródła.

Uzbrój element z katalogu, a każde lewe kliknięcie go umieszcza. Trzy tryby przyciągania decydują, gdzie ląduje: on terrain (elementy podążają za wysokością gruntu pod nimi), on water (płaszczyzna budowania siedzi na poziomie wody) oraz snap to sockets, wyceluj punkt połączenia na umieszczonym elemencie, a nowy obróci się, żeby się z nim spotkać. Łańcuch rośnie od swojego wolnego końca, zajęte gniazda wypadają z listy kandydatów, a każde kliknięcie jest własnym krokiem cofania. Ctrl/Cmd pozostaje zarezerwowany dla zaznaczenia, a Alt dla obrotu. Kolekcje zachowują swoje źródło i wersję, więc instancję można zaktualizować, gdy zmieni się oryginał.

Pozostałe edytory#

Edytory świata wypełniają scenę; te dają jej interfejs, mapę, tabele zawartości i narzędzia do sprawdzenia, ile to wszystko kosztuje.

Edytor HUD#

Tools → Editors → UI. Sześć kart, Templates, Elements, Layers, Preview, Style i Script: nad podglądem, który przełącza się między trzema rozmiarami urządzeń: desktop 960×540, tablet 768×432, mobile 375×667.

Elementy przychodzą w trzech grupach (Display, Data, Input) i zagnieżdżają się: panel i flex trzymają dzieci, więc karta Layers jest prawdziwym drzewem, a nie płaską listą. Historia sięga pięćdziesięciu kroków wstecz.

⚠️ Karta Style jest podobna do CSS, i ta różnica ma znaczenie. HUD jest rysowany na canvasie przez GUI Babylona, a prawdziwy CSS tam nie dociera. Reguły, które tu piszesz, mapują się na właściwości GUI; selektory to #name dla jednego elementu, .type dla rodzaju (.text, .panel) i * dla wszystkiego.

Karta Script to drugi sposób na zbudowanie go: API ui.*, createText, createPanel, createProgress, createButton, z dwoma sposobami uruchomienia. Build Layout wykonuje go w czasie projektowania i zostawia ci prawdziwe elementy do ręcznego dostrojenia; Run Live uruchamia go w grze.

Dwa połączenia na zewnątrz: grafika HUD otwiera się w Inkwell albo Vectra i jest powiązana z powrotem, a nie kopiowana, a dokument Vectra można zaimportować jako elementy HUD. Element minimapy jest osobną rzeczą, z zasięgiem, siatką i znacznikami dla gracza, wrogów, sojuszników, przedmiotów i celów.

Edytor tilemap#

Jedenaście narzędzi, pędzel, gumka, wypełnienie, prostokąt, zaznaczenie, eyedropper, stempel, autotile, prop, strefa i ścieżka, na czterech projekcjach mapy: orthogonal, isometric, staggered isometric i hexagonal.

Autotiling dostarcza cztery szablony, a liczba w każdej nazwie to liczba kafelków, których oczekuje: Blob 47 (pełne narożniki i krawędzie), Wang 16 (oparty na krawędziach), Simple 4 (NSEW) i RPG Maker A2 (48 kafelków, kompatybilny z mapami tworzonymi tam).

Dwie warstwy siedzą nad samymi kafelkami. Zones malują znaczenie rozgrywkowe, buildable, water, forest, road, farm, residential, commercial, blocked, a props umieszczają obiekty według kategorii: drzewa, skały, budynki, roślinność, woda, ścieżki. Mapy żyją we własnej bazie danych przeglądarki, więc niezapisana przeżywa odświeżenie.

Inventory, Data tables i Dialogue Trees#

Trzy edytory, które pozwalają grze mieć zawartość, bez konieczności trzymania jej w kodzie.

Inventory edytuje katalog i stosuje go do sceny. Przedmiot niesie akcje, a akcja to trigger: use, equip, unequip, plus jeden z ośmiu typów: message, heal, damage, grant, remove, event, toast, scene. Sam panel ma trzy układy (grid, list, compact), trzy presety wyglądu (graphite, midnight, warm) oraz cztery sloty wizualne, background, slot, equipment, tooltip, które otwierają się w innym module do porządnego przerysowania.

Data tables są typowane: kolumna to text, number, bool albo ref. CSV wchodzi i wychodzi. Każda edycja przechodzi przez czyste funkcje, i to właśnie utrzymuje tabelę, którą zapisuje eksport, identyczną z tabelą, którą czyta build.

Dialogue trees to węzły z mówcą i kwestią. Węzeł albo kontynuuje do jednego next, albo rozgałęzia się w choices, każdy z własnym tekstem i własnym celem, przełącznik rozgałęzienia to jedyna decyzja strukturalna w edytorze.

Animacja i kamera#

Cinematic Sequencer buduje sekwencje z czasem trwania i flagą pętli, jedną ścieżką na encję oraz klatkami kluczowymi przechwyconymi na playheadzie, Add Key bierze bieżącą wartość encji, zamiast prosić o jej wpisanie. Edytor grafu pod spodem pokazuje czas względem postępu, z okrągłymi uchwytami do easingu: nachylenie to prędkość. Ujęcia mają własny czas trwania, a kadrowanie Cinemascope (1.422:1) jest dostępne dla letterboxu.

Camera Tools obejmuje FOV, pozycję, cel, tryb i prędkość, plus bookmarks dla punktów widzenia, do których wracasz, oraz warstwy kamery.

Audio#

Audio Manager trzyma zdarzenia audio, ścieżki oraz mikser z kanałami i kategoriami. Efekty per źródło to low-pass, high-pass i reverb send; tryb random wybiera spośród kilku klipów, żeby powtarzany dźwięk przestał czytać się jak pętla. Przewijanie odtwarza dźwięk, podczas gdy przeciągasz playhead.

Profiler#

Rozbicie klatki, nie licznik klatek: render kamery, ewaluacja mesha, cząsteczki, sprite'y i kompilacja shaderów, każde oznaczone jako rzeczywiste albo szacowane, dzięki czemu liczba pochodząca z pomiaru nigdy nie zostaje wzięta za taką, która pochodzi z modelu. Liczniki obok: meshe i aktywne meshe, światła, kamery, ciała fizyczne.

Nagrywanie jest jawne i kończy się na liście Issues, a nie na wykresie do interpretacji: niskie FPS, dużo draw calli, dużo trójkątów, dużo pamięci, w odniesieniu do docelowej liczby klatek, którą ustawiłeś.

Budowanie sceny#

Encje#

Viewport Engine, z gizmo na zaznaczonej encji

Nowa scena przychodzi z Main Camera, Directional Light, Skybox i Ground Plane.

Graf sceny, z czterema encjami, od których zaczyna się nowa scena

Co możesz dodać: Empty, Cube, Sphere, Cylinder, Plane, Light, Camera, Script, Mesh, plus dwie rodziny, które przychodzą wstępnie podłączone:

  • Characters: Third-Person, First-Person (FPS), Top-Down, Platformer, Basic.
  • Props: Pickup (heal) i Hazard (damage).

Graf sceny wyszukuje, filtruje po typie oraz dodaje, duplikuje albo usuwa; encje się zagnieżdżają, a zmiana rodzica to przeciągnięcie. Umieszczanie ma przyciąganie oraz pędzel rozrzutu do szybkiego zapełniania gruntu.

Inspektor#

Transform (pozycja, obrót, skala), przełącznik Enabled oraz komponenty encji: dodawane, konfigurowane i usuwane tutaj, z Add Script na dole. Zaznacz kilka encji naraz, a inspektor przełącza się na edycję wsadową, więc jedna zmiana pola trafia do wszystkich naraz.

Konsola#

Nie tylko log. Filtruje po poziomie (wszystko, logi, info, ostrzeżenie, błąd), łączy komunikat z powrotem z encją, która go wyprodukowała, i niesie prompt wyrażenia: wpisz wyrażenie, Enter uruchamia je na żywej scenie, strzałki przechodzą przez historię.

Nadawanie zachowania#

Trzy drogi, i one współistnieją.

Skrypty#

JavaScript z hookami cyklu życia, oraz własny materiał referencyjny:

function start() {}                     // once, when the entity starts
function update(dt) {}                  // every frame
function fixedUpdate(dt) {}             // fixed timestep, for physics
function onCollisionEnter(other) {}     // first frame of contact
function onCollisionStay(other) {}      // every frame while touching
function onCollisionExit(other) {}      // contact just ended
function onTriggerEnter(other) {}       // entered a trigger volume
function onTriggerExit(other) {}
function onMessage(msg, data, senderId) {}   // entity-to-entity messaging
function onAnimationEvent(name, data) {}
function onDestroy() {}

Kolizje i triggery odpalają się zarówno w 2D, jak i w 3D, a każda strona otrzymuje własną normalną kontaktu: other.contact.normal wskazuje od innej encji w stronę tej. To właśnie pozwala skryptowi odróżnić „to ja na to wylądowałem” od „to ono wylądowało na mnie”: stomp platformowca odczytuje other.contact.normal.y > 0.5.

Edytor skryptów#

F2, albo Add Script na encji. Edytor Monaco z kartami, kilka skryptów otwartych naraz, każdy trzymany we własnej bazie danych przeglądarki, zamiast w pliku projektu, więc niezapisany bufor przeżywa odświeżenie.

Pięć dialektów, jeden program. Przełącznik języka oferuje JavaScript, BASIC, Python, C# i Rust. To, co robi, nie jest tym, na co wygląda: JavaScript jest źródłem prawdy, a pozostałe cztery są widokami transpilowanymi z zapisanego JS-a. Przełączenie z Pythona na Rust nie tłumaczy Pythona, tylko wraca do JS-a, z którego Python został wygenerowany, i tłumaczy to. Tłumaczenie wieloetapowe to coś, co psuje program, i edytor odmawia tego robić.

Trzynaście szablonów w pięciu kategoriach, każdy oznaczony poziomem trudności:

KategoriaSzablony
Basicspusty skrypt ze szkieletem hooków cyklu życia
Movementauto-obrót · WASD · ruch 3D oparty na osiach · skok fizyczny z wykrywaniem gruntu · kamera trzecioosobowa podążająca
Gameplaystrefa wyzwalająca · pasek zdrowia z obrażeniami i leczeniem · spawner czasowy
AIpatrol z alarmem bliskości gracza
Advancedcutscenka async w stylu Verse · concurrency strukturalna · pełny test powierzchni API

Presety kontrolera postaci i propy startowe gry (pickup, hazard) pojawiają się na tej samej liście, co jest praktycznym sposobem, żeby nałożyć działający kontroler na zaimportowaną postać.

Uruchamianie i debugowanie. F5 uruchamia, F9 ustawia breakpoint. Debugger zatrzymuje się na linii, wykonuje pojedynczą klatkę i zgłasza wartości na żywo przez wyrażenia obserwowane. Script Lab uruchamia program bez żadnej podłączonej encji, notatnik dla API, a nie komponent na obiekcie.

Obok kodu: API reference, lista symboli otwartego pliku oraz biblioteka fragmentów z ulubionymi i ostatnimi. Ctrl+S zapisuje, Ctrl+F wyszukuje, Ctrl+H zamienia, a edytor dostarcza osiem motywów.

Blueprinty i zachowania#

Graf wizualny, biblioteka gotowych zachowań oraz maszyna stanów ułożona nad stosem zachowań.

Graf niesie 267 węzłów w dwudziestu dwóch grupach, Math, Scene, Entity, Animation, Flow Control, String, Events, Physics, UI, Array, Vector, Transform, Debug, Input, Utility, Game, Boolean, Camera, Tween, Variables, Audio oraz rodziny 2D i 3D. Trzy właściwości je rozdzielają, i to z nich zbudowany jest graf: 17 węzłów zdarzeń zaczyna wykonanie, 117 węzłów czystych liczy wartość bez efektu ubocznego i bez pinu wykonania, a 9 węzłów utajonych kończy się później, to te, które sprawiają, że opóźnienie albo tween da się wyrazić bez własnej maszyny stanów.

Cztery narzędzia: zaznacz V, przesuń widok H, komentarz C, przekieruj R, nad płótnem, które powiększa od 0.1× do 3× z minimapą. Zmienne przychodzą w sześciu typach, boolean, integer, float, string, vector3 i object. Opis każdego węzła jest na jego tooltipie, i to jedyne miejsce, gdzie biblioteka tej wielkości może się wytłumaczyć.

Maszyna stanów#

Własny panel, i celowo nie panel Animatora: warunki Animatora to płaski enum z ręcznie napisanym UI per przypadek, podczas gdy te są strukturalne i mówią o świecie.

Siedem warunków, a każdy to pytanie o scenę: sees (oznaczony cel w zasięgu, opcjonalnie w obrębie kąta i w linii wzroku), lost (brak celu przez N sekund), distance względem progu, health, message received, timer (czas spędzony w bieżącym stanie) oraz flag (wartość na współdzielonej tablicy blackboard). Dwa łączniki, and i or, są wymienione oba, mimo że or już istniało niejawnie, dwa przejścia do tego samego stanu to or, ale „widzi mnie I wciąż mam zdrowie” nie miało żadnej formy.

⚠️ Health jest porównywane jako ułamek maksimum, nigdy jako wartość bezwzględna. Próg „poniżej 30 HP” nie przetrwa przebalansowania; „poniżej 0.3” przetrwa.

Przy wejściu albo wyjściu ze stanu, cztery efekty: send wiadomość, set klucz na blackboardzie, play klip animacji, albo odpal nazwany efekt. Żaden z nich niczego nie porusza, ruch pozostaje przy zachowaniach, a maszyna decyduje, które zachowanie jest aktywne.

Przejście może zaczynać się od *, oznaczającego dowolny stan. Walidator zwraca listę problemów, zamiast rzucać błędem na pierwszym, więc napół napisana maszyna wciąż się rysuje i widzisz od razu wszystko, co jest nie tak. Pozycje węzłów są częścią danych: graf, którego układ żyje poza sceną, wraca poprzestawiany dla następnej osoby, która go otworzy.

BASIC#

Tryb viewportu TXT to klasyczne środowisko BASIC z dołączonymi programami demo, a język ma własny materiał referencyjny. To tutaj prawdziwy język, nie zabawka: moduły wielo­plikowe (#INCLUDE), typowane liczby (podpisane i niepodpisane 8/16/32/64-bit, float32 i float64), zagnieżdżone rekordy, metody obiektów z SELF, referencje (REF/BYREF), strukturalne TRY/CATCH/FINALLY, kompilacja warunkowa, koprogramy, typowane uchwyty oraz WebGPU compute z buforami pamięciowymi i surowym WGSL.

OPTION EXPLICIT jest opcjonalny; klasyczne zmienne niejawne pozostają domyślne, więc importowane programy wciąż działają.

Odtwarzanie i wydawanie#

Play#

Play, Pause, Stop. Po zatrzymaniu baner zgłasza co zmieniła sesja, więc edycja w trybie play nigdy nie jest cicho zachowana ani cicho utracona. Sesje mogą być nagrywane i odtwarzane do zgłoszenia błędu, a zakładki scenariusza pozwalają zacząć playtest od środka poziomu.

Build#

Build przyjmuje typ gry (wykryty ze sceny, albo ustawiony ręcznie: sidescroller/platformer, first/third person, oparty na tekście) oraz cel.

  • Web: WebGPU z fallbackiem WebGL, opcjonalne WebXR (VR/AR), minifikacja, licznik FPS oraz opcja embed assets, która produkuje jeden plik.
  • Desktop i mobile: buildy natywne. Scena jest eksportowana jako dane (scene.glb + scene.json) i kompilowana przez wygenerowany projekt Bevy (Rust); skrypty działają tam bez zmian na osadzonym środowisku uruchomieniowym QuickJS.

Kompresja jest konfigurowalna per oś, algorytm, tekstury, meshe, z presetem jakości wiążącym je razem. Buildy są trzymane w historii z ich rozmiarami (oryginalny w stosunku do skompresowanego) i mogą być pobrane ponownie później.

Build natywny zawiera tylko to, co eksporter potrafi wyeksportować. glTF nie przechwytuje własnych shaderów, thin instances, proceduralnego nieba ani post-processingu, więc system działający w czasie gry, który nie został przeniesiony na stronę Bevy, będzie brakować w buildzie desktopowym albo mobilnym, wyglądając przy tym idealnie w wersji webowej. Sprawdź build natywny, zanim na nim polegasz.

Multiplayer#

Panel Multiplayer room łączy scenę z serwerem gry Colyseus. Darmowy współdzielony serwer testowy jest dostępny bez konta i bez konfiguracji; projekt może też otrzymać własny serwer. Pokój jest kluczowany kodem udostępniania, który możesz zachować dla siebie albo rozdać.

Pliki, które odczytuje i zapisuje#

Format natywny.engine
Importuje.glb, .gltf, .obj, .fbx, .png, .svg, .mp4, .webm, .mov, .scene
Eksportujebuild webowy, natywny build desktopowy/mobilny, scene.glb + scene.json

Wysyłanie pracy do innych studiów#

Przyjmuje meshe ze Sculpt, Retopo i Pigment, całe sceny z Render, pixel art, animacje, zestawy materiałów PBR z Matter, rigi 2D, projekty wideo, obrazy, grafikę wektorową i obiekty Vectra.

Tworzy rigi 2D.

Makieta ekranu z Vectra przychodzi jako struktura, nie jako obraz. Staje się hierarchią HUD, którą Engine może rozmieścić i zeskryptować: różnica między projektem, który można podłączyć, a zrzutem ekranu tego projektu.

Skróty#

Cmd/Ctrl + K sięga do własnych poleceń Engine z palety, obok tych globalnych. Engine ma też dedykowany, przeszukiwalny panel skrótów klawiszowych we własnych ustawieniach; ma ich dużo więcej, niż zmieściłoby się na stronie ze skrótami klawiszowymi.

Ograniczenia i częste problemy#

  • Pusty viewport to zwykle przeglądarka, nie scena. Engine potrzebuje WebGL 2; sprawdź, czy akceleracja sprzętowa jest włączona.
  • Systems i Tools dzielą jedną szufladę. Jeśli panel „zniknął”, jest prawdopodobnie w tym drugim.
  • Konsola to pierwsze miejsce, w które warto zajrzeć, nie ostatnie: łączy błędy z powrotem z encją, która je wywołała.
  • Komponent dodany w trybie play może nie przetrwać zatrzymania. Przeczytaj baner, który pojawia się po zatrzymaniu.
  • Fizyka różni się między 2D i 3D w swoim solverze, mimo że callbacki skryptu są takie same. Kontakt spoczynkowy w 2D jest wykrywany z 2-milimetrową skórą, bo solver sprowadza penetrację dokładnie do zera, zanim uruchomi się wykrywanie.