Crearea unui joc pe ochi

Într-una din publicațiile mele anterioare, ți-am spus că ne-am legat limba lui Lua în jocul nostru pentru scrierea scenelor diferite. Cu toate acestea, după ce am folosit-o pentru o vreme, am realizat că scrierea unor astfel de scripturi se transformă într-un cod destul de greu de citit și greu de depanat.

Crearea unui joc pe ochi
Și ne-am gândit la abordarea vizuală. În acest articol voi vorbi despre cunoașterea noastră cu instrumentul de scripting vizual pentru Unity - "uScript", despre capabilitățile sale și despre experiența noastră. Da, în captura de ecran de mai sus - un script real și o schemă.







Introducere. Deci, să începem să privim ce a fost. Mai jos este script-ul real care creează cele două personaje de pe ecran, desen un dialog simplu, care oferă utilizatorului posibilitatea de a alege 2 opțiuni și ramificare în acest meste.Iskhodnik LUA-script vhs.HUD (0) vhs.SwitchZone ( «strada») c1 locală = CharacterGfx ( ) c1.create ( «c1», «char_big») c1.mirror (0) c1.setpos ( «n_2») c1.animate ( «f_idle»)

c2 locală = CharacterGfx () c2.create ( «c2», «char_black») c2.mirror (1) c2.setpos ( «n_3») c2.animate ( «f_idle») c2.preset ( «opp_lmb»)

char.animate ("inactiv") char.mirror (1) char.setpos ("n_1")

c1.say ("Am nevoie de hainele tale, cizmele și motocicleta ta") c1.wait_bubble () c2.say ("Yep!") c2.wait_bubble ()

char.animate ("f_idle") char.mirror (0)

