Untitled

목표 : 까만 캡슐을 플레이어, 파란 원을 적이라고 가정했을 경우 플레이어가 근접공격을 했을 때 적의 체력이 감소하도록 구현하기

Untitled

코드 구조는 위와 같이 구성하였다. 플레이어와 적 개체간 직접적인 상호작용으로 구현할 수 있으나 이후 적 개체 추가 및 방어력과 같은 수치를 적용하는 등 사후 작업을 위해 게임매니저를 거칠 수 있도록 했다.

Player

1.근접공격 구현

void Attack(){
        if(Input.GetKeyDown("z") && atkCurTime > atkMaxTime){

            AttackingAnime();   //공격 애니메이션
            Collider2D[] collider2Ds = Physics2D.OverlapBoxAll(atkPos.position, atkBoxSize, 0); //OverlapBoxAll(position, size, angle) 배열을 생성하고 감지된 오브젝트를 모두 담는다
            foreach(Collider2D collider in collider2Ds){                                        
                if(collider.tag == "Enemy"){
                    gameManager.AtkToEnemy(weaponDmg, collider);    //감지된 적과 공격력을 매개변수로 gameManager의 AtkToEnemy함수를 호출
                }
            }
            atkCurTime = 0;
        }
    }

1.Attack 함수를 따로 만들고 update에서 호출하도록 함

2.공격키는 z키에 할당

3.공격과 공격사이 atkMaxTime변수만큼 시간차이를 두도록 함

4.AttackingAnime함수를 호출(아래 코드)

5.OverlapBoxAll을 사용하여 감지된 콜라이더를 배열에 저장.

5-1.OverlapBoxAll(position, size, angle) 형식으로 사용 박스형태로 그려진다. 이 형태는 아래의 코드를 통해 가시화할 수 있다.

6.foreach를 사용해 배열에 있는 모든 콜라이더를 연산

7.감지된 콜라이더의 태그가 Enemy일 경우 GameManager의 AtkToEnemy함수를 호출한다. 이때 매개변수는 무기 공격력(플레이어에 저장된 변수)과 감지된 콜라이더의 정보

8.다음 공격을 위해 atkCurTime을 0으로 초기화