using System.Collections; using UnityEngine; public class EnemyAttack : MonoBehaviour { [Header("Attack Settings")] public float damage = 10f; public float attackRange = 2.0f; public float attackCooldown = 1.0f; private Material _enemyMaterial; private float _nextAttackTime; private Transform _target; private IDamageable _targetDamageable; // 쉐이더 프로퍼티 ID (문자열보다 성능이 좋음) private static readonly int EmissionColorProp = Shader.PropertyToID("_EmissionColor"); void Update() { // 이동 스크립트로부터 현재 목표를 실시간으로 가져옵니다. if (_target == null) { // EnemyMoveDefault에서 _target을 public이나 프로퍼티로 만들어 가져오세요 _target = GetComponent().Target; if (_target != null) _targetDamageable = _target.GetComponent(); return; } float distance = Vector3.Distance(transform.position, _target.position); // 사거리 안에 있고 타겟이 살아있을 때만 공격 if (distance <= attackRange) { if (Time.time >= _nextAttackTime) { Attack(); } } } private void Attack() { if (_target == null) return; if (_targetDamageable == null) { _targetDamageable = _target.GetComponentInParent(); } if (_targetDamageable != null) { _targetDamageable.TakeDamage(damage); _nextAttackTime = Time.time + attackCooldown; } else { // 대상이 IDamageable이 아니거나 이미 파괴됨 _target = null; } } public void SetAttackTarget(Transform newTarget) { _target = newTarget; if (_target != null) _targetDamageable = _target.GetComponent(); } }