1. 무기에 Collider 설정
2. event를 사용하여 구현
- event를 사용하여 구현
- event 와 delegate의 차이
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번 째 공격에 적 캐릭터를 뚫고 지나가 적용이 안되었다 😥