vhs.ShowMultiAnswer ("Încercați să mă prindeți (fugiți)", "Nici un fel!", "switch_answer

caz 2: vhs.StartFight (77,7) end,> În joc se pare că:

Crearea unui joc pe ochi
În principiu, în scenariul de mai sus nu este nimic de îngrijorat. Dar imaginați-vă că nu aveți o ramură, ci două. Imaginați-vă că trebuie să verificați câțiva parametri de joc și să ramificați scriptul pe baza acestora. Acest lucru poate deveni foarte rapid depășit.

În acest moment am dorit urgent vizualizarea.

Să aducem imediat ecranul a ceea ce sa transformat în scriptul LUA de mai sus. (imaginea este clicabila)

Crearea unui joc pe ochi

Arată cam greoaie, dar imediat este evident. Când, cine și unde este creat, ce face, iar lucrul principal este ramificarea.

De exemplu, în cazul nostru, jucătorul poate alege un răspuns de la două posibile. În joc se arată astfel:

Crearea unui joc pe ochi

Și pe diagrama - după cum urmează:

Crearea unui joc pe ochi

Și imediat puteți vedea ce se întâmplă când selectați răspunsul # 1 și răspundeți # 2. Și dacă există mai multe astfel de ramuri, cu atât mai mult cu cât schema nu-și va pierde claritatea vizuală.

Principiile uCP. Hai să trecem repede de ce constă schema. De fapt, principalele module (în terminologia uScript ele sunt numite «noduri») - evenimentul (începe de obicei cu un script sau un lanț), o acțiune și variabile.

Crearea unui joc pe ochi

Acțiunea are o intrare (de obicei 1) și o ieșire (e). De exemplu, pentru acțiunea cea mai simplă 1 intrare și 1 ieșire. Și la ce-șir de bloc de o condiție - deja vor exista două ieșiri, de exemplu.







Din partea de jos a blocului, variabilele sunt conectate. Un triunghi înseamnă că o ieșire este scrisă la variabila.

De exemplu, în acest exemplu, creăm un caracter (cu ajutorul blocului "Creați caractere") și apoi expunem aceeași oglindă în "true" (folosind blocul "Mirror"):

Crearea unui joc pe ochi

Apropo, toate variabilele pot avea nume (în cazul nostru, "c1"). Și toate variabilele de același tip cu același nume vor fi sincronizate în același script (schema). Ie Exemplul de mai sus este complet identic cu acesta:

Crearea unui joc pe ochi

Acest lucru se face pentru a vă salva de la necesitatea de a trage conexiunea prin două ecrane.

În plus, dacă bifați "expuneți la unitate", variabila selectată va deveni publică și va fi vizibilă pentru alte scripturi (atât cele vizuale, cât și cele scrise de mână). Arhitecurile sunt, de asemenea, acceptate.

Un pic de practică. Toate modulele pe care le vedeți în diagramă sunt auto-scrise. Și au fost scrise pentru 1 seară. Să ne uităm la codul lor. Să considerăm mai întâi ceva foarte simplu. De exemplu, o acțiune numită "Începeți lupta". El începe lupta (de fapt, numește metoda logicii jocului) și ia doi parametri - lupta adversarului și adversarul oponentului.

Crearea unui joc pe ochi

Crearea unui joc pe ochi

În partea dreaptă puteți vedea blocul cu configurația blocului, unde conduceți în valori. Blocul are 3 parametri de intrare - CharacterGfx (direct caracterele la care pierdem animația), animație (animație) și oglindă (nevoia de oglindire). Și blocul are două ieșiri: Out (ieșire imediată) și Terminat (numai când animația este terminată).

Variabila "Mirror" este un enumerator cu parametrii "da", "no" și "do not change", care este reprezentat ca o listă derulantă în fereastra proprietăților.

Codul nu a fost deosebit de complicat:

utilizând uScriptEventHandler = uScript_GameObject.uScriptEventHandler;

[FriendlyName ("Terminat")] eveniment public uScriptEventHandler Terminat;

public enum BooleanSet public void In ([FriendlyName ( «CharGfx», că «CharacterGfx.»)] CharacterGfx CH, [FriendlyName ( «Animatie», »)] string anim_name, [FriendlyName («Oglinda»,»)] [SocketState (fals, fals )] [DefaultValue (BooleanSet.NoChange)] Oglinda BooleanSet)

ch.PlayAnimation (anim_name); dacă (mirror! = BooleanSet.NoChange) ch.SetMirror (mirror == BooleanSet.True); ch.OnAnimationEndedCallback + = () =>>> Un alt moment. În toate blocurile de mai sus, ieșirea (Out) a fost apelată imediat după executarea codului blocului. Ce se întâmplă dacă vrem să facem o acțiune asincronă? De exemplu, încărcarea unei scene. Și că executarea scriptului nostru vizual este suspendată până când scena este descărcată asincron.

Acest lucru se face la fel de simplu. În loc de cusătură

publice bool Out > care a fost steagul "scriptul este întotdeauna gata de ieșire", scrie: evenimentul public uScriptEventHandler Out; astfel, spunând - «Out acum handler, nu boolean'nom vreodată-adevărat“ .O cod suplimentar la un moment dat, când sunteți pregătit să continuați script-ul, aveți nevoie pentru a apela handler exact la fel cum a fost cu Finisata exemplu precedent:

dacă (Out! = null) Out (acest sistem nou, System.EventArgs ()); Nu trebuie să scrieți singur codul. Tot ce am dat mai sus - a fost scris de noi să colectăm tot ce este necesar într-un loc convenabil. Dar acest lucru nu este adesea necesar. În uScript există un astfel de lucru numit "reflecție". În practică, acest lucru înseamnă că uScript scanează automat scena dvs. și scoate toate obiectele din ea, precum și metodele și parametrii publici, la care pot ajunge. Și le oferă acces la ele. De exemplu, aici este reflectarea blocului pe metoda GetComponent () a camerei pe scena:

Crearea unui joc pe ochi

(în partea de jos puteți vedea blocul "proprietăți", unde sunt specificați toți parametrii metodei)

Concluzii. Tulsa ne-a plăcut cu siguranță și o vom folosi mai departe. În general, unii oameni reușesc să scrie jocuri întregi cu ajutorul ei, dar acest lucru este deja prin chur. Cât de adânc vom fi capabili să îl unim, dar nu știm. De exemplu, nu am decis încă dacă să rescriem logica declanșatoarelor quest-urilor de la viziunea orientată spre lua.

Dar pentru skriptovaniya tăiat scene și dialoguri va folosi fără ambiguitate.

Dintre minusuri pot identifica doar unul (care este o consecință a plusului) - așa cum am scris mai sus, uScript convertește schema vizuală în codul C #. Prin urmare, fiecare modificare a schemei va necesita o recompilare a proiectului.

În caz contrar - vă sfătuiesc cu tărie să vă uitați la acest instrument dacă doriți să scripțiți această logică. Din câte știu, acest instrument este folosit în mod activ pentru scrierea AI.

Apropo, dacă aveți nevoie de aceasta pentru comportamentul de scripting și pentru interacțiunea obiectelor de pe scena (de exemplu declanșarea coliziunilor etc.), atunci aruncați o privire mai atentă la PlayMaker. Se concentrează mai mult pe modelul evenimentului.

Toate articolele din seria:

Idea Vision, alegerea setării, platforme, modele de distribuție și shadere, cum ar fi pentru stilizarea imaginii sub CRT / LCD înșurubată limbaj de scripting pentru Unitate (UniLua) Shader să se estompeze într-o paletă (a la SEN) Subtotal (prototip) Să vorbim despre Indie indie jocuri de animație 2D în Unitate ("ca în flash") Scenariu vizual de scene cut în Unity (uScript)







Trimiteți-le prietenilor: