using UnityEngine;

public class EnemyController : MonoBehaviour
{
    private Animator animator;

    [SerializeField] private int monsterHP;

    private float hitTimer = 0f;  // 피격 타이머
    private float hitDelay = 0.1f;  // 피격 딜레이

    private void Start()
    {
        animator = GetComponent<Animator>();
    }

    private void Update()  //state 0 = Idle, 1 = GetHit
    {
        // 피격 후 hitDelay 동안은 idle 상태로 전환하지 않음
        if (hitTimer > 0)
        {
            hitTimer -= Time.deltaTime;  // 타이머 감소
        }
        else
        {
            // 평상시에는 idle 애니메이션 재생
            animator.SetInteger("state", 0);
        }
    }

  
    private void OnCollisionEnter2D(Collision2D collision)
    {
        // 총알의 태그가 "Bullet"인 경우만 처리
        if (collision.gameObject.CompareTag("Bullet"))
        {
            this.monsterHP -= 1;

            // 피격 애니메이션 재생
            animator.SetInteger("state", 1);

            hitTimer = hitDelay;  // 피격 애니메이션 타이머 설정

            if (this.monsterHP == 0)
            {
                Destroy(this.gameObject);
            }

            // 총알 파괴
            Destroy(collision.gameObject);
        }
    }
}
using UnityEngine;
using System.Collections;

public class EnemyController : MonoBehaviour
{
    private Animator animator;

    [SerializeField] private int monsterHP;

    private float hitDelay = 0.1f;

    private void Start()
    {
        animator = GetComponent<Animator>();
    }

    private IEnumerator HitAnimationCoroutine()  //state 0 = Idle, 1 = GetHit
    {
        // 피격 애니메이션 재생
        animator.SetInteger("state", 1);

        // hitDelay만큼 대기
        yield return new WaitForSeconds(hitDelay);

        // 평상시에는 idle 애니메이션 재생
        animator.SetInteger("state", 0);
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        // 총알의 태그가 "Bullet"인 경우만 처리
        if (collision.gameObject.CompareTag("Bullet"))
        {
            monsterHP -= 1;

            // 피격 애니메이션 코루틴 시작
            StartCoroutine(HitAnimationCoroutine());

            if (monsterHP == 0)
            {
                Destroy(this.gameObject);
            }

            // 총알 파괴
            Destroy(collision.gameObject);
        }
    }
}

1. 피격시 애니메이션 설정

 

2. update -> coroutine 코드 전환

+ Recent posts