Delen via


Mesh Visual Scripting Programmer's Guide

Ga naar het overzichtsartikel visualscripting

Beperkingen

  • Alleen een subset van Unity-functionaliteit wordt weergegeven voor visuele scripts.
  • Variabelen en eigenschappen met niet-eenvoudige typen (inclusief objectverwijzingen) worden niet automatisch gedeeld. Zie Delen en netwerken hieronder voor meer informatie.

Hello World

Het eenvoudigste visuele script dat u kunt maken, is een script waarmee u een berichtvak opent:

Schermafbeelding van de visualscriptgrafiek van het Hallo wereld-voorbeeld

Dit is hoe het eruitziet in Mesh:

Mesh-browservenster met een pop-upvenster met Hallo wereld en een knop OK

Schermopname van de Unity Editor met de Mesh Visual Scripting Hallo wereld scène geopend.

Uw scripts testen

Voordat u uw scène uploadt naar Mesh, kunt u visuele scripts ontwikkelen en testen, zelfs met meerdere clients in de split screen-modus, met behulp van de Play-modus met Mesh Emulation.

Diagnostische gegevens van visualscripts in de editor

Wanneer een GameObject met een scriptmachine is geselecteerd in de transformatiehiërarchie, geeft Mesh het deelvenster Mesh Visual Scripting Diagnostics onder aan het Inspector-deelvenster weer:

Schermopname van het diagnostische deelvenster Mesh Visual Scripting

Het diagnostische deelvenster geeft onmiddellijk feedback over waarschuwingen of fouten die kunnen voorkomen dat uw scripts goed werken in Mesh.

Huidige beperking: toekomstige versies van het diagnostische deelvenster kunnen ook inzicht geven in het gebruik van gedeelde variabelen en eigenschappen van het visuele script en aanvullende diagnostische gegevens en waarschuwingen weergeven.

Uploaden naar Mesh

Gebruik de Mesh Uploader om scènes te uploaden die visuele scripts bevatten. Als u uploader wilt openen, selecteert u omgevingen in het menu Mesh Toolkit.

Opmerking: Mesh Uploader valideert visuele scripts voordat deze worden geüpload en weigert te uploaden wanneer er validatiefouten zijn in visuele scripts. Gedetailleerde diagnostische gegevens worden uitgevoerd naar de console.

Delen en netwerken

Gedeelde en lokale scriptstatus

Mesh maakt gebruik van Unity Visual Scripting, dat is ontworpen om te werken zonder netwerken. Visuele scripts worden onafhankelijk van elke client uitgevoerd. De Mesh-ervaring van de gebruikers wordt echter gedeeld; alle gebruikers ervaren één gedeelde scène die er hetzelfde uitziet op alle clients.

Het effect van de uitvoering van een visualscript is de wijze waarop de status van de scène wordt gewijzigd.

Mesh repliceert standaard automatisch scènewijzigingen die worden uitgevoerd door visuele scripts op de ene client naar alle andere clients. Afgezien van alles wat in een scène wordt gedeeld, blijft een bepaalde status onafhankelijk van elke client (met andere woorden, lokaal).

Lokale wijzigingen hebben tijdelijk voorrang op wijzigingen die afkomstig zijn van clients. Voorbeeld: Als u een object lokaal blijft animeren, wordt uw lokale animatie niet aangetast door wijzigingen die afkomstig zijn van andere clients.

Er is een aantal automatische updatesnelheidslimieten. Een client verzendt geen extra updates terwijl er nog een in vlucht is; er is één update verzonden per retour via de server. In praktische situaties bedraagt dit ongeveer vijf tot zes updates per seconde. Dit betekent dat een vloeiende animatie die door de ene client wordt aangestuurd, er niet soepel uitziet op andere clients. De best practice is om vloeiende animaties lokaal uit te voeren, idealiter niet via visuele scripts, maar via het normale Unity-animatiesysteem.

Uiteindelijke consistentie van de gedeelde status wordt gegarandeerd (zelfs als de statussen van clients tijdelijk kunnen verschillen).

