Guida per programmatori di scripting visivo mesh
Passare all'articolo Panoramica di Visual Scripting
Limiti
- Solo un subset di funzionalità di Unity viene esposto agli script visivi.
- Le variabili e le proprietà con tipi non semplici (inclusi i riferimenti agli oggetti) non vengono condivise automaticamente. Per altre informazioni, vedere Condivisione e rete di seguito.
Hello World
Lo script visivo più semplice che è possibile creare è uno che apre semplicemente una finestra di messaggio:
Ecco come appare in Mesh:
Test degli script
Prima di caricare la scena in Mesh, è possibile sviluppare e testare script visivi, anche con più client in modalità schermo diviso, usando la modalità di riproduzione con l'emulazione mesh.
Diagnostica degli script visivi nell'editor
Quando un GameObject con un computer di script è selezionato nella gerarchia di trasformazione, mesh visualizza il pannello Diagnostica di scripting visivo mesh nella parte inferiore del pannello Controllo:
Il pannello di diagnostica fornisce feedback immediato su eventuali avvisi o errori che potrebbero impedire il corretto funzionamento degli script in Mesh.
Limitazione corrente: le versioni future del pannello di diagnostica possono anche fornire informazioni dettagliate sull'uso di variabili e proprietà condivise dello script visivo e visualizzare diagnostica e avvisi aggiuntivi.
Caricamento in mesh
Usare il caricamento mesh per caricare scene contenenti script visivi. Per aprire il caricatore, scegliere Ambienti dal menu Mesh Toolkit.
Nota: Il caricamento mesh convalida gli script visivi prima del caricamento e rifiuta il caricamento quando si verificano errori di convalida in qualsiasi script visivo. La diagnostica dettagliata viene restituita nella console.
Condivisione e rete
Stato dello script condiviso e locale
Mesh usa Unity Visual Scripting, progettato per funzionare senza rete. Gli script visivi vengono eseguiti in ogni client in modo indipendente. Tuttavia, l'esperienza mesh degli utenti è condivisa; tutti gli utenti riscontrano una singola scena condivisa che ha lo stesso aspetto su tutti i client.
L'effetto dell'esecuzione di uno script visivo è il modo in cui cambia lo stato della scena.
Per impostazione predefinita, Mesh replica automaticamente le modifiche della scena eseguite dagli script visivi in un client in tutti gli altri client. A parte tutto ciò che viene condiviso in una scena, alcuni stati rimangono indipendenti su ogni client (in altre parole, locale).
Le modifiche locali hanno temporaneamente la precedenza sulle modifiche provenienti dai client. Esempio: se si continua ad animare un oggetto in locale, l'animazione locale non viene compromessa dalle modifiche provenienti da altri client.
Esiste una limitazione automatica della frequenza di aggiornamento. Un client non invia aggiornamenti aggiuntivi mentre uno è ancora in anteprima; è presente un aggiornamento inviato per round trip attraverso il server. Ciò equivale a circa cinque-sei aggiornamenti al secondo in situazioni pratiche. Ciò significa che un'animazione fluida guidata da un client non sarà uniforme su altri client. La procedura consigliata consiste nell'eseguire animazioni uniformi in locale, idealmente non tramite script visivi, ma tramite il normale sistema di animazione Unity.
La coerenza finale dello stato condiviso è garantita (anche se gli stati dei client possono essere temporaneamente diversi).
Stato locale:
- Stato locale naturale: suoni, interfaccia utente, rendering.
- Stato locale controllato dall'utente: scene secondarie contrassegnate con il componente Ambito script locale.
- Stato locale tecnico: oggetti che non fanno parte della gerarchia della scena (ad esempio, materiali renderer, asset).
Stato condiviso:
- Limitato alle variabili di script visivo e alle proprietà di GameObjects e componenti della scena che fanno parte della gerarchia della scena.
- È possibile replicare solo variabili e proprietà di tipi semplici: numeri interi, numeri a virgola mobile, valori booleani, stringhe,
Color
,//Vector2
4
Quaternion
3
, ,Matrix4x4
e .Rect
Qualsiasi modifica allo stato condiviso viene inviata in rete. Ciò aumenta il traffico di rete e, se usato senza attenzione, può utilizzare una larghezza di banda significativa.
Trigger di script condivisi e locali
Tutti i flussi di script visivi iniziano in risposta a un evento.
- Se l'evento ha origine in un singolo client(ad esempio, l'utente fa clic su un pulsante), lo script visivo viene eseguito solo su tale client.
- Se l'evento si verifica in tutti i client, lo script visivo viene eseguito su tutti i client ( ad esempio, evento timer, modifica delle proprietà condivise, aggiornamento delle variabili condivise, avatar entra in trigger, collisore del corpo fisico).
Quando si aggiunge un nodo per rilevare se è selezionato un oggetto, è importante sceglierne uno corretto. Sono disponibili due opzioni: Mesh Interactable Body: Is Selected Local e Mesh Interactable Body:Is Selected. Si supponga, ad esempio, di voler fare clic su un pulsante per attivare il teletrasporto. Per fare in modo che i partecipanti facciano clic sul pulsante e si trasportino solo se stessi, usare il nodo Mesh Interactable Body: is selected localmente .
Per fare in modo che il partecipante faccia clic sul pulsante e teletrasporti tutti gli utenti nell'esperienza, usa il nodo Mesh Interactable Body: Is Selected . In ogni caso, il testo sopra il nodo indica il comportamento previsto:
Se uno script locale imposta una variabile condivisa e un secondo script resta in ascolto delle modifiche apportate a questa variabile (usando il trigger On State Changed ; vedere di seguito), il secondo script verrà eseguito su tutti i client.
Mesh offre alcuni nodi di script speciali:
- Nei trigger Interval a intervalli regolari viene eseguito in modo sincrono su tutti i client.
- In State Changed triggers when its inputs change (ad esempio, shared properties, shared variables, local).
- Mostra finestra di dialogo visualizza una finestra di dialogo di messaggio con testo personalizzato che può facoltativamente fornire pulsanti come opzioni di risposta.
Mesh rende alcuni compromessi a favore della semplicità:
- Se più client tenta di modificare gli stessi dati, l'ultimo client vince (anziché usare un modello di aggiornamento dati basato sulle transazioni).
- Per garantire la coerenza dei dati, gli script visivi eseguiti in tutti i client non devono leggere e quindi scrivere proprietà o variabili condivise. In questo caso, attiva un errore di runtime e interrompe l'esecuzione del flusso di script.
Procedure consigliate
Gli script visivi sono notevolmente più lenti rispetto al codice C# nativo. Mesh aumenta inoltre gli script visivi con funzionalità di rete e altre funzionalità di integrazione e le azioni di script visivi apparentemente a basso sovraccarico possono causare traffico di rete. Per informazioni su come ottenere prestazioni ottimali dagli script visivi, è consigliabile visualizzare gli articoli seguenti:
Panoramica delle procedure consigliate per la creazione di script visivi
Procedure consigliate per la creazione di script visivi per le prestazioni
Procedure consigliate per la creazione di script visivi per la rete
Procedure consigliate per la creazione di script visivi per il debug
Sicurezza
Mesh protegge gli utenti da scenari di minacce come questi:
- Contenuto della scena compromesso, ad esempio tentativi dannosi di accedere ai dati locali sensibili.
- Canale di trasporto o client compromesso, ad esempio tentativi dannosi di leggere o scrivere dati remoti inaccessibili su altri client.
A tale scopo, Mesh esegue script visivi in una sandbox (ad esempio JavaScript in un Web browser).
All'avvio della scena, Mesh usa un elenco di elementi consentiti curato per convalidare gli script visivi per limitare l'accesso a determinati tipi di componenti Unity e a un subset sicuro delle relative proprietà.
In fase di esecuzione della scena, mesh limita l'accesso a determinate parti della scena:
- Localmente: impedendo l'accesso agli elementi interni mesh e ad altri dati sensibili.
- Remoto: verificando che l'autore della scena intenda modificare questa parte della scena. Questa operazione viene eseguita analizzando in modo statico gli script visivi sul lato del ricevitore per le potenziali scritture della scena.
Esempi:
- Uno script visivo locale dannoso vuole dare a tutti gli avatar bobble teste. A tal fine, tenta di analizzare l'intera scena per GameObject che rappresentano teste avatar. Mesh filtra automaticamente i risultati dell'analisi per escludere il sistema avatar.
- Un client remoto dannoso vuole defacere la scena capovolgendo tutti gli oggetti GameObject. A tale scopo, invia un aggiornamento delle proprietà che imposta la scala verticale di ogni GameObject nella scena. Tuttavia, poiché nessun script visivo nel client ricevente è progettato per eseguire operazioni simili, il client locale ignora l'input remoto.
Integrazione mesh
Limitazione corrente: questa sezione descrive un'anteprima delle funzionalità ancora in corso.
In genere, l'integrazione con altri componenti viene spesso eseguita modificando e ascoltando le modifiche delle proprietà dei componenti. Ad esempio:
Interazioni: osservare le proprietà "Is Hovered" e "Is Selected".
Interazioni fisiche: osservare i corpi nel volume di attivazione o in contatto con collisore.
Avatar: leggi posizione avatar, rotazione della visualizzazione e lastra dei nomi. (Non ancora disponibile).
Stato sessione: elencare i partecipanti e leggere le informazioni sui partecipanti. (Non ancora disponibile).
Scripting cloud: opera in combinazione con script cloud in grado di leggere e scrivere variabili e proprietà dei componenti. (Non ancora disponibile).
Alcuni componenti forniscono azioni locali:
- Audio Manager
- Sequenza temporale
- Animatori
- Rendering: proprietà materiale e shader di lettura e scrittura
La fisica viene gestita appositamente perché la simulazione per qualsiasi oggetto fisico specifico viene sempre eseguita in modo autorevole da un solo client: il suo proprietario. Per eseguire questa operazione, l'impostazione delle proprietà fisiche attiva un trasferimento automatico della proprietà al client che applica la modifica.