first commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user