Amazon Lumberyard Cum se folosește sistemul Flow Graph

Ce veți crea

În acest tutorial, vă vom arăta cum să utilizați Flow Graph System în Amazon Lumberyard. Veți juca cu sistemul vizual de scripting pentru a anima butoanele și pentru a crea interacțiuni între panoul interfeței UI și scenele dvs. 3D. Apoi, veți crea un alt script pentru a modifica scena dvs. 3D ținând cont de locația avatarului dvs. În cele din urmă, veți fi confruntat cu o provocare.

Rețineți că vi se recomandă să citiți restul seriei pentru a înțelege pe deplin notațiile din această parte.

Cine ar trebui să citească această serie de tutoriale?

Această serie de tutori este destinată în primul rând a două grupuri de dezvoltatori de jocuri: aceia care sunt complet necunoscuți cu motoarele de joc și cei care sunt familiarizați cu alte motoare de jocuri (cum ar fi Unitatea, Unreal Engine sau Cry Engine), dar nu cu Lumberyard . Presupun că ai niște cunoștințe despre notația grafică pe calculator, așa că nu voi acoperi exhaustiv toate notațiile.

Graficul grafic 

Flow Graph este un sistem de scripting vizual care vă permite să implementați o logică complexă a jocului fără a fi nevoie să programați o singură linie de cod. Toată logica poate fi creată, modificată și eliminată numai cu câteva interacțiuni UI. Graficul grafic este, de asemenea, util pentru prototiparea scenariilor de joc, a efectelor și a sunetelor.

În miezul său, Flow Graph constă din noduri și legături. Cele dintâi reprezintă de obicei entități sau acțiuni la nivel care pot efectua o acțiune specifică asupra unei entități țintă. Acestea din urmă sunt folosite pentru a conecta nodurile și sunt reprezentate ca săgeți care conectează intrările și ieșirile între noduri.

Graficul de flux poate fi deschis în două moduri principale; prima este prin meniul principal, folosind linkul de la Vedere > Deschideți fereastra de vizualizare > Graficul grafic.

Cea de-a doua cale este prin pictograma Flow Graph disponibilă în Editor Bara de instrumente.

Deschideți graficul de flux utilizând una dintre opțiunile disponibile.


Editorul Flow Graph este compus din următoarele componente:

  1. Nod grafic: grila de ferestre principală pentru afișarea nodurilor și a conexiunilor pentru graficele fluxului.
  2. Componente: panoul arborelui browser pentru toate nodurile pe care le puteți utiliza.
  3. Structura Grafice: panoul copac al browserului pentru grafice și entități; fiecare grafic de flux creat va fi plasat aici.
  4. Proprietăți: panou pentru afișarea proprietăților de intrare și ieșire a nodurilor.
  5. Căutare: panou pentru căutarea grafurilor și nodurilor.
  6. Rezultatele cautarii: panou pentru afișarea rezultatelor căutării.
  7. Puncte critice: panou pentru afișarea punctelor de întrerupere; o modalitate excelentă de depanare a jocului sau a prototipului.

Flow Scripts

Înainte de a sări direct în acțiune, trebuie să învățați elementele de bază ale scripturilor Flow Graph.

Graficele grafice de flux sunt organizate în patru categorii diferite și conținute în Flow Graphs (număr 3 în imaginea anterioară) arborele de foldere din Flow Graph Editor.

  • NivelAcest director conține scripturi specifice nivelului deschis în prezent. Contine entităţile, Componente, și module. Fișierele de entități reprezintă graficele de fluxuri create și asociate cu o entitate disponibilă în prezent în acest nivel. Componentele sunt similare, dar acum graficele fluxului sunt asociate cu componente ale nivelului. Modulele reprezintă o listă de module care sunt specifice nivelului.
  • Global: Conține acțiunile UI utilizate pentru încapsularea logicii UI pentru depanare și întreținere ușoară.
  • prefabricate: Similar cu prefabul entității, puteți crea și prefab-uri grafice. Puteți să creați un eveniment în interiorul unui prefabricat, să-i dați un nume și apoi să faceți referire la instanța prefabricată așa cum faceți în mod normal pentru o entitate.
  • Fișiere externe: Reprezintă o listă de script-uri de fluxuri importate sau create.

Flow Graph Scripting: UI Canvas ca vizualizare implicită

În tutorialul anterior, ați creat o pânză UI care conține câteva butoane. De asemenea, vă puteți aminti că nu a fost testat complet. Acum este momentul să ne întoarcem și să o finalizăm.

