Scripts FL#
FL# (FluxSharp) est ce qui donne vie à un monde : portes, miroirs, portails, objets synchronisés, jeux. Tu écris du C# comme un MonoBehaviour de Unity, mais les scripts ne sont pas compilés par Unity : le SDK les compile avec fluxc en un module WebAssembly par monde, le même pour toutes les plateformes. Le module tourne dans l’interpréteur FL#, un bac à sable, sur l’appareil de chaque joueur et sur le serveur : un monde ne peut toucher ni l’ordinateur du joueur, ni le jeu en dehors de sa propre scène.
Il n’y a rien à installer : fluxc vient avec le SDK et tourne sur le runtime .NET de l’éditeur Unity.
Par où commencer
- Ton premier script FL# : une porte qui s’ouvre pour tout le monde, du dossier des scripts à la publication.
- Écrire du FL# dans ton IDE : la saisie semi-automatique et les erreurs du compilateur dans Visual Studio ou Rider.
- Scripts, callbacks et champs : ce qu’est un script, quand tournent ses méthodes, où il tourne.
- Le monde d’exemple : huit scripts pour ce dont un monde a souvent besoin (un miroir, une télé, un portail, des objets synchronisés…), à lire et à copier.
Où vont les scripts
- Dans la fenêtre Project, fais un clic droit sur un dossier de ton monde, puis Create, NodeWorld, FL# Scripts Folder : le SDK crée un dossier
Fluxavec une définition d’assembly (.asmdef) dont les Define Constraints ne sont jamais vraies (NODEWORLD_FLUX_SOURCES_NEVER_DEFINED). Mets-y les scripts.csdu monde. Unity voit les fichiers mais ne les compile pas : ils sont écrits pour l’API FL#, pas pourUnityEngine. - Dans le NW World Config du monde, liste les scripts dans Flux Sharp Sources.
- Sur un objet de la scène, ajoute le composant FL# Script (Add Component, NodeWorld, FL# Script) : la classe du script (
Espace.Classe), l’ID réseau de l’objet s’il est synchronisé, et les valeurs de ses champs publics.
Les bases
| Pour… | Lis |
|---|---|
| trouver, déplacer, montrer et cacher des objets | Objets et composants |
| montrer la même chose à chaque joueur | Objets et valeurs synchronisés |
| dire à chaque joueur qu’une chose s’est passée, ou demander au serveur | Événements réseau |
| lire et déplacer les joueurs, les asseoir, changer comment ils s’entendent | Joueurs |
| faire des objets que les joueurs utilisent ou attrapent, lire les touches et les boutons | Interaction et commandes |
| pousser des corps, lancer des rayons, réagir aux collisions | Physique |
| jouer des sons | Son |
| lire des vidéos d’Internet | Lecteurs vidéo |
| piloter des panneaux, boutons, curseurs et champs de texte | Interfaces (UI) |
| changer des matériaux, faire le rendu de caméras, piloter lumières, particules et animators | Caméras, matériaux et effets |
| attendre, répéter, et tirer des nombres aléatoires | Temps, coroutines et nombres aléatoires |
| retenir les choix d’un joueur entre deux visites | Données du joueur |
| retrouver ce que tes scripts ont écrit, et pourquoi l’un d’eux s’est arrêté | Les journaux de tes scripts |
| savoir jusqu’où tu peux aller, sur le serveur et en Play mode | Limites et performances |
Pour aller plus loin
- Web, WebSocket et images : appeler des API web et charger des images.
- Threads et asynchrone : répartir un travail lourd sur plusieurs threads.
- Meshes faits par les scripts, lots d’objets et dessin par instances : des milliers d’objets et de sommets par image.
- Objets apparus pour la salle : des copies que chaque joueur voit.
- Portails faits par les scripts : ouvrir des portails vers d’autres mondes.
Ce qui protège les joueurs
- Ce qu’un script ne peut pas bloquer : le menu, la réapparition et le départ restent au joueur.
- Le bac à sable de FL# : comment les scripts d’un monde tournent sur l’appareil des joueurs et sur les serveurs.
L’API
Les noms suivent ceux de Unity quand ils font la même chose : GameObject, Transform, Rigidbody, Physics.Raycast, Vector3, Quaternion, Mathf, Time, Debug.Log… plus ce qui est propre à NodeWorld : Player et Players, Networking, Interaction, Portals. Chaque type et chaque membre est dans la référence de l’API FL#, générée à partir du code.
Quand quelque chose ne marche pas : problèmes fréquents.
