using UnityEngine; public class HighlightOnApproach : MonoBehaviour { public Transform player; public Renderer targetRenderer; public Renderer[] targetRenderers; public Material highlightMaterial; public float radius = 2.6f; private Material originalMaterial; private Material[] originalMaterials; private bool highlighted; private void Start() { if (targetRenderers == null || targetRenderers.Length == 0) { targetRenderers = targetRenderer != null ? new[] { targetRenderer } : GetComponentsInChildren(); } originalMaterials = new Material[targetRenderers.Length]; for (int i = 0; i < targetRenderers.Length; i++) { originalMaterials[i] = targetRenderers[i].sharedMaterial; } if (targetRenderers.Length > 0) { originalMaterial = originalMaterials[0]; } } private void Update() { if (player == null) { GameObject playerObject = GameObject.FindGameObjectWithTag("Player"); player = playerObject != null ? playerObject.transform : null; } if (player == null || highlightMaterial == null) { return; } bool shouldHighlight = Vector3.Distance(transform.position, player.position) <= radius; if (shouldHighlight != highlighted) { // The scene builder assigns all statue renderers, so the whole object changes material together. SetHighlighted(shouldHighlight); } } private void SetHighlighted(bool value) { highlighted = value; for (int i = 0; i < targetRenderers.Length; i++) { if (targetRenderers[i] == null) { continue; } targetRenderers[i].sharedMaterial = value ? highlightMaterial : originalMaterials[i]; } } public Material GetOriginalMaterial() { return originalMaterial; } }