Skip to content

develop Damageable interface

Jeon-YJ1004 edited this page Feb 27, 2023 · 2 revisions

IDamageale.cs

구현 로직

  1. IDamageale.cs 인터페이스 생성
public interface IDamageable
{
    public void TakeDamage(float damage);
}
  1. Character.cs와 Enemy.cs에서 인터페이스 상속 후 오버라이드 함수 작성 => 이후 무기 클래스에서 적에게 ApplyDamage할 때 아래와 같이 사용 가능. 적과 맵 오브젝트 둘다 적용하는 코드

image

2.1 이전 코드의 OnTriggerEnter2D에서 무기 태그를 확인하고 무기의 공격력을 가져오는 작업이 필요 없음!

    void OnCollisionStay2D(Collider2D col)
    {
        if (col.gameObject == target) Attack();
    }
    void Attack() {
        if (targetCharacter == null)
        {
            targetCharacter = target.GetComponent<Character>();
        }
        targetCharacter.TakeDamage(enemyData.power);
    }  
    public void TakeDamage(float damage)
    {
        health -= damage;

        if (health > 0)
        {
            StartCoroutine(KnockBack());
            anim.SetTrigger("Hit");
            Debug.Log("Hit");
        }
        else
        {
            isLive = false;
            coll.enabled = false;
            rb.simulated = false;
            spriter.sortingOrder = 1;
            anim.SetBool("Dead", true);
            GameManager.instance.kill++;
            GameManager.instance.exp += enemyData.Xp;

            Dead();
        }
    }
  1. DestructableObject.cs에서 인터페이스 상속 후 오버라이드 함수 작성
Clone this wiki locally