NodeWorld

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

  1. Ton premier script FL# : une porte qui s’ouvre pour tout le monde, du dossier des scripts à la publication.
  2. Écrire du FL# dans ton IDE : la saisie semi-automatique et les erreurs du compilateur dans Visual Studio ou Rider.
  3. Scripts, callbacks et champs : ce qu’est un script, quand tournent ses méthodes, où il tourne.
  4. 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

  1. 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 Flux avec une définition d’assembly (.asmdef) dont les Define Constraints ne sont jamais vraies (NODEWORLD_FLUX_SOURCES_NEVER_DEFINED). Mets-y les scripts .cs du monde. Unity voit les fichiers mais ne les compile pas : ils sont écrits pour l’API FL#, pas pour UnityEngine.
  2. Dans le NW World Config du monde, liste les scripts dans Flux Sharp Sources.
  3. 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 objetsObjets et composants
montrer la même chose à chaque joueurObjets 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’entendentJoueurs
faire des objets que les joueurs utilisent ou attrapent, lire les touches et les boutonsInteraction et commandes
pousser des corps, lancer des rayons, réagir aux collisionsPhysique
jouer des sonsSon
lire des vidéos d’InternetLecteurs vidéo
piloter des panneaux, boutons, curseurs et champs de texteInterfaces (UI)
changer des matériaux, faire le rendu de caméras, piloter lumières, particules et animatorsCaméras, matériaux et effets
attendre, répéter, et tirer des nombres aléatoiresTemps, coroutines et nombres aléatoires
retenir les choix d’un joueur entre deux visitesDonné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 modeLimites et performances

Pour aller plus loin

Ce qui protège les joueurs

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.