Caméras, matériaux et effets
Tout ce qui est sur cette page dessine : ça tourne dans le jeu des joueurs, là où le monde est rendu. Le serveur ne rend rien et refuse ces appels : marque ces scripts [ClientOnly].
Les matériaux
Un Material est un matériau de ton monde : un champ réglé par la scène, ou renderer.sharedMaterial. Le changer change tous les renderers qui l'utilisent.
using NodeWorld.Flux;
namespace MonMonde
{
[ClientOnly]
public class Neon : FluxScript
{
public Material neon;
protected override void Update()
{
var pulsation = 0.5f + 0.5f * Mathf.Sin(Time.time * 4f);
neon.SetColor("_EmissionColor", Color.cyan * (2f * pulsation));
}
}
}Material | color (sa couleur principale), SetFloat, SetColor, SetVector, SetTexture, GetFloat, GetColor, GetVector, HasProperty, shader (donne-lui le shader d'un autre matériau de ton monde), renderQueue, shaderKeywords |
Renderer | sharedMaterial, sharedMaterials, SetSharedMaterial(index, material), materialCount, enabled, bounds |
Renderer.SetFloat, SetColor, SetVector, SetMatrix, SetTexture | Une valeur pour ce renderer seul (un property block) : le matériau partagé ne change pas. Le dernier argument est l'indice du matériau (0 par défaut). |
Shader.SetGlobalFloat, SetGlobalVector, SetGlobalColor, SetGlobalTexture | Une valeur que tous les shaders de ton monde lisent (une horloge, un vent). Les noms qui commencent par unity_ ou _NW sont ceux de Unity et de NodeWorld : A world cannot set the global shader property '_NWTime' (reserved by Unity or NodeWorld). |
Les textures viennent des champs (Texture, Sprite), des images chargées depuis le web, des render textures et des textures de données.
Caméras et render textures
Une caméra de ta scène garde ses réglages, mais le jeu l'éteint : la vue du joueur est celle du jeu. Pour faire le rendu d'autre chose (un miroir, un écran de surveillance, la vue d'un portail), un script crée sa propre caméra et en fait le rendu dans une texture :
[ClientOnly]
public class CameraSurveillance : FluxScript
{
public Renderer ecran;
private Camera _camera;
private RenderTexture _texture;
protected override void Start()
{
_texture = RenderTexture.Create(512, 512);
_camera = Camera.Create();
_camera.targetTexture = _texture;
_camera.transform.SetPositionAndRotation(transform.position, transform.rotation);
ecran.SetTexture("_BaseMap", _texture);
}
protected override void LateUpdate() => _camera.Render();
}Camera.Create()crée une caméra de ton monde, éteinte : elle ne fait son rendu que quand le script appelleRender(), dans satargetTexture. L'allumer est refusé (A camera created by a script only renders when the script calls Render.).- Ses réglages :
cullingMask,clearFlagsetbackgroundColor,fieldOfView,aspect,nearClipPlane,farClipPlane,worldToCameraMatrix,projectionMatrix,CalculateObliqueMatrix,useOcclusionCulling, etshowLocalPlayerHead(la tête du joueur local, cachée à ses propres yeux, apparaît dans un miroir). Camera.mainest la caméra du joueur (les yeux en VR) : lis sa pose,stereoEnabled,GetStereoViewMatrix(eye)etGetStereoProjectionMatrix(eye)pour faire une image par œil.RenderTexture.Create(width, height, depthBits, hdr)etRelease(). Une render texture va à un renderer (SetTexture) ou à tous les shaders (Shader.SetGlobalTexture).
Le miroir du monde d'exemple est un script de caméra complet.
Les textures de données
DataTexture.Create(width, height) (de 1 à 1024 texels de côté) est une petite texture de nombres à virgule que ton script écrit : SetPixels(rgba) prend largeur × hauteur × 4 valeurs (r, g, b, a), ligne par ligne depuis y = 0. Donne-la à tes shaders avec Shader.SetGlobalTexture : Pulse passe ainsi la musique aux shaders. Release() la libère.
Lumières, particules, animation
| Composant | Ce qu'un script utilise |
|---|---|
Light | enabled, intensity, color, range, spotAngle |
ParticleSystem | Play, Stop, Pause, Clear, Emit(count), Simulate, isPlaying, isEmitting, particleCount ; main : startColor, startSize, startSpeed, startLifetime, simulationSpeed, gravityModifier, loop, maxParticles ; emission : enabled, rateOverTime, rateOverTimeMultiplier |
Animator | SetBool, SetFloat, SetInteger, SetTrigger, ResetTrigger, leurs Get…, Play(state, layer, normalizedTime), speed, Rebind, Update(deltaTime), enabled |
LineRenderer, TrailRenderer | positionCount, SetPosition, GetPosition, SetPositions, useWorldSpace, startWidth, endWidth, startColor, endColor |
Volume (post-traitement) | weight, enabled |
ReflectionProbe | intensity, enabled |
LODGroup | enabled |
ParentConstraint | sourceCount, GetSourceTransform, GetSourceWeight, SetSourceWeight, enabled |
Pour beaucoup d'objets à la fois, vois les lots d'objets et le dessin par instances ; pour les meshes, les meshes faits par les scripts.
