Guide du programmeur de script visuel Mesh
Accédez à l’article de vue d’ensemble de Visual Scripting
Limites
- Seul un sous-ensemble de fonctionnalités Unity est exposé aux scripts visuels.
- Les variables et les propriétés avec des types non simples (y compris les références d’objet) ne sont pas automatiquement partagées. Pour en savoir plus sur ce sujet, consultez Partage et mise en réseau ci-dessous.
Hello World
Le script visuel le plus simple que vous pouvez créer est un script qui ouvre simplement une boîte de message :
Voici comment il ressemble dans Mesh :
Test de vos scripts
Avant de charger votre scène sur Mesh, vous pouvez développer et tester des scripts visuels, même avec plusieurs clients en mode écran fractionné, à l’aide du mode Lecture avec émulation mesh.
Diagnostics de script visuel dans l’éditeur
Lorsqu’un GameObject avec une machine de script est sélectionné dans la hiérarchie de transformation, Mesh affiche le panneau Diagnostics de script visuel mesh en bas du panneau Inspecteur :
Le panneau de diagnostics fournit des commentaires immédiats sur les avertissements ou erreurs susceptibles d’empêcher vos scripts de fonctionner correctement dans Mesh.
Limitation actuelle : les futures versions du panneau de diagnostics peuvent également donner un aperçu de l’utilisation de variables et de propriétés partagées par le script visuel et afficher des diagnostics et des avertissements supplémentaires.
Chargement vers Mesh
Utilisez le chargeur mesh pour charger des scènes qui contiennent des scripts visuels. Pour ouvrir le chargeur, dans le menu Mesh Toolkit , sélectionnez Environnements.
Remarque : Mesh Uploader valide les scripts visuels avant le chargement et refuse de charger lorsqu’il existe des erreurs de validation dans des scripts visuels. Les diagnostics détaillés sont générés dans la console.
Partage et mise en réseau
État du script partagé et local
Mesh utilise le script visuel Unity, qui est conçu pour fonctionner sans mise en réseau. Les scripts visuels s’exécutent indépendamment sur chaque client. Toutefois, l’expérience Mesh des utilisateurs est partagée ; tous les utilisateurs connaissent une seule scène partagée qui ressemble à celle de tous les clients.
L’effet de l’exécution d’un script visuel est la façon dont il modifie l’état de la scène.
Par défaut, Mesh réplique automatiquement les modifications de scène effectuées par des scripts visuels sur un client vers tous les autres clients. Outre tout ce qui est partagé dans une scène, un état reste indépendant sur chaque client (en d’autres termes, local).
Les modifications locales sont temporairement prioritaires sur les modifications provenant des clients. Exemple : Si vous continuez à animer un objet localement, votre animation locale n’est pas compromise par les modifications provenant d’autres clients.
Il existe une limitation du taux de mise à jour automatique. Un client n’envoie pas de mises à jour supplémentaires pendant qu’un client est toujours en cours d’exécution ; il existe une mise à jour envoyée par aller-retour via le serveur. Cela représente environ cinq à six mises à jour par seconde dans des situations pratiques. Cela signifie qu’une animation fluide pilotée par un client ne semble pas lisse sur d’autres clients. La meilleure pratique consiste à effectuer des animations lisses localement, idéalement pas par le biais de scripts visuels, mais par le biais du système d’animation Unity normal.
La cohérence éventuelle de l’état partagé est garantie (même si les états des clients peuvent temporairement être différents).
État local :
- État local naturel : sons, interface utilisateur, rendu.
- État local contrôlé par l’utilisateur : sous-scènes marquées avec le composant Étendue de script local.
- État local technique : objets qui ne font pas partie de la hiérarchie de scènes (par exemple, matériaux de renderer, ressources).
État partagé :
- Limité aux variables de script visuel et aux propriétés des composants GameObjects et scène qui font partie de la hiérarchie de scène.
- Seules les variables et les propriétés de types simples peuvent être répliquées : entiers, nombres à virgule flottante, booléens, chaînes,
Color
, ,//Vector2
4
Quaternion
3
,Matrix4x4
et .Rect
Toute modification de l’état partagé est envoyée sur le réseau. Cela augmente le trafic réseau et, s’il est utilisé sans précaution, peut consommer une bande passante significative.
Déclencheurs de script partagé et local
Tous les flux de script visuel commencent en réponse à un événement.
- Si l’événement provient d’un seul client (par exemple, l’utilisateur clique sur un bouton), le script visuel s’exécute uniquement sur ce client.
- Si l’événement se produit sur tous les clients, le script visuel s’exécute sur tous les clients (par exemple, événement du minuteur, modification de propriété partagée, mise à jour de variable partagée, avatar entre le déclencheur, le corps physique touches collider).
Lors de l’ajout d’un nœud pour détecter si un objet est sélectionné, il est important de choisir celui qui convient. Vous avez deux choix : Corps interagissant maillage : sélectionné localement et corps interagissant maillage : est sélectionné. Supposons, par exemple, que vous souhaitiez avoir un bouton qui peut être cliqué pour déclencher la téléportation. Pour que le participant clique sur le bouton et se transporte uniquement, utilisez le corps interagissant mesh : est sélectionné localement .
Pour que le participant clique sur le bouton et la téléporte tout le monde dans l’expérience, utilisez le corps interagissant mesh : est sélectionné nœud. Dans chaque cas, le texte au-dessus du nœud vous indique le comportement à attendre :
Si un script local définit une variable partagée et qu’un deuxième script écoute les modifications apportées à cette variable (à l’aide du déclencheur On State Changed ; voir ci-dessous), le deuxième script est exécuté sur tous les clients.
Mesh propose des nœuds de script spéciaux :
- Sur les déclencheurs Interval à intervalles réguliers, de façon synchrone sur tous les clients.
- Sur les déclencheurs Changement d’état lorsque ses entrées changent (par exemple, propriétés partagées, variables partagées, local).
- Afficher la boîte de dialogue affiche une boîte de dialogue de message avec du texte personnalisé qui peut éventuellement fournir des boutons en tant qu’options de réponse.
Mesh fait certains compromis en faveur de la simplicité :
- Si plusieurs clients essaient de modifier les mêmes données, le dernier client gagne (au lieu d’utiliser un modèle de mise à jour de données basée sur les transactions).
- Pour garantir la cohérence des données, les scripts visuels qui s’exécutent sur tous les clients ne doivent pas lire, puis écrire des propriétés ou des variables partagées. Si cela se produit, il déclenche une erreur d’exécution et abandonne l’exécution du flux de script.
Bonnes pratiques
Les scripts visuels sont beaucoup plus lents que le code C# natif. En outre, Mesh augmente les scripts visuels avec des fonctionnalités réseau et d’autres fonctionnalités d’intégration, et les actions de script visuel apparemment peu chargés peuvent entraîner le trafic réseau. Pour en savoir plus sur l’obtention des meilleures performances de vos scripts visuels, nous vous recommandons d’afficher les articles suivants :
Vue d’ensemble des meilleures pratiques de création de scripts visuels
Meilleures pratiques de création de scripts visuels pour les performances
Bonnes pratiques de création de scripts visuels pour la mise en réseau
Bonnes pratiques de création de scripts visuels pour le débogage
Sécurité
Mesh protège les utilisateurs contre les scénarios de menace tels que ceux-ci :
- Contenu de scène compromis , par exemple, des tentatives malveillantes d’accès aux données locales sensibles.
- Client compromis ou canal de transport ( par exemple, des tentatives malveillantes de lecture ou d’écriture de données distantes inaccessibles sur d’autres clients).
Pour ce faire, Mesh exécute des scripts visuels dans un bac à sable (comme JavaScript dans un navigateur web).
Au démarrage de la scène, Mesh utilise une liste verte organisée pour valider les scripts visuels afin de limiter l’accès à certains types de composants Unity et à un sous-ensemble sécurisé de leurs propriétés.
Au moment de l’exécution de la scène, Mesh limite l’accès à certaines parties de la scène :
- Localement : en empêchant l’accès aux éléments internes de Mesh et à d’autres données sensibles.
- À distance : en vérifiant que l’auteur de la scène a l’intention de modifier cette partie de la scène. Pour ce faire, analyse statiquement les scripts visuels côté récepteur pour leurs écritures de scène potentielles.
Exemples :
- Un script visuel local malveillant veut donner à tous les avatars des têtes bobble. À cette fin, il tente d’analyser l’intégralité de la scène pour GameObjects qui représentent les têtes d’avatar. Mesh filtre automatiquement les résultats de l’analyse pour exclure le système d’avatar.
- Un client distant malveillant veut faire face à la scène en retournant tous les GameObjects à l’envers. Pour ce faire, il envoie une mise à jour de propriété qui définit l’échelle verticale de chaque GameObject dans la scène. Toutefois, étant donné qu’aucun script visuel sur le client de réception n’est conçu pour faire quoi que ce soit, le client local ignore l’entrée distante.
Intégration de maillage
Limitation actuelle : cette section décrit une préversion des fonctionnalités qui fonctionnent toujours en cours.
En règle générale, l’intégration à d’autres composants est souvent effectuée en changeant et en écoutant les modifications des propriétés des composants. Par exemple :
Interactions : observez les propriétés « Is Hovered » et « Is Selected ».
Interactions physiques : observez les corps dans le volume du déclencheur ou en contact avec un collisionneur.
Avatars : lire la position de l’avatar, la rotation de la vue et la plaque de nom. (Non disponible pour le moment.)
État de session : répertorier les participants et lire les informations des participants. (Non disponible pour le moment.)
Script cloud : fonctionne en tandem avec les scripts cloud qui peuvent lire et écrire des variables et des propriétés de composant. (Non disponible pour le moment.)
Certains composants fournissent des actions locales :
- Gestionnaire audio
- Durée
- Animateurs
- Rendu : propriétés de matériau et de nuanceur de lecture et d’écriture
La physique est gérée spécialement parce que la simulation d’un objet physique donné fait toujours autorité par un seul client : son propriétaire. Pour effectuer ce travail, la définition des propriétés physiques déclenche un transfert automatique de propriété vers le client qui applique la modification.