2026-05-15 공격과 피격
This commit is contained in:
58
Assets/02_Scripts/Enemy/Enemy.cs
Normal file
58
Assets/02_Scripts/Enemy/Enemy.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using UnityEngine;
|
||||
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
public class Enemy : MonoBehaviour, IDamageable
|
||||
{
|
||||
[Header("Stats")]
|
||||
[SerializeField] private int _maxHealth = 30;
|
||||
|
||||
[Header("Hit Feedback")]
|
||||
[SerializeField] private float _hitFlashDuration = 0.1f;
|
||||
[SerializeField] private Color _hitFlashColor = Color.red;
|
||||
|
||||
private int _currentHealth;
|
||||
private SpriteRenderer _spriteRenderer;
|
||||
private Color _originalColor;
|
||||
private float _flashTimer;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_currentHealth = _maxHealth;
|
||||
_spriteRenderer = GetComponentInChildren<SpriteRenderer>();
|
||||
if (_spriteRenderer != null)
|
||||
_originalColor = _spriteRenderer.color;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (_flashTimer > 0f)
|
||||
{
|
||||
_flashTimer -= Time.deltaTime;
|
||||
if (_flashTimer <= 0f && _spriteRenderer != null)
|
||||
_spriteRenderer.color = _originalColor;
|
||||
}
|
||||
}
|
||||
|
||||
public void TakeDamage(int amount)
|
||||
{
|
||||
if (_currentHealth <= 0) return;
|
||||
|
||||
_currentHealth -= amount;
|
||||
Debug.Log($"{name} 피격: -{amount} (HP: {_currentHealth}/{_maxHealth})");
|
||||
|
||||
if (_spriteRenderer != null)
|
||||
{
|
||||
_spriteRenderer.color = _hitFlashColor;
|
||||
_flashTimer = _hitFlashDuration;
|
||||
}
|
||||
|
||||
if (_currentHealth <= 0)
|
||||
Die();
|
||||
}
|
||||
|
||||
private void Die()
|
||||
{
|
||||
Debug.Log($"{name} 사망");
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
2
Assets/02_Scripts/Enemy/Enemy.cs.meta
Normal file
2
Assets/02_Scripts/Enemy/Enemy.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 945e2c8fc675cb64c97b4eff6d2e8d56
|
||||
Reference in New Issue
Block a user