Projext/Assets/Scripts/Items/VFX/ItemHighlight.cs
2026-02-02 17:30:23 +09:00

63 lines
1.9 KiB
C#

using UnityEngine;
public class ItemHighlight : MonoBehaviour
{
[Header("--- 참조 ---")]
[SerializeField] private MeshRenderer weaponRenderer;
[Header("--- 하이라이트 설정 ---")]
[ColorUsage(true, true)]
[SerializeField] private Color highlightColor = Color.yellow;
[SerializeField] private float blinkSpeed = 2f;
[SerializeField] private float minIntensity = 0.5f;
[SerializeField] private float maxIntensity = 3.0f;
private Material _material;
private static readonly int EmissionProperty = Shader.PropertyToID("_EmissionColor");
private void Awake()
{
if (weaponRenderer == null) weaponRenderer = GetComponentInChildren<MeshRenderer>();
if (weaponRenderer != null)
{
_material = weaponRenderer.material;
_material.EnableKeyword("_EMISSION");
}
}
// ⭐ [추가] 부모 오브젝트(손)가 바뀌었을 때 실행됩니다.
private void OnTransformParentChanged()
{
// 부모가 없다면 = 바닥에 떨어졌다면
if (transform.parent == null)
{
this.enabled = true; // 스크립트를 다시 깨웁니다.
}
}
private void Update()
{
if (_material == null) return;
// 누군가 주운 상태(부모가 있음)라면 빛을 끄고 퇴근합니다.
if (transform.parent != null)
{
StopHighlight();
return;
}
float lerpValue = Mathf.PingPong(Time.time * blinkSpeed, 1f);
float intensity = Mathf.Lerp(minIntensity, maxIntensity, lerpValue);
_material.SetColor(EmissionProperty, highlightColor * intensity);
}
public void StopHighlight()
{
if (_material != null)
{
_material.SetColor(EmissionProperty, Color.black);
this.enabled = false; // Update를 멈춥니다.
}
}
}