Unity: MeleeEnemy Function

이재형·2024년 7월 11일
0
post-thumbnail
post-custom-banner

Unity 실습

근거리 적에 대해서 생각

문제 생각: 발사를 하면 되는 원거리와는 다르게 근거리 공격을 어떻게 진행을 해야하나 생각을 하였음

문제 진행:

1. 팀원들과 소통 후에 적이 공격할 때 범위 오브젝트를 생성

2. 범위 오브젝트가 생성된 이후

3. 범위 오브젝트에 플레이어가 있는지 확인 후 데미지를 입게 하였음

문제 해결: 구현에 문제 없이 진행되었음

1. 근거리 적에 대한 구현

public class MeleeEnemy : Enemy
{
    [SerializeField]
    private GameObject attackRange;

    protected override void Awake()
    {
        base.Awake();
    }

    private void AttackRangeActive()
    {
        attackRange.SetActive(false);
    }

    private void AttackStart()
    {
        attackRange.SetActive(true);
        attackRange.transform.position = transform.position;
        attackRange.transform.Translate(enemyMovement.direction.normalized / 2);
        attackRange.GetComponent<MeleeAttack>().power = status.attack;
    }
}


1. 공격 범위 오브젝트 attackRange를 활성화
2. attackRange의 위치를 Enemy의 위치로 이동
3. Translate를 이용하여 enemyMovement.direction = 타겟(플레이어)을 향한 방향으로 이동하게 함 이때 공격 범위가 너무 앞에 있으면 안되므로 방향을 Normalize를 사용하여 1로 만든 다음 /2 로 하여 오브젝트를 이동하게 진행 하였음
4. 그리고 애니메이션 이벤트로 AttackRangeActive를 통해서 아래의 사진을 통해서 바로 공격 오브젝트에 비활성화를 하게 함

애니메이션에 Event를 추가한 사진


2. 공격 판정에 대한 오브젝트 처리

공격 판정(임시) 이미지

public class MeleeAttack : MonoBehaviour
{
    public int power;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        // && TryGetComponent<IDamagable>(out IDamagable damagable)
        if (collision.CompareTag("Player") )
        {
            // damagable.ApplyDamage(power);
            Debug.Log("플레이어 근접 공격 맞음");
        }
    }
}

1번에서의 설명에서 오브젝트 비활성화 처리를 하였기 때문에 추가를 하지 않았으며 플레이어가 Enter2D로 충돌했을 때 데미지를 입게 구현하였음


정리

배운 내용

1. 없음

해결 못한 문제

1. 없음

문제점

1. 없음

profile
한국사람
post-custom-banner

0개의 댓글