본문 바로가기
게임 프로그래밍/게임개발 중급

게임개발 중급(73) - Monster Killer(35)

by jyppro 2023. 7. 10.

Monster Killer(35)

이전시간에는 PlayerPrefs를 사용하여 데이터를 다루는 법에 대해 이야기하였습니다. 오늘은 어제 만든 스테이지 데이터를 이용해서 몬스터들을 연결시켜 주려했지만 약간의 문제가 발생하여 먼저 게임씬과 메인씬의 이동할 때 데이터를 초기화하고 가져오는 것을 해보겠습니다.

 

문제 발생

제가 하려했던 것은 이전에 수치화시킨 스테이지 데이터를 사용하여 스테이지에 따라 몬스터가 소환되도록 만들어 주려고 했습니다. 하지만, 현재 몬스터를 소환하는 매커니즘이 현재 몬스터가 죽으면 다음 몬스터가 소환되면서 스테이지가 올라가는 방식이고, 게임을 다시 시작하면 스테이지 숫자는 그대로 남아있지만, 해당 정보가 처음 소환되는 몬스터에 저장되어있기 때문에 코드 매커니즘을 변경할 필요가 있어 보입니다. 따라서 그 부분은 다음에 진행하도록 하겠습니다.

 

메인씬에서의 이동

메인씬에서 게임씬으로 넘어가는 작업은 이미 이전에 하였습니다. 하지만, 지금은 데이터를 사용하는 기능도 추가되어야 합니다. 게임을 이어하는 게임시작 버튼에서는 이전에 저장된 데이터를 그대로 불러올 수 있어야 하고, 게임을 초기화 시키고 다시 처음부터 플레이하는 재시작버튼은 데이터값을 전부 날리고 처음으로 돌려야 합니다.

 

게임시작 버튼

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameStartButton : MonoBehaviour
{
    public Image FadeOutPage;
    float time = 0f;
    float F_time = 1f;

    private void Start(){ GetComponent<UnityEngine.UI.Button>().onClick.AddListener(GameStart); }
    private void GameStart() { StartCoroutine(FadeOut()); }

    IEnumerator FadeOut()
    {
        FadeOutPage.gameObject.SetActive(true);
        Color alpha = FadeOutPage.color;
        
        while(alpha.a < 1f)
        {
            time += Time.deltaTime / F_time;
            alpha.a = Mathf.Lerp(0, 1, time);
            FadeOutPage.color = alpha;
            yield return null;
        }
        SceneManager.LoadScene("GameScene");
    }
}

이전에 작성했던 게임시작 버튼입니다. 한가지 다행인 점은 게임에 필요한 정보를 다루는 것은 GameManager에서 하고있으므로 게임시작 시 데이터를 따로 초기화 시켜주지 않아도 됩니다.

 

게임 재시작 버튼

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class RestartButton : MonoBehaviour
{
    public Image FadeOutPage;
    float time = 0f;
    float F_time = 1f;

    private void Start(){ GetComponent<UnityEngine.UI.Button>().onClick.AddListener(GameStart); }
    private void GameStart() { StartCoroutine(FadeOut()); }

    IEnumerator FadeOut()
    {
        FadeOutPage.gameObject.SetActive(true);
        Color alpha = FadeOutPage.color;
        
        while(alpha.a < 1f)
        {
            time += Time.deltaTime / F_time;
            alpha.a = Mathf.Lerp(0, 1, time);
            FadeOutPage.color = alpha;
            yield return null;
        }
        PlayerPrefs.DeleteAll();
        SceneManager.LoadScene("GameScene");
    }
}

이것은 게임 데이터를 초기화하고 처음부터 시작하는 재시작 버튼입니다. 게임시작 버튼과 크게 다른게 없지만 한가지 다른것이 있습니다. PlayerPrefs.DeleteAll()을 사용해서 씬이 전환되기 전에 저장된 데이터를 초기화 해줍니다.

 

<NEXT>

오늘은 게임의 데이터를 초기화하는 방법에 대해 알아보았습니다. 다음에는 오늘 사용된 코드 중 FadeOut 메서드가 있는데 화면전환에 유용하게 사용되는 페이드 아웃과 페이드 인 기능에 대해 알아보도록 하겠습니다.