패링 게임 - 11 (메뉴)

Labin·2025년 6월 16일

패링 게임

목록 보기
14/14

메뉴

메뉴를 만들었다. 전체적으로 화면을 어둡게 하기 위해 백그라운드에 투명도 높인 검은 색을 깔아주고, 메뉴 버튼을 만듬.
이후 간단한 코딩으로 게임 종료, 저장, 로드 등을 구현

	private void Update()
    {
        // 메뉴 on/off
        if (Input.GetButtonDown("Cancel"))
        {
            if (menuSet.activeSelf)
                menuSet.SetActive(false);
            else
                menuSet.SetActive(true);
        }
    }
    
    public void GameSave()
    {
        ES3.Save("stageIndex", stageIndex);
        Debug.Log($"게임 저장 완료 - stage: {stageIndex}");
    }

    public void GameLoad()
    {
        stageIndex = ES3.Load<int>("stageIndex", 0);
        Debug.Log($"게임 로드 완료 - stage: {stageIndex}");
    }

    public void GameExit()
    {
        GameSave();
        Application.Quit();
    }
}

게임을 시작할 때, 저장되어 있는 파일로 stage 값을 불러오는 것을 확인했다.

이후 메뉴가 실행될 때 모든 게임이 정지되게 설정했다.

   private void TogglePause()
    {
        isPaused = !isPaused;

        if (isPaused)
        {
            //게임 일시 정지
            Time.timeScale = 0f;
            menuSet.SetActive(true);
            hero.SetControlEnabled(false);

            //DOTween 일시정지
            DOTween.PauseAll();

            Debug.Log("게임 일시정지");
        }
        else
        {
            Time.timeScale = 1f;
            menuSet.SetActive(false);
            hero.SetControlEnabled(true);

            DOTween.PlayAll();

            Debug.Log("게임 재개");
        }
    }

new game에 대한 것은 고민해보는게 좋을 듯

소울 UI

    private void UpdateSoulUI()
   {
       if (soulText != null)
       {
           soulText.text = $"{totalSoulPoint:F0}";
       

       Color originalColor = soulText.color;
       soulText.color = Color.yellow;
       soulText.DOColor(originalColor, 0.5f);
       
       // 크기 변화 효과
       soulText.transform.DOPunchScale(Vector3.one * 0.1f, 0.3f);
       
       }
   }

소울 UI 값을 변경하는 것을 구현, 이후 몬스터를 죽일 때마다 몬스터 각각에 저장된 소울 값이 올라가 있는 것을 이미 구현해놨다.

이것을 save와 연동해서 소울 값은 변하지 않게 설정.

새로 시작할 때마다 이미 벌어 둔 소울은 유지.

해결한 문제

정지해도 왜 공격 모션이 진행되는걸까에 대한 문제였다.

    public void SetControlEnabled(bool enabled)
    {
        m_controlEnabled = enabled;
    }
    
    void Update () {
        // -- Handle input and movement --
        float inputX = Input.GetAxis("Horizontal");

        bool canMove = m_controlEnabled && CanMove();

        // Swap direction
        if (canMove)
        {
            if (inputX > 0)
                transform.localScale = new Vector3(-1.0f, 1.0f, 1.0f);
            else if (inputX < 0)
                transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
        }
        // -- Handle Animations --


        //Guard
        if (canMove)
        {
            isGuarding = Input.GetMouseButton(1);
            m_animator.SetBool("Guard", isGuarding);
        }
        else
        {
            isGuarding = false;
            m_animator.SetBool("Guard", false);
        }

        if (!isGuarding)
        {
            //Attack
            if(Input.GetMouseButtonDown(0)) {
                //공격 속도 적용
                StartCoroutine(PlayAttackAnimation());
            }
            .
            .
            .
     }

이런 식으로 진행되는 코드였는데
너무나 단순한 것을 체크하지 못해서 오류가 났었다.
canmove를 당연히 전체에 적용했을 거라 생각한 것.
이상하게 게임 정지를 해도 칼은 위로 들더라니... 간단하게 attack이 있는 곳의 if문에도 canmove를 추가해주는 것으로 해결.
ESC를 누를 경우, 모든 게임이 정지, continue나 ESC를 다시 누르면 정상 작동, 빌드를 해봐서 exit를 누르면 게임 종료까지 다 체크했다.

profile
공부를 기록하는 공간

0개의 댓글