Files

77 lines
2.0 KiB
C#
Raw Permalink Normal View History

2026-06-04 15:45:39 +03:00
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<Renderer>();
}
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;
}
}