Ideea principală din spatele UI Canvas este următoarea:

  1. Când executați jocul (Control-G), panoul UI trebuie încărcat (în loc de primul nivel).
  2. Când faceți clic pe Incepe jocul , apar două acțiuni secvențiale:
  3. 1) Canvasul UI se estompează.
  4. 2) Încărcați CompleteFirstLevel.

Componentă Fader

Open Lumberyard Editor și apoi Editor UI. Clic Deschis și deschide-ți MyCanvases.uicanvas.

Sub Ierarhie panou, selectați fundal element. Acum, sub Proprietăți fereastră, faceți clic pe Adăugați componenta ... apoi selectați Fader component.

Sub Imagine proprietăți; o nouă proprietate numită Fader va fi afișat.

Acest Fader proprietatea va fi folosită pentru a estompa panza UI atunci când încărcați nivelul.

Flow Graph Scripting

Începeți prin deschiderea CompleteFirstLevel și apoi deschideți Graficul grafic Editor. Trebuie să apară un grafic Flow Flow.

Sub Componente , selectați graficul start, sub Joc categorie.

Rețineți că puteți utiliza și Căutați cuvinte cheie pentru a căuta noduri specifice (când știți ce să căutați).

Acum, faceți clic pe Fișier> Nou pentru a crea un nou grafic de noduri. Numele implicit este Mod implicit, și este plasat sub Fișiere externe secțiune în Grafice panou.

Acum trageți start nod în graficul nodului (centrul ecranului).

Nodul Start este nodul implicit care este executat când lansați jocul utilizând Treceți la joc opțiune. De aceea, în mod normal majoritatea grafurilor de noduri vor începe la acest nod.

Înainte de a adăuga nodurile necesare pentru afișarea canalului dvs. UI, trebuie să aflați informații suplimentare privind graficul nodului și proprietățile nodurilor acestuia.

Descrierea nodurilor grafice de flux

Un nod este reprezentat în Flow Graph ca o cutie cu intrări și ieșiri.

Un nod este alcătuit din porturile de intrare din partea stângă pentru primirea porturilor de informare și de ieșire din partea dreaptă pentru transmiterea informațiilor. Porturile de ieșire sunt activate în funcție de funcția nodului. Porturile pot avea următoarele tipuri diferite de date.

Tipul de date Culoare Descriere
Orice Verde Nespecificat, orice tip de date poate fi primit
boolean Albastru Adevărat sau fals
EntityID Verde / Rosu O valoare unică care identifică orice entitate dintr-un nivel
Pluti alb O valoare de virgulă mobilă pe 32 de biți
Int roșu Un număr pozitiv sau negativ de 32 de biți
UInt64
n / A Un număr pozitiv sau negativ de 64 de biți
Şir Turcoaz O serie de caractere utilizate pentru stocarea textului
Vec3 Galben Un vector 3D format din trei valori în virgulă mobilă. Poate fi folosit pentru a stoca poziții, unghiuri sau valori de culoare
neavenit n / A Se utilizează pentru porturi care nu acceptă nicio valoare, dar sunt în schimb declanșate să treacă fluxul de control printr-un grafic de flux

Luând în considerare imaginea anterioară:

  • Textul cu fundal albastru reprezintă numele nodului.
  • Textul cu fundal roșu reprezintă entitatea țintă.
  • Săgețile din partea stângă a nodului reprezintă porturile de intrare ale MoveEntityTo nodul.
  • Săgețile din partea dreaptă a nodului reprezintă porturile de ieșire din MoveEntityTo nodul.

Pentru a consulta o documentație completă cu privire la nodurile Flow Graph, trebuie să citiți documentația oficială.

Flow Scripting: Finalizarea interfeței UI

Când începe jocul, doriți să încărcați panza dvs. de interfață. Din fericire, Lumberyard are un nod pentru asta. Selectează Sarcină nod sub UI> Canvas și trageți-l în graficul nodului.

Acest nod are două proprietăți principale:

  1. Activati: se declanșează automat când este apelat acest nod.
  2. CanvasPathname: reprezintă numele căii spre Canvas-ul dvs. UI. Aici ar trebui să puneți numele canvasului UI creat în tutorialul anterior (MyCanvases.uicanvas).

Selectează Sarcină nod și sub Proprietăți fereastră, schimbați CanvasPathname proprietate la MyCanvases.uicanvas.


