Amazon Lumberyard gebruik van het stroomgrafieksysteem

Wat je gaat creëren

In deze zelfstudie laat ik je zien hoe je het Flow Graph-systeem gebruikt in Amazon Lumberyard. Je speelt met het visuele scripting-systeem om knoppen te animeren en interacties te creëren tussen de UI Canvas en je 3D-scènes. Vervolgens maakt u een ander script om uw 3D-scène aan te passen, rekening houdend met uw avatarlocatie. Eindelijk zul je voor een uitdaging staan.

Merk op dat u geadviseerd wordt om de rest van de serie te lezen om de notaties uit dit deel volledig te begrijpen.

Voor wie is deze tutorialserie bedoeld??

Deze tutorialserie is in de eerste plaats gericht op twee groepen game-ontwikkelaars: degenen die helemaal niet bekend zijn met game-engines en degenen die bekend zijn met andere game-engines (zoals Unity, Unreal Engine of Cry Engine), maar niet met Lumberyard . Ik neem aan dat je enige kennis hebt van de notatie van computerafbeeldingen, dus ik zal niet alle notaties volledig behandelen.

Stroomschema 

Flow Graph is een visueel scripting-systeem waarmee u complexe spellogica kunt implementeren zonder een enkele coderegel te hoeven programmeren. Alle logica kan worden gemaakt, gewijzigd en verwijderd met slechts een paar UI-interacties. Flow Graph is ook handig voor het prototypen van gameplay-scenario's, effecten en geluiden.

In de kern bestaat Flow Graph uit knooppunten en koppelingen. De eerste vertegenwoordigen gewoonlijk niveau-entiteiten of acties die een specifieke actie op een doelentiteit kunnen uitvoeren. Deze laatste worden gebruikt om knooppunten te verbinden en worden weergegeven als pijlen die de ingangen en uitgangen tussen knooppunten verbinden.

De stroomgrafiek kan op twee manieren worden geopend; de eerste is via het hoofdmenu, met behulp van de link op Uitzicht > Open View Pane > Stroomschema.

De tweede manier is via het Flow Graph-pictogram dat beschikbaar is in de Editor toolbar.

Open de stroomgrafiek met een van de beschikbare opties.


De Flow Graph-editor bestaat uit de volgende componenten:

  1. Knooppuntgrafiek: hoofdvensterraster voor het weergeven van stroomgrafiekknooppunten en verbindingen.
  2. Components: browserstructuurvenster voor alle knooppunten die u kunt gebruiken.
  3. Flow Grafieken: browserstructuurvenster voor grafieken en entiteiten; elke gecreëerde stroomgrafiek wordt hier geplaatst.
  4. eigenschappen: deelvenster voor het weergeven van knooppuntinvoer- en uitvoereigenschappen.
  5. Zoeken: deelvenster voor zoeken in grafieken en knooppunten.
  6. Zoekresultaten: paneel voor weergave van zoekresultaten.
  7. breekpunten: paneel voor weergave van breekpunten; een uitstekende manier om je spel of prototype te debuggen.

Flow Graph-scripts

Voordat u rechtstreeks in de actie springt, moet u de basisprincipes van Flow Graph-scripts leren.

Flow Graph-scripts zijn georganiseerd in vier verschillende categorieën en zijn opgenomen in de Flow grafieken (aantal 3 in de vorige afbeelding) mappenboom in de Flow Graph Editor.

  • NiveauDeze map bevat scripts die specifiek zijn voor het niveau dat momenteel is geopend. Het bevat entiteiten, Components, en modules. Entiteitenbestanden zijn de stroomdiagrammen die zijn gemaakt en gekoppeld aan een entiteit die momenteel beschikbaar is in het niveau. Componenten zijn vergelijkbaar, maar nu zijn de stroomdiagrammen gekoppeld aan componenten van het niveau. Modules vertegenwoordigen een lijst met modules die specifiek zijn voor het niveau.
  • Globaal: Bevat de UI-acties die worden gebruikt om UI-logica in te kapselen voor eenvoudig debuggen en onderhoud.
  • prefabs: Net als bij de entiteits prefab, kunt u ook grafiek prefabs maken. U kunt een gebeurtenis in een prefab maken, deze een naam geven en vervolgens verwijzen naar de prefab-instantie zoals u normaal voor een entiteit doet.
  • Externe bestanden: Vertegenwoordig een lijst met geïmporteerde of gemaakte Flow Graph-scripts.

Flow Graph Scripting: UI Canvas als standaardweergave

In de vorige zelfstudie hebt u een UI Canvas gemaakt met enkele knoppen. U herinnert zich misschien ook dat het niet volledig is getest. Het is nu tijd om terug te gaan en het te finaliseren.

