NodeWorld

Objets et composants

Un script atteint les objets de son monde par GameObject, Transform et les composants, avec les noms de Unity. Un seul objet C# représente chaque objet du monde : == compare donc les objets eux-mêmes.

csharp
using NodeWorld.Flux;

namespace MonMonde
{
    public class Interrupteur : FluxScript
    {
        public GameObject lampe;   // réglé depuis la scène

        protected override void Start() => Interaction.SetInteractable(gameObject, true);

        protected override void OnInteract()
        {
            lampe.SetActive(!lampe.activeSelf);
            var abatJour = lampe.transform.Find("AbatJour");
            if (abatJour != null) abatJour.localScale = lampe.activeSelf ? Vector3.one : new Vector3(1f, 0.5f, 1f);
        }
    }
}

Trouver un objet

AppelTrouve
un champ réglé par la scène (public GameObject porte;)l'objet que tu as déposé sur le composant FL# Script : le plus simple et le plus rapide
GameObject.Find("Porte")un objet du monde par son nom
GameObject.FindPath("Bar/Comptoir/Porte")l'objet à ce chemin depuis une racine de la scène
transform.Find("Gond/Porte")un enfant à ce chemin sous un transform
transform.GetChild(i), childCount, parent, rootla hiérarchie

Tes scripts ne voient que les objets de ton monde : ceux de ta scène et ceux que tes scripts créent. Les avatars, les portails, les appareils photo et les voix que NodeWorld met dans ta scène ne sont pas trouvés (ce qu'un script ne peut pas bloquer).

Le GameObject

  • name, tag (CompareTag("Abeille")), layer (0 à 30 : la couche 31 est celle de l'interface de NodeWorld, voir les couches). Donner un tag que les Tags and Layers du projet n'ont pas est refusé : The tag 'Abeille' is not defined in this world.
  • SetActive(bool), activeSelf, activeInHierarchy. Un script sur un objet inactif ne reçoit pas d'Update (voir les callbacks).
  • GetComponent<T>(), GetComponents<T>(), GetComponentInChildren<T>(), GetComponentsInChildren<T>(includeInactive).

Le transform

position, rotation, localPosition, localRotation, localScale, lossyScale, eulerAngles, localEulerAngles, forward, up, right, localToWorldMatrix, worldToLocalMatrix, et les méthodes de Unity : Translate, Rotate, LookAt, SetPositionAndRotation, TransformPoint, InverseTransformPoint, TransformDirection, TransformVector et leurs inverses, SetParent, GetSiblingIndex, SetSiblingIndex, SetAsFirstSibling, SetAsLastSibling, IsChildOf.

Déplacer un objet ici le déplace pour ce joueur seulement. Pour tous les joueurs, vois objets et valeurs synchronisés.

Les composants qu'un script peut utiliser

GetComponent<T>() marche avec ces types ; un autre type lance A FL# script cannot get the component <type>.

ComposantPage
Transform, RectTransformcette page, interfaces
Rigidbody, Collider, BoxCollider, SphereCollider, MeshColliderphysique
Renderer, LineRenderer, TrailRenderer, MeshFilter, Camera, Light, ParticleSystem, Animator, Volume, LODGroup, ReflectionProbe, ParentConstraintcaméras, matériaux et effets, meshes faits par les scripts
AudioSourceson
Canvas, CanvasGroup, Text, Image, Button, Slider, Toggle, Dropdown, InputField, ScrollRect, Scrollbarinterfaces

Les autres composants de ta scène (une zone de réverbération, un joint, une Timeline…) marchent comme tu les as réglés dans Unity ; un script ne les change pas.

Copier et détruire

  • Object.Instantiate(original, parent) et Object.Instantiate(original, position, rotation, parent) copient un objet de ton monde, avec ses enfants, pour ce joueur seulement. Les scripts FL# de la copie sont créés juste après le callback en cours. Une copie que tous les joueurs voient apparaît pour la salle.
  • Object.Destroy(obj) détruit ce que tes scripts ont créé : une copie, une caméra, une render texture, un mesh, un lecteur vidéo, un lot. Avec un composant, il détruit son objet. Les scripts d'un objet détruit reçoivent OnDestroy.

Un objet de ta scène n'est pas détruit : éteins-le avec SetActive(false). Les appels le disent dans le journal : A FL# script can destroy only the objects it created., A FL# script can copy only the objects of its world.