Când apăsați introduce cheie, proprietatea CanvasPathname în interiorul Sarcină nodul ar trebui să se schimbe în consecință.

Acest Sarcină nodul este aproape complet. Următorul pas este să conectați start nod în Sarcină nodul. Aceasta se face prin tragerea unui link (sau a săgeții) de la start ieșire în Încărcați Activare intrare.

Dacă faceți o greșeală la conectarea unei săgeți, puteți remedia cu ușurință acest lucru. Trebuie să utilizați butonul drept al mouse-ului pentru a face clic pe săgeată și Elimina aceasta. Rețineți că puteți alege și alte opțiuni, cum ar fi Dezactivați, Întârziere, sau Orice. Nu le voi explica în acest tutorial, deoarece nu sunt importante pentru ceea ce dorim să realizăm.

Deoarece vrem să folosim un buton pentru a declanșa o acțiune, trebuie să adăugăm una ActionListener nodul. Sub UI > pânză, trageți ActionListener în graficul nodurilor.

ActionListener are trei proprietati foarte importante:

  1. CanvasID: Reprezintă un identificator unic integrat al pânzei pentru a asculta. Cu alte cuvinte, se referă la panza care este încărcată în nodul anterior. Prin urmare, trebuie să aibă același identificator ca și MyCanvases.uicanvas.
  2. ActionName: Reprezintă numele acțiunii pe care ActionListener o sa ascult. Acest nume de acțiune este transmis atunci când utilizatorul face clic pe un buton.
  3. OnAction: Declanșează ieșirea corectă atunci când panza trimite acțiunea; trimite un ordin de efectuat.

Nu acoper Activati din nou, deoarece i-am explicat mai devreme.

Primul pas este conectarea onload la ActionListener Activați. Apoi, pentru a trece id-ul pânzei, trebuie să conectați ambele CanvasID ieșire și intrare. Rețineți că atunci când le conectați CanvasID = 0 schimbări la CanvasID.

ActionName nu este la fel de simplă, deoarece trebuie să definim mai întâi o acțiune pentru butonul nostru. Ideea este să adăugăm una Acțiune faceți clic pe Incepe jocul buton.

Deschide Editor UI, și deschideți MyCanvases.uicanvas. Selectează Incepe jocul buton, și sub Proprietăți , adăugați șirul NewGameClick la Faceți clic pe Acțiune.


Salveaza MyCanvases.uicanvas și du-te înapoi în Graficul grafic editor. Selectează ActionListener nod și schimbați ActionName proprietate la NewGameClick.

ActionListener este acum configurat. Ceea ce rămâne acum este să configurați acțiunea efectuată în acest moment ActionListener este declanșată. Reamintește Fader componentă adăugată mai devreme. Acum este momentul să-l folosim.

Pentru aceasta, trebuie să adăugați Animaţie nod în interiorul UI > Fader copac în nodul grafic.

Noile proprietăți pe care trebuie să le analizăm sunt:

  1. ElementID: Reprezintă identificatorul unic întreg al Fader element.
  2. StartValue: Reprezintă valoarea pentru Fader a începe; variază de la 0 la 1.
  3. TargetValue: Reprezintă valoarea pentru Fader a se termina; din nou, variază între 0 și 1.
  4. Viteză: Reprezintă secvențele preluate de Fader să se estompeze; 1 reprezintă 1 secundă, 2 ar fi de două ori mai rapide. 0 reprezintă o acțiune instantanee. 
  5. onComplete: Declanșează ieșirea când faderul este complet.

Primul pas este să verifici ElementID de la Fader componentă. Pentru asta, deschideți UI Editor, încărcați panza și selectați fundal componentă. În interiorul Proprietăți examinați numărul din interiorul id-ul element. 

Rețineți că ați selectat fundal element, deoarece este cel care are Fader componentă. Inchide Editor UI și schimbați ElementID din Animaţie nod la 2.

Apoi schimbați StartValue la 1 și la TargetValue la 0. Lăsați Viteză valoare implicită.

Acum, conectați OnAction (ActionListener)la Activati intrare (Animaţie). Încă o dată, conectați CanvasID împreună (Sarcină nod la Animaţie nodul).

Acest Graficul grafic este aproape completă. Pentru a înțelege ce lipsește, jucați jocul (Control-G). Ce vezi? Meniul dvs. cu acțiunea corectă în interiorul Incepe jocul buton, dar nu cursorul mouse-ului pentru a vă ajuta. Să rezolvăm asta atunci.