Het belangrijkste idee achter de UI Canvas is de volgende:

  1. Wanneer je je spel uitvoert (Controle-G), moet de UI Canvas worden geladen (in plaats van het eerste niveau).
  2. Wanneer u op klikt Start het spel knop, treden twee opeenvolgende acties op:
  3. 1) De UI Canvas vervaagt.
  4. 2) U laadt uw CompleteFirstLevel.

Fadercomponent

Open Lumberyard Editor en vervolgens de UI-editor. Klik Open en open je MyCanvases.uicanvas.

Onder de Hiërarchie paneel, selecteer de Achtergrond element. Nu, onder de eigenschappen deelvenster, klik Component toevoegen ... en selecteer vervolgens de fader bestanddeel.

Onder de Beeld eigenschappen; een nieuw eigendom genaamd fader zal worden vertoond.

Deze fader property wordt gebruikt om de UI Canvas uit te faden wanneer u uw niveau laadt.

Flow Graph Scripting

Begin met het openen van de CompleteFirstLevel en open vervolgens de Stroomschema Editor. Een lege stroomgrafiek zou moeten verschijnen.

Onder de Components deelvenster, selecteer de grafiek Begin, onder de Spel categorie.

Merk op dat je ook de zoek sleutelwoord om specifieke knooppunten te doorzoeken (als u weet wat u zoekt).

Klik nu op Bestand> Nieuw om een ​​nieuwe knooppuntgrafiek te maken. De standaardnaam is Standaard, en het is geplaatst onder de Externe bestanden sectie in de grafieken paneel.

Sleep nu het Begin knooppunt in de knooppuntgrafiek (midden van het scherm).

Het startknooppunt is het standaardknooppunt dat wordt uitgevoerd wanneer u uw spel start met behulp van de Schakel over naar Game keuze. Daarom beginnen normaal gesproken de knooppuntengrafieken bij dit knooppunt.

Voordat u de benodigde knooppunten toevoegt om uw UI Canvas weer te geven, moet u aanvullende informatie over de knooppuntgrafiek en de knooppunteigenschappen ervan leren.

Stroomgrafiekknooppunten Omschrijving

Een knooppunt wordt in Stroomdiagram weergegeven als een kader met ingangen en uitgangen.

Een knooppunt bestaat uit invoerpoorten aan de linkerkant voor het ontvangen van informatie en uitvoerpoorten aan de rechterkant voor het verzenden van informatie. Uitgangspoorten worden geactiveerd afhankelijk van de functie van het knooppunt. Poorten kunnen de volgende verschillende gegevenstypen hebben.

Data type Kleur Omschrijving
Ieder Groen Ongespecificeerd, elk gegevenstype kan worden ontvangen
Boolean Blauw Waar of niet waar
EntityID Groen rood Een unieke waarde die elke entiteit in een niveau identificeert
Vlotter Wit Een 32-bits drijvende-kommawaarde
Int Rood Een 32-bits positief of negatief getal
UInt64
n / a Een 64-bits positief of negatief getal
Draad Turkoois Een reeks tekens die wordt gebruikt voor het opslaan van tekst
Vec3 Geel Een 3D-vector bestaande uit drie drijvende-kommawaarden. Kan worden gebruikt om posities, hoeken of kleurwaarden op te slaan
leegte n / a Wordt gebruikt voor poorten die geen enkele waarde accepteren, maar in plaats daarvan worden geactiveerd om de controlestroom door een stroomgrafiek te leiden

Rekening houdend met de vorige afbeelding:

  • De tekst met blauwe achtergrond vertegenwoordigt de knooppuntnaam.
  • De tekst met rode achtergrond vertegenwoordigt de doelentiteit.
  • De pijlen aan de linkerkant van het knooppunt vertegenwoordigen de invoerpoorten van de MoveEntityTo knooppunt.
  • De pijlen aan de rechterkant van het knooppunt vertegenwoordigen de uitvoerpoorten van de MoveEntityTo knooppunt.

Raadpleeg de officiële documentatie om een ​​volledige documentatie over de knooppunten van de stroomgrafiek te raadplegen.

Flow Graph Scripting: het voltooien van de UI Canvas

Wanneer het spel start, wil je je UI-canvas laden. Gelukkig heeft Lumberyard daar een knooppunt voor. Selecteer de Laden knoop onder UI> Canvas en sleep het naar de knooppuntgrafiek.

Dit knooppunt heeft twee hoofdkenmerken:

  1. Activeren: het wordt automatisch geactiveerd wanneer dit knooppunt wordt aangeroepen.
  2. CanvasPathname: vertegenwoordigt de padnaam naar uw UI Canvas. Hier moet je de naam van de UI Canvas zetten die je in de vorige tutorial hebt gemaakt (MyCanvases.uicanvas).

