using UnityEngine; using System.Collections.Generic; public class WhiteModeURP : MonoBehaviour { [Header("Optionnel: inclure SkinnedMeshRenderers")] public bool includeSkinned = true; [Header("Couleur du mode blanc")] public Color whiteColor = Color.white; Material _whiteMat; readonly List _renderers = new(); readonly Dictionary _original = new(); void Awake() { // URP Unlit (super léger) var unlit = Shader.Find("Universal Render Pipeline/Unlit"); if (unlit == null) { Debug.LogError("Shader URP Unlit introuvable. Vérifie que tu es bien en URP."); enabled = false; return; } _whiteMat = new Material(unlit); if (_whiteMat.HasProperty("_BaseColor")) _whiteMat.SetColor("_BaseColor", whiteColor); else if (_whiteMat.HasProperty("_Color")) _whiteMat.SetColor("_Color", whiteColor); CacheRenderers(); } void CacheRenderers() { _renderers.Clear(); _original.Clear(); // Tous les Renderers (MeshRenderer, SkinnedMeshRenderer, etc.) var all = FindObjectsOfType(true); foreach (var r in all) { if (!includeSkinned && r is SkinnedMeshRenderer) continue; // Ignore particules / trails si tu veux (optionnel) // if (r is ParticleSystemRenderer || r is TrailRenderer) continue; _renderers.Add(r); // Sauvegarde des sharedMaterials (réversible) _original[r] = r.sharedMaterials; } } public void SetWhiteMode(bool enabledWhite) { Awake(); print("enabledWhite======"+enabledWhite); foreach (var r in _renderers) { if (!r) continue; if (enabledWhite) { var mats = r.sharedMaterials; // Remplace chaque slot par le même matériau blanc (pas de new par objet) for (int i = 0; i < mats.Length; i++) mats[i] = _whiteMat; r.sharedMaterials = mats; // Bonus perf si tu veux: couper les ombres (souvent gros gain) r.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; r.receiveShadows = false; } else { if (_original.TryGetValue(r, out var orig)) r.sharedMaterials = orig; } } } // Option pratique: toggle avec une touche void Update() { if (Input.GetKeyDown(KeyCode.F9)) SetWhiteMode(true); if (Input.GetKeyDown(KeyCode.F10)) SetWhiteMode(false); } }