Mesh Visual Scripting Programmer's Guide
Přejít na článek přehledu skriptování vizuálů
Omezení
- Vizuální skripty jsou vystaveny pouze podmnožině funkcí Unity.
- Proměnné a vlastnosti bez jednoduchých typů (včetně odkazů na objekty) se nesdílí automaticky. Další informace najdete v části Sdílení a sítě níže.
Hello World
Nejjednodušší vizuální skript, který můžete vytvořit, je ten, který právě otevře okno se zprávou:
Takto vypadá ve službě Mesh:
Testování skriptů
Před nahráním scény do mesh můžete vyvíjet a testovat vizuální skripty, a to i s více klienty v režimu rozdělené obrazovky pomocí režimu přehrávání s emulací Mesh.
Diagnostika vizuálních skriptů v editoru
Když je objekt GameObject se skriptovacím počítačem vybrán v hierarchii transformace, zobrazí mesh panel Diagnostiky vizuálního skriptování v dolní části panelu inspektoru:
Na diagnostickém panelu získáte okamžitou zpětnou vazbu o případných upozorněních nebo chybách, které by mohly zabránit tomu, aby vaše skripty ve službě Mesh dobře fungovaly.
Aktuální omezení: Budoucí verze diagnostického panelu můžou také poskytnout přehled o použití sdílených proměnných a vlastností vizuálního skriptu a zobrazit další diagnostiku a upozornění.
Nahrání do sítě
Pomocí nástroje Mesh Uploader nahrajte scény obsahující vizuální skripty. Pokud chcete otevřít uploader, v nabídce Mesh Toolkit vyberte Prostředí.
Poznámka: Nástroj Mesh Uploader ověří vizuální skripty před nahráním a odmítne nahrávat, pokud se ve vizuálních skriptech zobrazí chyby ověření. Podrobná diagnostika je výstupem konzoly.
Sdílení a sítě
Stav sdíleného a místního skriptu
Mesh používá vizuální skriptování Unity, které je navržené tak, aby fungovalo bez sítí. Skripty vizuálů se spouštějí na každém klientovi nezávisle. Prostředí sítě uživatelů je však sdílené; Všichni uživatelé mají jednu sdílenou scénu, která vypadá stejně na všech klientech.
Účinek spuštění vizuálního skriptu je způsob, jakým mění stav scény.
Ve výchozím nastavení služba Mesh automaticky replikuje změny scény provedené vizuálními skripty na jednom klientovi do všech ostatních klientů. Kromě všeho, co je sdílené ve scéně, zůstává určitý stav nezávislý na každém klientovi (jinými slovy, místní).
Místní změny mají dočasně přednost před změnami přicházejícími z klientů. Příklad: Pokud zachováte animaci objektu místně, místní animace nebude ohrožena změnami přicházejícími z jiných klientů.
Existuje několik omezení rychlosti automatických aktualizací. Klient neodesílá další aktualizace, zatímco je stále v letu; na server je odeslána jedna aktualizace na zpáteční cestu. V praktických situacích to činí přibližně pět až šest aktualizací za sekundu. To znamená, že plynulá animace řízená jedním klientem nebude na jiných klientech vypadat hladce. Osvědčeným postupem je provádět plynulé animace místně, ideálně ne prostřednictvím vizuálních skriptů, ale normálním animačním systémem Unity.
Konečná konzistence sdíleného stavu je zaručena (i když se stavy klientů můžou dočasně lišit).
Místní stav:
- Přirozený místní stav – zvuky, uživatelské rozhraní, vykreslování.
- Místní stav řízený uživatelem – dílčí scény označené komponentou Rozsah místního skriptu.
- Technický místní stav – objekty, které nejsou součástí hierarchie scény (například materiály rendereru, prostředky).
Sdílený stav:
- Omezeno na proměnné vizuálního skriptu a vlastnosti objektů GameObjects a komponent scény, které jsou součástí hierarchie scény.
- Replikovat lze pouze proměnné a vlastnosti jednoduchých typů: celá čísla, čísla s plovoucí desetinnou čárkou, logické hodnoty, řetězce,
Color
,3
/Vector2
/4
,Quaternion
,Matrix4x4
a .Rect
Všechny změny ve sdíleném stavu se posílají přes síť. Tím se zvyšuje síťový provoz, a pokud se používá bezstarotně, může spotřebovávat velkou šířku pásma.
Triggery sdíleného a místního skriptu
Všechny toky vizuálních skriptů se spustí v reakci na událost.
- Pokud událost pochází z jednoho klienta (například uživatel klikne na tlačítko), skript vizuálu se spustí jenom na tomto klientovi.
- Pokud dojde k události u všech klientů, skript vizuálu se spustí na všech klientech (například událost časovače, změna sdílené vlastnosti, aktualizace sdílené proměnné, avatar zadá trigger, fyzika tělo se dotkne sbalitele).
Při přidávání uzlu, který zjistí, jestli je vybraný objekt, je důležité zvolit ten správný. Máte dvě možnosti: Interagovatelné tělo sítě: je vybráno místně a je vybráno interagovatelné tělo sítě: Je vybráno. Řekněme například, že chcete mít tlačítko, na které můžete kliknout a aktivovat teleportaci. Pokud chcete, aby účastník klikl na tlačítko a převezl pouze sám sebe, použijte interaktivní text sítě: Je vybrán místně .
Pokud chcete, aby účastník klikl na tlačítko a teleportovali všechny uživatele v prostředí, použijte interagovatelné tělo sítě: Je vybraný uzel. V každém případě text nad uzlem informuje o chování, které očekáváte:
Pokud místní skript nastaví sdílenou proměnnou a druhý skript naslouchá změnám této proměnné (pomocí triggeru Při změně stavu, viz níže), druhý skript se spustí na všech klientech.
Mesh nabízí několik speciálních uzlů skriptu:
- Při triggerech intervalů v pravidelných intervalech synchronně na všech klientech.
- Při změně stavu se aktivuje při změně vstupů (například sdílené vlastnosti, sdílené proměnné, místní).
- Dialogové okno Zobrazit zobrazí dialogové okno se zprávou s vlastním textem, které může volitelně poskytnout tlačítka jako možnosti odpovědi.
Mesh dělá určité kompromisy ve prospěch jednoduchosti:
- Pokud se více než jeden klient pokusí změnit stejná data, poslední klient vyhraje (místo použití modelu aktualizace dat založeného na transakcích).
- Aby se zajistila konzistence dat, nesmí skripty vizuálů, které běží na všech klientech, číst a zapisovat sdílené vlastnosti nebo proměnné. Pokud k tomu dojde, aktivuje chybu za běhu a přeruší spuštění toku skriptu.
Osvědčené postupy
Skripty vizuálů jsou výrazně pomalejší než nativní kód jazyka C#. Kromě toho mesh rozšiřuje vizuální skripty o síťové a další integrační funkce a zdánlivě nízkonákladové akce vizuálních skriptů můžou vést k síťovému provozu. Pokud se chcete dozvědět, jak dosáhnout nejlepšího výkonu ve vizuálních skriptech, doporučujeme zobrazit následující články:
Přehled osvědčených postupů pro skriptování vizuálů
Osvědčené postupy skriptování vizuálů pro výkon
Osvědčené postupy skriptování vizuálů pro sítě
Osvědčené postupy skriptování vizuálů pro ladění
Zabezpečení
Mesh chrání uživatele před hrozbami, jako jsou tyto:
- Ohrožený obsah scény – například škodlivé pokusy o přístup k citlivým místním datům.
- Ohrožený klient nebo přenosový kanál – například škodlivé pokusy o čtení nebo zápis nepřístupných vzdálených dat na jiných klientech.
Aby toho bylo dosaženo, mesh spouští vizuální skripty v sandboxu (například JavaScript ve webovém prohlížeči).
Při spuštění scény používá Mesh kurátorovaný seznam povolených k ověření vizuálních skriptů k omezení přístupu k určitým typům komponent Unity a bezpečné podmnožině jejich vlastností.
Při běhu scény omezuje Mesh přístup k určitým částem scény:
- Místně: Zabráněním přístupu k interním sítím a dalším citlivým datům.
- Vzdáleně: kontrolou, že autor scény hodlá tuto část scény upravit. To se provádí statickou analýzou vizuálních skriptů na straně příjemce pro jejich potenciální scény zápisů.
Příklady:
- Škodlivý místní vizuální skript chce dát všem avatarům bobble hlavy. Za tímto účelem se pokusí prohledat celou scénu pro GameObjects, které představují hlavy avatarů. Síť automaticky filtruje výsledky skenování, aby se vyloučil systém avatarů.
- Škodlivý vzdálený klient chce odvrátit scénu tak, že překlopí všechny Objekty GameObject vzhůru nohama. Aby toho bylo dosaženo, odešle aktualizaci vlastnosti, která nastaví vertikální měřítko každého Objektu GameObject ve scéně. Vzhledem k tomu, že žádný vizuální skript na přijímajícím klientovi není navržený tak, aby udělal něco takového, místní klient ignoruje vzdálený vstup.
Integrace sítě
Aktuální omezení: Tato část popisuje verzi Preview funkcí, které stále probíhají.
Obecně platí, že integrace s jinými komponentami se často provádí změnou a nasloucháním změnám vlastností součástí. Příklad:
Interagovatelné: všimněte si vlastností "Je najeto" a "Je vybráno".
Fyzikální interakce: sledujte těla v aktivačním objemu nebo v kontaktu s kolizníkem.
Avatary: čtení pozice avatara, otočení zobrazení a názvová deska. (Zatím není k dispozici.)
Stav relace: vypisovat účastníky a číst informace o účastníkech. (Zatím není k dispozici.)
Skriptování v cloudu: funguje společně s cloudovými skripty, které umí číst a zapisovat proměnné a vlastnosti komponent. (Zatím není k dispozici.)
Některé komponenty poskytují místní akce:
- Správce zvuku
- Časová osa
- Animátorů
- Vykreslování: Vlastnosti materiálu a shaderu pro čtení a zápis
Fyzika se zpracovává speciálně, protože simulace každého daného fyzikálního objektu je vždy autoritativně prováděna pouze jedním klientem: jeho vlastníkem. Aby to fungovalo, nastavení vlastností fyziky aktivuje automatický přenos vlastnictví do klienta, který změnu použije.