Dela via


Mesh Visual Scripting Programmer's Guide

Gå till översiktsartikeln Visual Scripting

Begränsningar

  • Endast en delmängd av Unity-funktioner exponeras för visuella skript.
  • Variabler och egenskaper med icke-enkla typer (inklusive objektreferenser) delas inte automatiskt. Mer information om detta finns i Dela och nätverk nedan.

Hello World

Det enklaste visuella skriptet du kan skapa är ett skript som bara öppnar en meddelanderuta:

Skärmbild av det visuella skriptdiagrammet i Hello World-exemplet

Så här ser det ut i Mesh:

Mesh-webbläsarfönster med en popup-dialogruta som visar Hello World och en OK-knapp

Skärmbild av Unity-redigeraren med Mesh Visual Scripting Hello World-scenen öppen.

Testa dina skript

Innan du laddar upp scenen till Mesh kan du utveckla och testa visuella skript, även med flera klienter i läget delad skärm, med hjälp av Uppspelningsläge med Mesh-emulering.

Diagnostik för visuella skript i redigeraren

När en GameObject med en skriptdator har valts i transformeringshierarkin visar Mesh panelen Visuell skriptdiagnostik i Mesh längst ned på kontrollpanelen:

Skärmbild av diagnostikpanelen för visuellt mesh-skript

Diagnostikpanelen ger omedelbar feedback om varningar eller fel som kan hindra dina skript från att fungera bra i Mesh.

Aktuell begränsning: Framtida versioner av diagnostikpanelen kan också ge insikt i det visuella skriptets användning av delade variabler och egenskaper och visa ytterligare diagnostik och varningar.

Ladda upp till Mesh

Använd Mesh Uploader för att ladda upp scener som innehåller visuella skript. Om du vill öppna uppladdaren går du till Mesh Toolkit-menyn och väljer Miljöer.

Obs! Mesh Uploader validerar visuella skript före uppladdning och vägrar att ladda upp när det finns några valideringsfel i visuella skript. Detaljerad diagnostik är utdata till konsolen.

Delning och nätverk

Tillstånd för delat och lokalt skript

Mesh använder Unity Visual Scripting, som är utformat för att fungera utan nätverk. Visuella skript körs på varje klient oberoende av varandra. Användarnas Mesh-upplevelse delas dock. alla användare upplever en enda delad scen som ser likadan ut på alla klienter.

Effekten av körningen av ett visuellt skript är hur det ändrar scenens tillstånd.

Som standard replikerar Mesh automatiskt scenändringar som görs av visuella skript på en klient till alla andra klienter. Bortsett från allt som delas i en scen förblir vissa stater oberoende av varje klient (med andra ord lokal).

Lokala ändringar har tillfälligt företräde framför ändringar som kommer in från klienter. Exempel: Om du fortsätter att animera ett objekt lokalt påverkas inte din lokala animering av ändringar som kommer in från andra klienter.

Det finns en viss automatisk uppdateringshastighetsbegränsning. En klient skickar inte ytterligare uppdateringar medan en fortfarande är under flygning. Det skickas en uppdatering per tur och retur via servern. Detta motsvarar ungefär fem till sex uppdateringar per sekund i praktiska situationer. Det innebär att en smidig animering som drivs av en klient inte ser smidig ut för andra klienter. Det bästa sättet är att göra smidiga animeringar lokalt, helst inte via visuella skript utan genom det normala Unity-animeringssystemet.

Slutlig konsekvens för delat tillstånd garanteras (även om klienternas tillstånd tillfälligt kan skilja sig åt).

Lokalt tillstånd:

  • Naturligt lokalt tillstånd – ljud, användargränssnitt, rendering.
  • Användarkontrollerat lokalt tillstånd – underscener markerade med komponenten Omfång för lokalt skript.
  • Tekniskt lokalt tillstånd – objekt som inte ingår i scenhierarkin (till exempel renderarmaterial, tillgångar).

Delat tillstånd:

  • Begränsat till visuella skriptvariabler och egenskaperna för GameObjects- och scenkomponenter som ingår i scenhierarkin.
  • Endast variabler och egenskaper för enkla typer kan replikeras: heltal, flyttalsnummer, booleska värden, strängar, Color,3/Vector2/4 , Quaternion, Matrix4x4och .Rect

Alla ändringar i delat tillstånd skickas via nätverket. Detta ökar nätverkstrafiken och kan, om den används vårdslöst, förbruka betydande bandbredd.

Utlösare för delat och lokalt skript

Alla visuella skriptflöden startar som svar på en händelse.

  • Om händelsen kommer från en enskild klient (till exempel användaren klickar på en knapp) körs det visuella skriptet endast på den klienten.
  • Om händelsen inträffar på alla klienter körs det visuella skriptet på alla klienter (till exempel timerhändelse, ändring av delad egenskap, uppdatering av delad variabel, avatar anger utlösare, fysikens brödtext berör collider).

När du lägger till en nod för att identifiera om ett objekt har valts är det viktigt att välja rätt. Du har två alternativ: Mesh Interactable Body: Is Selected Locally, and Mesh Interactable Body: Is Selected. Anta till exempel att du vill ha en knapp som kan klickas för att utlösa teleportering. Om du vill att deltagarna ska klicka på knappen och bara transportera sig själva använder du mesh-interaktionsbar brödtext: Väljs lokalt .

