ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 최적화 - 2
    Galaxy Ball/5. 최적화 2024. 9. 10. 22:34
     

    최적화 - 1

    게임을 시스템적으로 완성한지는 꽤 많은 시간이 흘렀다.그럼에도 불구하고 게임을 최종적으로 출시하지 못한 이유는 바로 최적화! 테스트 용으로 핸드폰에 빌드하여 게임을 실행해본 결과프

    sangeun00.tistory.com

    지난 글에 이어 계속해서 Update 메서드에서 코드들을 빼보겠다

     

    지난번에는 구체를 카운트하는 기능을 뺐다면 이번에 빼볼 코드는 

     int totalenemy = GameObject.FindGameObjectsWithTag("Enemy").Length;
            if (totalenemy <= 0)
            {
                gameManager = FindObjectOfType<StageGameManager>();
                if (gameManager.StageClearID == StageState.chooseStage && gameManager.StageClearID != 5)
                {
                    gameManager.StageClearID += 1;
                    gameManager.SaveStageClearID();
                }
                if (gameManager.StageClearID == 5)
                {
                    gameManager.StageClearID += 0.5f;
                    gameManager.SaveStageClearID();
                }
                SceneManager.LoadScene("Clear");
            }

    적 유닛의 개수를 카운트하는 기능이다. 이것 역시 통째로 update안에 들어있는 코드들이다

     

    private int totalEnemies;
    
    private void Start()
    {
        totalEnemies = GameObject.FindGameObjectsWithTag("Enemy").Length;
    }
    
    public void RemoveEnemy()
    {
        totalEnemies--;
        if (totalEnemies <= 0)
        {
            StageClear();
        }
    }
    
    private void StageClear()
    {
        gameManager = FindObjectOfType<StageGameManager>();
        if (gameManager.StageClearID == StageState.chooseStage && gameManager.StageClearID != 5)
        {
            gameManager.StageClearID += 1;
            gameManager.SaveStageClearID();
        }
        if (gameManager.StageClearID == 5)
        {
            gameManager.StageClearID += 0.5f;
            gameManager.SaveStageClearID();
        }
        SceneManager.LoadScene("Clear");
    }

     

    전글에서 했던것과 비슷한 방법으로 해결이 가능하다.

    차이점이 있다면 구체는 언제든지 새로 생기고 파괴될 수 있겠지만 적 유닛의 수는

    처음 시작할때부터 정해진뒤 파괴될 일 밖에 없다는것. 어떻게보면 더 수월한것이다

     

    태그를 사용해야하는 

     

    private void Start()
    {
        totalEnemies = GameObject.FindGameObjectsWithTag("Enemy").Length;
    }

     

    파트는 Start에서 딱 한번만 진행하고 그 뒤에는 

     

    public void RemoveEnemy()
    {
        totalEnemies--;
        if (totalEnemies <= 0)
        {
            StageClear();
        }
    }

     

    적 유닛이 파괴될때마다 RemoveEnemy 메서드를 실행하면 된다.

    그리고 RemoveEnemy 메서드가 실행될때마다 자동으로 한번씩 실행되는 StageClear() 메서드

     

    private void StageClear()
    {
        gameManager = FindObjectOfType<StageGameManager>();
        if (gameManager.StageClearID == StageState.chooseStage && gameManager.StageClearID != 5)
        {
            gameManager.StageClearID += 1;
            gameManager.SaveStageClearID();
        }
        if (gameManager.StageClearID == 5)
        {
            gameManager.StageClearID += 0.5f;
            gameManager.SaveStageClearID();
        }
        SceneManager.LoadScene("Clear");
    }

     

    여기서 Clear 조건에 만족하는지 확인하면 된다. 

     

    그렇게 기존 update 메서드안에 있는 코드들을 지우고 새롭게 추가해주었다

    물론 위에서 totalEnemies에 대해서도 정의해주었다

     

    자 그럼 이제 마지막으로 남은건 적 유닛이 파괴되기 직전 RemoveEnemy() 메서드가 실행되도록 해주면 된다

     

    그리고 그건 당연히 적 유닛을 컨트롤하는 EnemyCenter 스크립트에 있다

    그냥 파괴되기 직전 spGameManager.RemoveEnemy(); 한줄만 넣어주면 되는것이다

     

     

     

    적을 모두 제거했을때 정상적으로 Clear 씬으로 변환되는것을 확인할 수 있다

    'Galaxy Ball > 5. 최적화' 카테고리의 다른 글

    최적화 - 6  (1) 2024.09.24
    최적화 - 5 (BallController 스크립트 제작#2)  (0) 2024.09.20
    최적화 - 4 (BallController 스크립트 제작#1)  (1) 2024.09.20
    최적화 - 3  (1) 2024.09.19
    최적화 - 1  (0) 2024.09.10
Designed by Tistory.