Home [Unity] 공격 판정 및 데미지 시스템 개발
Post
Cancel

[Unity] 공격 판정 및 데미지 시스템 개발

1. 무기에 Collider 설정

  • 무기에 BoxCollider 설정
  • 실제 무기보다 조금 크게 설정하여 데미지 영역을 보정 unity_image_03
  • Is Trigger도 활성화 해준다 unity_image_04

2. event를 사용하여 구현

Player Script

  • delegate 선언
1
public delegate void AttackEventHandler(float damage);
  • event를 통해 외부에서 호출하지 못하게 설정
1
2
3
4
/// <summary>
/// Attack Call Back
/// </summary>
public event AttackEventHandler attackEventHandler;
  • event를 호출하고 null로 세팅해 기존 내용을 삭제한다
1
2
3
4
5
6
7
8
9
10
11
12
/// <summary>
/// 이벤트 메소드들을 호출한다
/// </summary>
void CallEventHandlerMethods()
{
    // 공격 콜백
    if (attackEventHandler != null)
    {
        attackEventHandler(damage);
        attackEventHandler = null;
    }
}

Weapon에 부착된 Script

  • TriggerEnter를 이용
  • 공격에 맞은 객체에 적용 되어야 할 메소드를 Player Event Handler에 추가한다
1
2
3
4
5
6
7
8
private void OnTriggerEnter(Collider other)
{
    if (other.CompareTag(Helper.TagDictionary.GetTagName(Helper.TagDictionary.ETag.Enemy)))
    {
        Enemy enemy = other.GetComponent<Enemy>();
        player.attackEventHandler += enemy.Hit;
    }
}
  • enemy.Hit에 해당하는 메소드
1
2
3
4
5
6
7
8
9
10
11
public void Hit(float damage)
{
    hp -= damage;

    if (hp <= 0)
    {
        Helper.Debug.Log("적 죽음");
    }
    else
        Helper.Debug.Log($"남은 HP: {hp}");
}

3. 결과

  • 3번 째 공격에 적 캐릭터를 뚫고 지나가 적용이 안되었다 😥
This post is licensed under CC BY 4.0 by the author.