Selecteer de Laden knoop en onder de eigenschappen deelvenster, wijzig het CanvasPathname eigendom aan MyCanvases.uicanvas.


Wanneer u op drukt invoeren sleutel, het eigendom CanvasPathname binnen in de Laden knoop moet dienovereenkomstig veranderen.

Deze Laden knoop is bijna voltooid. De volgende stap is om de Begin knoop in de Laden knooppunt. Dit wordt uitgevoerd door een link (of pijl) van de slepen te slepen Begin uitvoer naar de Load Activate invoer.

Als u een fout maakt bij het verbinden van een pijl, kunt u dat eenvoudig verhelpen. U moet de rechtermuisknop gebruiken om op de pijl en te klikken Verwijderen het. Merk op dat je ook andere opties zoals kunt kiezen onbruikbaar maken, Vertraging, of Ieder. Ik zal ze in deze tutorial niet uitleggen, omdat ze niet belangrijk zijn voor wat we willen bereiken.

Omdat we een knop willen gebruiken om een ​​actie te activeren, moeten we er een toevoegen ActionListener knooppunt. Onder de UI > Canvas, sleept de ActionListener in de knooppuntgrafiek.

De ActionListener heeft drie zeer belangrijke eigenschappen:

  1. CanvasID: Vertegenwoordigt een uniek geheel-getal-ID van het canvas waarnaar moet worden geluisterd. Met andere woorden, het heeft betrekking op het canvas dat is geladen in het vorige knooppunt. Daarom moet het dezelfde ID hebben als de MyCanvases.uicanvas.
  2. ActionName: Vertegenwoordigt de naam van de actie die de ActionListener zal luisteren. Deze actienaam wordt doorgegeven wanneer de gebruiker op een knop klikt.
  3. OnAction: Het activeert de juiste uitvoer wanneer het canvas de actie verzendt; het verzendt een opdracht die moet worden uitgevoerd.

Ik bedek de Activeren opnieuw omdat ik het eerder heb uitgelegd.

De eerste stap is om de OnLoad naar de ActionListener activeren. Als u het canvas-ID wilt doorgeven, moet u beide verbinden CanvasID uitvoer en invoer. Merk op dat wanneer u ze verbindt de CanvasID = 0 veranderd naar CanvasID.

De ActionName is niet zo eenvoudig, omdat we eerst een actie voor onze knop moeten definiëren. Het idee is om er een toe te voegen Actie klik op de Start het spel knop.

Open de UI-editor, en open de MyCanvases.uicanvas. Selecteer de Start het spel knop, en onder de eigenschappen deelvenster, voeg de reeks toe NewGameClick naar de Klik op Actie.


Red de MyCanvases.uicanvas en ga terug naar de Stroomschema editor. Selecteer de ActionListener knoop en verander de ActionName eigendom aan NewGameClick.

De ActionListener is nu geconfigureerd. Wat nu overblijft, is om de uitgevoerde actie te configureren wanneer dit gebeurt ActionListener wordt geactiveerd. Denk aan de fader component eerder toegevoegd. Het is nu tijd om het te gebruiken.

Daarvoor moet u de animatie knoop in de UI > fader boom in het grafiekknooppunt.

De nieuwe eigenschappen om naar te kijken zijn:

  1. elementID: Vertegenwoordigt de unieke gehele getal-identifier van de fader element.
  2. StartValue: Vertegenwoordigt de waarde voor de fader beginnen; het varieert van 0 tot 1.
  3. DoelWaarde: Vertegenwoordigt de waarde voor de fader beëindigen; nogmaals, het varieert van 0 tot 1.
  4. Snelheid: Vertegenwoordigt de seconden die zijn genomen door de fader vervagen; 1 staat voor 1 seconde, 2 is twee keer zo snel. 0 vertegenwoordigt een onmiddellijke actie. 
  5. onComplete: Activeert de uitvoer wanneer de fader is voltooid.

De eerste stap is om de elementID van de fader component. Open daarvoor de UI-bewerkingr, laad je canvas en selecteer de Achtergrond component. Binnen in de eigenschappen deelvenster, bekijk het nummer in de ID kaart element. 

Merk op dat u de Achtergrond element, aangezien het degene is die de fader component. Sluit de UI-editor en verander de elementID van de animatie knoop tot 2.

Wijzig vervolgens de StartValue tot 1 en de DoelWaarde tot 0. Verlaat de Snelheid waarde als standaard.

Verbind nu de OnAction (ActionListener)naar de Activeren invoer (animatie). Verbind opnieuw de CanvasID samen (Laden knooppunt van de animatie knooppunt).

