using UnityEngine; using UnityEngine.UI; using System.Collections; public class AnimateShine : MonoBehaviour { public Material shineMaterial; // Assign the original material (a reference from Inspector) public Image targetImage; // Assign the UI Image component public float shineSpeed = 1f; // Speed of shine animation public float shinePauseDuration = 0.5f; // Half-second pause after a shine cycle private Material instanceMaterial; // Unique instance of the material private float shineLocation = 0f; private bool isPaused = false; private void Awake() { targetImage = GetComponent(); } void Start() { if (shineMaterial != null && targetImage != null) { // Create a new instance of the material so each image has its own copy instanceMaterial = new Material(shineMaterial); // Assign the instance material to the UI Image targetImage.material = instanceMaterial; } else { Debug.LogError("ShineEffect: Material or Target Image is missing!"); } } void Update() { if (instanceMaterial != null && !isPaused) { // Animate the "Shine Location" property shineLocation += Time.deltaTime * shineSpeed; if (shineLocation > 1f) { shineLocation = 1f; // Cap at 1 before pausing StartCoroutine(PauseShine()); // Start the pause coroutine } // Update material property instanceMaterial.SetFloat("_ShineLocation", shineLocation); } } IEnumerator PauseShine() { isPaused = true; // Stop animation yield return new WaitForSeconds(shinePauseDuration); // Wait for half a second shineLocation = 0f; // Reset shine location isPaused = false; // Resume animation } void OnDestroy() { // Cleanup to prevent memory leaks if (instanceMaterial != null) { Destroy(instanceMaterial); } } }