Lokale status:

  • Natuurlijke lokale staat: geluiden, ui, rendering.
  • Door de gebruiker beheerde lokale status: subscènes die zijn gemarkeerd met het onderdeel Lokaal scriptbereik .
  • Technische lokale status: objecten die geen deel uitmaken van de scènehiërarchie (bijvoorbeeld renderermaterialen, assets).

Gedeelde status:

  • Beperkt tot visuele scriptvariabelen en de eigenschappen van GameObjects en scèneonderdelen die deel uitmaken van de scènehiërarchie.
  • Alleen variabelen en eigenschappen van eenvoudige typen kunnen worden gerepliceerd: gehele getallen, drijvendekommagellen, booleaanse waarden, tekenreeksen, Color,34/Vector2/ , Quaternion, en . Matrix4x4Rect

Elke wijziging in de gedeelde status wordt via het netwerk verzonden. Dit verhoogt het netwerkverkeer en kan, indien onzorgvuldig gebruikt, aanzienlijke bandbreedte verbruiken.

Gedeelde en lokale scripttriggers

Alle visuele scriptstromen beginnen als reactie op een gebeurtenis.

  • Als de gebeurtenis afkomstig is van één client (bijvoorbeeld wanneer de gebruiker op een knop klikt), wordt het visuele script alleen op die client uitgevoerd.
  • Als de gebeurtenis op alle clients plaatsvindt, wordt het visuele script uitgevoerd op alle clients (bijvoorbeeld timer gebeurtenis, wijziging van gedeelde eigenschap, gedeelde variabele update, avatar entert trigger, fysica body touches collider).

Wanneer u een knooppunt toevoegt om te detecteren of een object is geselecteerd, is het belangrijk om de juiste te kiezen. U hebt twee opties: Mesh Interactable Body: Is lokaal geselecteerd en Mesh Interactable Body: Is geselecteerd. Stel dat u een knop wilt hebben waarop u kunt klikken om teleportatie te activeren. Als u de deelnemer alleen op de knop wilt laten klikken en alleen zelf wilt transporteren, gebruikt u de Mesh Interactable Body: Is Selected Locally Node.

Schermopname van het knooppunt Mesh Interactable Body is lokaal geselecteerd.

Als u de deelnemer op de knop wilt laten klikken en iedereen in de ervaring wilt teleporteren, gebruikt u het knooppunt Mesh Interactable Body: Is selected node. In elk geval vertelt de tekst boven het knooppunt u het gedrag dat u kunt verwachten:

Schermopname van het knooppunt Mesh Interactable Body Is Selected, dat van invloed is op alle clients.

Als een lokaal script een gedeelde variabele instelt en een tweede script luistert naar wijzigingen in deze variabele (met behulp van de trigger On State Changed ; zie hieronder), wordt het tweede script uitgevoerd op alle clients.

Mesh biedt enkele speciale scriptknooppunten:

  • Bij intervaltriggers met regelmatige intervallen synchroon op alle clients.
  • Bij statuswijziging worden triggers geactiveerd wanneer de invoer wordt gewijzigd (bijvoorbeeld gedeelde eigenschappen, gedeelde variabelen, lokaal).
  • Dialoogvenster weergeven geeft een berichtdialoogvenster weer met aangepaste tekst die optioneel knoppen kan bieden als antwoordopties.

Mesh maakt bepaalde compromissen ten gunste van eenvoud:

  • Als meer dan één client probeert dezelfde gegevens te wijzigen, wint de laatste client (in plaats van een op transacties gebaseerd gegevensupdatemodel te gebruiken).
  • Om gegevensconsistentie te garanderen, mogen visuele scripts die worden uitgevoerd op alle clients niet lezen en vervolgens gedeelde eigenschappen of variabelen schrijven. Als dit gebeurt, wordt er een runtimefout geactiveerd en wordt de uitvoering van de scriptstroom afgebroken.

Aanbevolen procedures