Deze Stroomschema is bijna voltooid. Om te begrijpen wat er ontbreekt, speel je het spel (Controle-G). Wat zie je? Uw menu met de juiste actie in de Start het spel knop, maar geen muisaanwijzer om u te helpen. Laten we dat dan oplossen.

Zoek naar de Muis cursor knoop in de Invoer boom en voeg deze toe aan het grafiekknooppunt. Dit knooppunt heeft slechts twee ingangen (Laten zien en Verbergen). Beide spreken voor zich, juist?

Verbind de Begin output (Begin knoop) in de Laten zien invoer (Muis cursor knooppunt). Verbind vervolgens de OnAction uitvoer naar de Verbergen invoer.

Je kunt nu het spel uitvoeren en testen of alles in orde is. Je zult je realiseren dat dat zo is.

We voeren echter nog een extra prestatiestap uit. Omdat we geen games met geheugenlekken willen maken, moeten we de gewoonte krijgen om dingen correct te doen. Nadat de fade-animatie is beëindigd, moeten we het canvas uitladen.

Voeg de toe Lossen knoop (UI > Canvas) als uw laatste knooppunt in de knooppuntgrafiek. Verbind de onComplete (animatie) uitgevoerd naar het activeringsknooppunt (Lossen). Verbind ten slotte de CanvasID samen (Laden knooppunt van de Lossen knooppunt).

De volledige stroomgrafiek is:

Sla je stroomdiagram op en geef hem een ​​naam mygraphdemo.

Meer stroomgrafiek-scripts

De volgende stap van deze zelfstudie is om een ​​nieuwe stroomgrafiek te maken. U zult deze keer echter direct contact maken met de objecten in uw 3D-scène om de grafiek te maken. Het belangrijkste idee is om de spelerlocatie te gebruiken om te communiceren met een proximity-trigger om een ​​lamp in te schakelen.

In de RollupBar, kiezen Entiteit > triggers en sleep een Proximity Trigger in de 3D-scène.

Plaats de Proximity Trigger bij een lamp. Het gele 3d vak geeft het triggergebied weer.

Klik met de rechtermuisknop op de Proximity Trigger en selecteer de Maak stroomschema keuze.

Noem maar op TriggerGraph en klik OK. De Flow Graph-editor zou moeten openen. U zult opmerken dat deze keer de grafiek in de Niveau> Entiteiten sectie.

Herschik nu je interface om het te zien Proximity Trigger, de lamp (light1) en de Flow Graph Editor tegelijkertijd. 

Selecteer de Proximity Trigger en gebruik de rechtermuisknop in het grafiekknooppunt en selecteer de Geselecteerde entiteit toevoegen keuze.

Een nieuw ProximityTrigger knoop zal verschijnen.

De enige eigenschappen die we zullen gebruiken, zijn de invoeren en Het verlof uitgangen. De eerste wordt geactiveerd wanneer de speler de Proximity Trigger gebied, terwijl de tweede wordt geactiveerd wanneer de speler de Proximity Trigger Gebied.

Selecteer vervolgens uw light1 element en deselecteer de Actief optie binnen de Entiteit Eigenschappen paneel.

Met de light1 geselecteerd, binnen de Stroomschema gebruik de rechtermuisknop en selecteer Geselecteerde entiteit toevoegen nog een keer.

Nu moet je de. Verbinden ProximityTrigger knoop met de Licht knooppunt. Verbind de invoeren uitvoer naar de in staat stellen invoer. Verbind ten slotte de Het verlof uitvoer naar de onbruikbaar maken invoer.

Sla de stroomgrafiek op en geef deze een naam TriggerGraph. Het is nu tijd om het spel uit te voeren en uw nieuwe stroomgrafiek te valideren. Alles zou moeten werken zoals verwacht.

Uitdaging

Om de kennis die je tot nu toe hebt opgedaan te testen, word je nu uitgedaagd om de standaard Lumberyard te herscheppen getting-slag-voltooid-niveau. Daarvoor moet je spelen met de penselen, verlichting, materialen, texturen, terreinen en stroomdiagrammen. Kortom, pas alles toe wat je tot nu toe hebt geleerd. Je uiteindelijke niveau moet er als volgt uitzien:

Conclusie

Dit concludeert deze tutorial over Lumberyard. In deze zelfstudie heb ik je laten zien hoe je het Flow Graph-systeem kunt gebruiken. U hebt met het visuele scripting-systeem gespeeld om de UI Canvas als uw standaardweergave in te stellen en interacties tussen de UI Canvas en uw 3D-scènes gemaakt. Vervolgens hebt u een script gemaakt om uw 3D-scène aan te passen, rekening houdend met uw spelerlocatie en een proximity-trigger. Als u vragen of opmerkingen heeft, kunt u zoals altijd een regel in de opmerkingen plaatsen.