using UnityEngine; public class Outliner : MonoBehaviour { public Material outlineMaterial; // Assign in Inspector public float outlineWidth = 0.1f; // Customize per object private Renderer objRenderer; private Material[] originalMaterials; private MaterialPropertyBlock propertyBlock; void Start() { objRenderer = GetRenderer(); if (objRenderer != null) { originalMaterials = objRenderer.sharedMaterials; propertyBlock = new MaterialPropertyBlock(); } } public void EnableOutline() { if (objRenderer != null && outlineMaterial != null) { Material[] newMaterials = new Material[originalMaterials.Length + 1]; newMaterials[0] = outlineMaterial; // Outline material at index 0 for (int i = 0; i < originalMaterials.Length; i++) newMaterials[i + 1] = originalMaterials[i]; objRenderer.materials = newMaterials; // Set custom outline width objRenderer.GetPropertyBlock(propertyBlock); propertyBlock.SetFloat("_OutlineWidth", outlineWidth); objRenderer.SetPropertyBlock(propertyBlock); } } public void DisableOutline() { if (objRenderer != null) { objRenderer.materials = originalMaterials; // Restore original materials } } public Renderer GetRenderer() { if (TryGetComponent(out MeshRenderer meshRenderer)) return meshRenderer; if (TryGetComponent(out SkinnedMeshRenderer skinnedRenderer)) return skinnedRenderer; return null; } }