Căutați mouselui nod în interiorul Intrare arbore și adăugați-l la nodul grafic. Acest nod are numai două intrări (Spectacol și Ascunde). Ambele sunt auto-explicative, corect?

Conectați start ieșire (start nod) în Spectacol intrare (mouselui nodul). Apoi, conectați OnAction ieșire către Ascunde intrare.

Acum puteți rula jocul și puteți testa dacă totul este OK. Veți da seama că este.

Cu toate acestea, vom efectua un pas suplimentar de performanță. Deoarece nu vrem să creăm jocuri cu scurgeri de memorie, ar trebui să obișnuim să facem lucrurile în mod corect. După terminarea animației de estompare, ar trebui să descărcăm pânza.

Adaugă Descărca nod (UI > pânză) ca nod finală în graficul nodului. Conectați onComplete (Animaţie) în nodul Activare (Descărca). În cele din urmă, conectați CanvasID împreună (Sarcină nod la Descărca nodul).

Graficul grafic al fluxului este:

Salvați graficul de flux și denumiți-l mygraphdemo.

Mai multe scripting Flow Graph

Următorul pas al acestui tutorial este să creați un alt grafic. Cu toate acestea, de această dată, veți interacționa direct cu obiectele din interiorul scenei dvs. 3D pentru a construi graficul. Ideea principală este să folosiți locația jucătorului pentru a interacționa cu un declanșator de proximitate pentru a porni o lampă.

În RollupBar, Selectați Entitate > declanșatoare și trageți a Proximitate Trigger în scena 3D.

Plasați Proximitate Trigger lângă o lampă. Caseta galbenă 3D reprezintă zona de declanșare.

Faceți clic dreapta pe Proximitate Trigger și selectați Creați un grafic de flux opțiune.

Numeste TriggerGraph și faceți clic pe O.K. Editorul Graph Graph ar trebui să se deschidă. Veți observa că de această dată graficul va fi plasat în interiorul lui Nivel> Entități secțiune.

Acum rearanjați interfața pentru a vedea Proximitate Trigger, lampă (Light1) si Flow Graph Editor in acelasi timp. 

Selectează Proximitate Trigger și, în interiorul nodului de grafic, utilizați butonul drept al mouse-ului și selectați Adăugați entitatea selectată opțiune.

Un nou ProximityTrigger va apărea nodul.

Singurele proprietăți pe care le vom folosi vor fi introduce și Părăsi ieșiri. Primul este declanșat când jucătorul intră Proximitate Trigger zonă, în timp ce al doilea este declanșat atunci când jucătorul părăsește Proximitate Trigger zonă.

Apoi, selectați-vă Light1 element și deselectați Activ opțiune în interiorul Entitatea Proprietăți panou.

Cu Light1 selectat, în interiorul Graficul grafic utilizați butonul drept al mouse-ului și selectați Adăugați entitatea selectată din nou.

Acum trebuie să vă conectați ProximityTrigger nod cu Ușoară nodul. Conectați introduce ieșire în Permite intrare. În cele din urmă, conectați Părăsi ieșire în Dezactivați intrare.

Salvați graficul de flux și denumiți-l TriggerGraph. Acum este timpul să rulați jocul și să vă validați noul grafic de flux. Totul ar trebui să funcționeze așa cum era de așteptat.

Provocare

Pentru a testa cunoștințele pe care le-ați dobândit până acum, sunteți acum provocați să recreezi Lumberyardul implicit obtinerea-a început-nivel finalizat. Pentru aceasta, va trebui să jucați cu periile, iluminatul, materialele, texturile, terenurile și graficele de flux. Pe scurt, aplicați tot ceea ce ați învățat până acum. Nivelul dvs. final ar trebui să arate după cum urmează:

Concluzie

Acest lucru încheie acest tutorial pe Lumberyard. În acest tutorial, v-am arătat cum să utilizați Flow Graph System. Ați jucat cu sistemul de scripting vizual pentru a configura panoul de interfață UI ca vizualizare prestabilită și ați creat interacțiuni între panoul UI și scenele dvs. 3D. Apoi, ați creat un script pentru a modifica scena dvs. 3D, ținând cont de locația jucătorului și de un declanșator de proximitate. Dacă aveți întrebări sau comentarii, ca întotdeauna, nu ezitați să renunțați la un comentariu.