NodeWorld

Joueurs

Player est le joueur local : celui dont le jeu fait tourner cette copie de tes scripts. Players, c'est tout le monde dans la salle. Le jeu de chaque joueur se voit lui-même comme Player : ce qu'un script fait à Player n'arrive qu'à ce joueur.

csharp
using NodeWorld.Flux;

namespace MonMonde
{
    public class Bienvenue : FluxScript
    {
        public Text tableau;

        protected override void Start() => Afficher();
        protected override void OnPlayerJoined(int playerId) => Afficher();
        protected override void OnPlayerLeft(int playerId) => Afficher();

        private void Afficher()
        {
            var noms = "";
            foreach (var id in Players.ids)
                noms += Players.GetName(id) + (Players.IsMaster(id) ? " (maître)" : "") + "\n";
            tableau.text = noms;
        }
    }
}

Le joueur local

Player.idSon ID dans la salle (0 sur le serveur, qui n'a pas de joueur local).
Player.name, Player.accountIdSon nom affiché, et son compte NodeWorld : le même dans chaque salle et à chaque visite, pour donner des droits à certains comptes.
Player.languageLa langue de son jeu ("en", "fr"…) ; OnLanguageChanged(language) quand il la change.
Player.isInVR, Input.isDesktopDans un casque, ou au clavier et à la souris.
Player.isMasterIl est le maître de la salle.
Player.position, Player.rotation, Player.velocity, Player.isGroundedOù il se tient et comment il bouge.
Player.headPosition, Player.headRotationSa tête (la caméra).
Player.GetTrackingPosition(point), GetTrackingRotation(point)TrackingPoint.Head, LeftHand, RightHand, ou Origin : l'origine de son espace de jeu, au sol.
Player.GetBonePosition(bone), GetBoneRotation(bone)Un os de son avatar (Bone.Head, Bone.LeftHand…), dans l'espace du monde ; Vector3.zero sans avatar.

Déplacer le joueur local

Player.Teleport(position, yRotationDegrees)Déplace l'origine de son espace de jeu à cet endroit, tournée. Sur ordinateur, il se tient dessus ; en VR, sa tête garde sa place dans la pièce.
Player.Teleport(position, rotation)Pareil, incliné : un siège qui tangue avec un véhicule incline la vue avec lui.
Player.Respawn()Retour au point d'apparition.
Player.velocity = …Le pousse ; la gravité et le sol agissent ensuite.
Player.walkSpeed, runSpeed, strafeSpeedSes vitesses.
Player.jumpImpulseLa vitesse verticale d'un saut, en m/s ; 0 : pas de saut.
Player.gravityStrength1 normale, 0 aucune.
Player.immobilizedSes commandes ne le déplacent plus ; tes scripts le peuvent toujours.
Player.PlayHaptic(hand, duration, amplitude, frequency)Fait vibrer une manette en VR.

Le joueur peut toujours ouvrir le menu, réapparaître et partir, quelles que soient ces valeurs : son Réapparaître lui rend ses propres mouvements (ce qu'un script ne peut pas bloquer). OnPlayerRespawn() tourne sur chaque script quand le joueur local réapparaît : il est tombé sous la Respawn Height du NW World, a choisi Réapparaître, ou un script a appelé Player.Respawn(). Remets-y tes valeurs si ton monde en a besoin.

Asseoir le joueur local

Player.sittingPoint = siege met son avatar dans sa pose assise sur le transform siege : sa racine sur le point, tournée vers son avant, qui le suit quand il bouge ; sa tête et ses mains suivent toujours le joueur. null le relève. Place toi-même le joueur pour que ses yeux soient là où sont ceux de l'avatar : Player.sittingEyeOffset donne cet endroit depuis le point, dans l'espace du point. Voir les sièges.

Les autres joueurs

Players.idsLes ID de tout le monde dans la salle, joueur local compris, dans l'ordre d'arrivée (le maître d'abord).
Players.count, Players.Get(index)Les autres joueurs seulement, en PlayerInfo (id, name, position, rotation, headPosition).
Players.Exists(id), GetName(id), GetAccountId(id), IsMaster(id), GetJoinOrder(id)Un joueur par son ID ; GetJoinOrder vaut 0 pour le premier encore là, -1 pour un joueur absent.
Players.GetPosition(id), GetRotation(id), GetVelocity(id), GetBonePosition(id, bone), GetBoneRotation(id, bone), GetTrackingPosition(id, point), GetTrackingRotation(id, point)Sa pose.

OnPlayerJoined(playerId) et OnPlayerLeft(playerId) tournent sur chaque script quand un autre joueur entre dans la salle ou en sort ; OnMasterChanged(masterId) quand le maître change.

Les scripts n'atteignent pas les avatars : tu lis leurs os et leur pose, tu ne les changes pas.

Les voix

Comment le joueur local entend un autre joueur, réglé par tes scripts dans le jeu de chaque joueur :

csharp
// Les joueurs sur scène s'entendent dans toute la salle.
Players.SetVoice(chanteurId, new VoiceSettings { near = 10f, far = 60f, gain = 6f, volumetricRadius = 2f, lowpass = false });
VoiceSettings
nearDistance (m) jusqu'à laquelle la voix est à plein volume.
farDistance (m) au-delà de laquelle on ne l'entend plus ; 0 : on ne l'entend pas du tout.
gainGain en dB ; 0 : telle quelle.
volumetricRadiusRayon (m) de la source de la voix ; plus il est grand, moins elle sonne comme un point.
lowpassÉtouffe une voix lointaine.

Players.SetVoiceNear, SetVoiceFar, SetVoiceGain, SetVoiceVolumetricRadius et SetVoiceLowpass changent une seule valeur ; ResetVoice(id) revient aux réglages du jeu (Players.defaultVoice) ; GetVoice(id) lit ce que tes scripts ont réglé. Players.SetAvatarAudible(id, false) coupe les sons de l'avatar de ce joueur pour le joueur local, jusqu'au déchargement du monde.

Sur le serveur

Le serveur n'a pas de joueur local : Player.id y vaut 0 et le reste de Player y est refusé, et Players contient tous les joueurs de la salle. OnPlayerJoined et OnPlayerLeft y tournent aussi.