Skärmbild av den interaktionsbara mesh-brödtexten väljs lokalt.

Om du vill att deltagarna ska klicka på knappen och teleportera alla i upplevelsen använder du mesh-interaktionsbar brödtext: Är vald nod. I varje fall visar texten ovanför noden beteendet att förvänta sig:

Skärmbild av noden Mesh-interaktionsbar brödtext är vald, vilket påverkar alla klienter.

Om ett lokalt skript anger en delad variabel och ett andra skript lyssnar på ändringar i den här variabeln (med utlösaren Ändrad vid tillstånd, se nedan), körs det andra skriptet på alla klienter.

Mesh erbjuder några särskilda skriptnoder:

  • Vid intervallutlösare med jämna mellanrum synkront på alla klienter.
  • På Tillstånd ändrade utlösare när dess indata ändras (till exempel delade egenskaper, delade variabler, lokala).
  • Visa dialogruta visar en meddelandedialogruta med anpassad text som kan ange knappar som svarsalternativ.

Mesh gör vissa kompromisser till förmån för enkelhetens skull:

  • Om fler än en klient försöker ändra samma data vinner den sista klienten (i stället för att använda en transaktionsbaserad datauppdateringsmodell).
  • För att säkerställa datakonsekvens får visuella skript som körs på alla klienter inte läsa och sedan skriva delade egenskaper eller variabler. Om detta inträffar utlöser det ett körningsfel och avbryter skriptflödets körning.

Bästa praxis

Visuella skript är betydligt långsammare än inbyggd C#-kod. Dessutom utökar Mesh visuella skript med nätverksfunktioner och andra integreringsfunktioner, och till synes visuella skriptåtgärder med låga kostnader kan resultera i nätverkstrafik. Om du vill veta mer om hur du får bästa möjliga prestanda från dina visuella skript rekommenderar vi att du visar följande artiklar:

Översikt över metodtips för visuellt skript
Metodtips för visuella skript för prestanda
Metodtips för visualiseringsskript för nätverk
Metodtips för visuella skript för felsökning

Säkerhet

Mesh skyddar användare från hotscenarier som dessa:

  • Komprometterat sceninnehåll – till exempel skadliga försök att komma åt känsliga lokala data.
  • Komprometterad klient- eller transportkanal – till exempel skadliga försök att läsa eller skriva otillgängliga fjärrdata på andra klienter.

För att uppnå detta kör Mesh visuella skript i en sandbox-miljö (till exempel JavaScript i en webbläsare).

Vid start av scen använder Mesh en kuraterad lista för att validera visuella skript för att begränsa åtkomsten till vissa typer av Unity-komponenter och en säker delmängd av deras egenskaper.

Vid scenkörning begränsar Mesh åtkomsten till vissa delar av scenen:

  • Lokalt: genom att förhindra åtkomst till mesh interna och andra känsliga data.
  • Fjärranslutning: genom att kontrollera att scenens författare avser att den här delen av scenen ska ändras. Detta görs genom att statiskt analysera visuella skript på mottagarens sida för deras potentiella scenskrivningar.

Exempel:

  • Ett skadligt lokalt visuellt skript vill ge alla avatarer bobble huvuden. Därför försöker den skanna hela scenen efter GameObjects som representerar avatarhuvuden. Mesh filtrerar automatiskt genomsökningsresultaten för att exkludera avatarsystemet.
  • En skadlig fjärrklient vill förstöra scenen genom att vända alla GameObjects upp och ner. För att uppnå det skickar den en egenskapsuppdatering som anger den lodräta skalan för varje GameObject i scenen. Men eftersom inget visuellt skript på den mottagande klienten är utformat för att göra något liknande ignorerar den lokala klienten fjärrindata.

Mesh-integrering

Aktuell begränsning: I det här avsnittet beskrivs en förhandsversion av funktioner som fortfarande pågår.

I allmänhet sker integrering med andra komponenter ofta genom att ändra och lyssna på ändringar i komponentegenskapen. Till exempel:

  • Interaktionsbara objekt: Observera egenskaperna "Hovras" och "Är markerad".

  • Fysikinteraktioner: observera kroppar i utlösarvolym eller i kontakt med kolliderare.

  • Avatarer: läs avatarposition, visningsrotation och namnskylt. (Inte tillgängligt än.)

  • Sessionstillstånd: visa deltagare och läs deltagarinformation. (Inte tillgängligt än.)

  • Molnskript: fungerar tillsammans med molnskript som kan läsa och skriva variabler och komponentegenskaper. (Inte tillgängligt än.)

Vissa komponenter tillhandahåller lokala åtgärder:

  • Ljudhanteraren
  • Tidslinje
  • Animatörer
  • Rendering: läs- och skrivegenskaper för material och skuggning

Fysik hanteras särskilt eftersom simulering för ett visst fysikobjekt alltid auktoritativt utförs av endast en klient: dess ägare. För att göra det här arbetet utlöser inställningen av fysikegenskaper en automatisk ägarskapsöverföring till klienten som tillämpar ändringen.

Nästa steg