Galaxy Ball/2. 싱글플레이 - 스토리모드

(41) 오류 수정 + 게임 전체 플레이

잉ㅇ잉ㅇ 2024. 11. 14. 00:42

이제 정말 끝이 보인다. 직전 글에서 마무리로 오류수정을 하고 게임을 전체적으로 플레이하겠다고 했는데

오늘은 이것을 마지막으로 마무리 해보려고 한다.

까먹을까봐 미리 적어둔 오류들

 

우선 첫번째 오류부터 해결해보자. 1~6번 스테이지는 아직 아이템 생성이 되선 안된다

하지만 지금은 1번 스테이지에서도 첫번째 아이템이 랜덤 생성되는것을 확인할 수 있다

 

 private void SetMaxIndex()
    {
        float stageID = stageGameManager.StageClearID;

        if (stageID <= 6)
        {
            CancelInvoke("SpawnSphere"); // StageClearID가 6 이하일 때는 스폰을 중지
        }
        else if (stageID <= 10)
        {
            maxIndex = 0;
        }
        else if (stageID <= 17)
        {
            maxIndex = 1;
        }



랜덤 생성을 담당하는 코드를 보자. stageID가 6보다 작거나 같다면 CancelInvoke로 스폰을 중지하도록 하였다

 

        if (stageID <= 6)
        {
            CancelInvoke("SpawnSphere"); // StageClearID가 6 이하일 때는 스폰을 중지
        }


           if (stageID <= 6)
        {

            maxIndex = -1;
        }

 

굳이 CancelInvoke를 건드려주기 보다는 정말 단순하게 배열에서 어떠한 값도 꺼내오지 못하도록

maxIndex값을 -1로 잡아주었다. 이러니까 원하는대로 아이템 생성이 안되는것을 확인할 수 있었다

 

 

그 다음은 두번째 오류. Twice 아이템으로 적을 제거할때 제거판정이 두번 되어

아직 모든 적들을 제거하지 않았는데 게임 승리 판정이 날때가 있다. 수정해주자

 

  private void OnCollisionEnter2D(Collision2D coll)
    {
        if (coll.gameObject.tag == "EnemyBall") return;
        if (coll.gameObject.tag == "Gojung") return;
        if (coll.gameObject.name != SPEndlessFName)
        {
            TakeDamage(1);
        }
        if (coll.gameObject.name == SPTwiceFName)
        {
            TakeDamage(1);
        }
    }


이유는 얼추 알것같다. 적 유닛이 데미지를 입는 TakeDamage의 구조 때문. 내구도가 0과 같거나 작아지는 순간

spgamemanager.RemoveBall()을 실행하니 데미지가 동시에 두번 들어가면 RemoveBall도 두번이 실행되는것

 

 private void OnCollisionEnter2D(Collision2D coll)
    {
        if (coll.gameObject.tag == "EnemyBall") return;
        if (coll.gameObject.tag == "Gojung") return;
        if (coll.gameObject.name != SPEndlessFName && coll.gameObject.name == SPTwiceFName)
        {
            TakeDamage(1);
        }
        if (coll.gameObject.name == SPTwiceFName)
        {
            TakeDamage(2);
        }
    }

 

그래서 보기엔 조금 번거롭지만 코드를 변경해주었다.

이제 데미지 1을 두번주는게 아니라 처음부터 데미지 2를 주면서 오류가 수정되었다

 

 

 

마지막 오류인 최종보스 유닛추가 부분.

최종보스가 가장 어려운 이유중 하나인 스킬인 적 유닛 추가는 일정 시간마다 랜덤한 적 유닛 4개를 상하좌우로 소환한다

하지만 이 게임의 시스템은 게임이 처음 시작할때 적 유닛의 수를 파악하여 totalenemy에 추가한뒤

적 유닛을 하나씩 제거할때마다 totalenemy의 수를 1씩 빼준다. 

 

하지만 마지막 스테이지는 최종보스 하나로 시작하니 totalenemy는 당연히 1. 그 상태에서 중간에 소환한

다른 적 유닛을 제거해주면 게임이 승리판정으로 끝나버리고 만다. 이걸 수정해줘야 한다