Visuele scripts zijn aanzienlijk trager dan systeemeigen C#-code. Bovendien vergroot Mesh visuele scripts met netwerk- en andere integratiefuncties, en schijnbaar weinig overhead visuele scriptacties kunnen leiden tot netwerkverkeer. Voor meer informatie over het verkrijgen van de beste prestaties van uw visuele scripts, raden we u aan de volgende artikelen te bekijken:

Overzicht van best practices voor visualscripting
Aanbevolen procedures voor visualscripts voor prestaties
Aanbevolen procedures voor visuele scripts voor netwerken
Aanbevolen procedures voor visualscripts voor foutopsporing

Beveiliging

Mesh beschermt gebruikers tegen bedreigingsscenario's zoals deze:

  • Gecompromitteerde scène-inhoud, bijvoorbeeld kwaadwillende pogingen om toegang te krijgen tot gevoelige lokale gegevens.
  • Aangetast client- of transportkanaal, bijvoorbeeld kwaadwillende pogingen om ontoegankelijke externe gegevens op andere clients te lezen of te schrijven.

Hiervoor voert Mesh visuele scripts uit in een sandbox (zoals JavaScript in een webbrowser).

Bij het opstarten van de scène gebruikt Mesh een gecureerde allowlist om visuele scripts te valideren om de toegang tot bepaalde typen Unity-onderdelen en een veilige subset van hun eigenschappen te beperken.

Tijdens de runtime van de scène beperkt Mesh de toegang tot bepaalde delen van de scène:

  • Lokaal: door toegang tot Mesh-interne gegevens en andere gevoelige gegevens te voorkomen.
  • Extern: door te controleren of de auteur van de scène dit deel van de scène wil wijzigen. Dit wordt gedaan door visualscripts aan de kant van de ontvanger statisch te analyseren voor hun potentiële scène-schrijfbewerkingen.

Voorbeelden:

  • Een schadelijk lokaal visualscript wil alle avatars bobble heads geven. Daartoe probeert het de hele scène te scannen op GameObjects die avatarkoppen vertegenwoordigen. Mesh filtert automatisch de scanresultaten om het avatarsysteem uit te sluiten.
  • Een kwaadwillende externe client wil de scène afbreken door alle GameObjects ondersteboven te spiegelen. Hiervoor wordt een eigenschapsupdate verzonden waarmee de verticale schaal van elk GameObject in de scène wordt ingesteld. Omdat er echter geen visueel script op de ontvangende client zo is ontworpen, negeert de lokale client de externe invoer.

Mesh-integratie

Huidige beperking: in deze sectie wordt een preview beschreven van functies die nog steeds worden uitgevoerd.

Over het algemeen wordt integratie met andere onderdelen vaak uitgevoerd door wijzigingen in de eigenschappen van onderdelen te wijzigen en te luisteren. Voorbeeld:

  • Interacties: bekijk de eigenschappen 'Is aanwijst' en 'Is geselecteerd'.

  • Interacties in de fysica: bekijk lichamen in triggervolume of in contact met collider.

  • Avatars: avatarpositie lezen, draaiing bekijken en naamplaatje lezen. (Nog niet beschikbaar.)

  • Sessiestatus: deelnemers vermelden en deelnemergegevens lezen. (Nog niet beschikbaar.)

  • Cloudscripting: werken samen met cloudscripts die variabelen en onderdeeleigenschappen kunnen lezen en schrijven. (Nog niet beschikbaar.)

Sommige onderdelen bieden lokale acties:

  • Audiobeheer
  • Tijdlijn
  • Animators
  • Rendering: lees- en schrijfmateriaal- en shader-eigenschappen

Fysica wordt speciaal afgehandeld omdat simulatie voor een gegeven fysicaobject altijd gezaghebbend wordt uitgevoerd door slechts één client: de eigenaar. Om dit werk te maken, activeert het instellen van fysica-eigenschappen een automatische eigendomsoverdracht naar de client die de wijziging toepast.

Volgende stappen