카테고리 없음

2025.04.29 4주차-5(금요일)

mochoa 2025. 5. 2. 21:23

오늘의 학습 키워드

1. 개인과제

 

우리팀에서는 쿠키런을 오마주 해서 만들기로했고,

내가 맡은 역할은 GameManager이다.

그에 있어서 구현해야되는 부분은

 

  • 일정 시간마다 장애물의 생성 빈도 증가, 속도 증가
  • 난이도 상승에 따라 플레이어 반응 시간 줄어듦 (예: 점프 타이밍이 더 짧아짐)
  • GameManager가 시간 기준으로 난이도 조절을 수행

이다.

 

그래서

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    private bool isGameOver = false;
    private float timeSinceLastDifficultyIncrease = 0f;

    [Header("난이도 설정")]
    public float difficultyIncreaseInterval = 10f; // 난이도 상승 주기
    public float obstacleSpawnRate = 2f; // 초기 스폰간격 (초)
    public float obstacleSpeed = 5f; // 초기 장애물 속도
    public float playerGodMode = 1f; // 초기 무적 시간 (초)

    [Header("난이도 변화량")]
    public float spawnRateDecrease = 0.1f;
    public float speedIncrease = 0.5f;
    public float playerGodModeDecrease = 0.05f;

    private int score = 0;
    private UIManager uiManager;
    //UI 매니저 생성후 연결해주세요

    private void Awake()
    {
        if (Instance == null) Instance = this;
        else Destroy(gameObject);

        uiManager = FindObjectOfType<UIManager>();
    }

    private void Start()
    {
        uiManager.UpdateScore(0);
    }

    private void Update()
    {
        timeSinceLastDifficultyIncrease += Time.deltaTime;

        if (timeSinceLastDifficultyIncrease >= difficultyIncreaseInterval)
        {
            IncreaseDifficulty();
            timeSinceLastDifficultyIncrease = 0f;
        }
    }

    private void IncreaseDifficulty()
    {
        //스폰 간격 줄임. 근데 최소값보장
        obstacleSpawnRate = Mathf.Max(0.5f, obstacleSpawnRate - spawnRateDecrease);
        // 속도는 계속 증가 가능
        obstacleSpeed += speedIncrease;
        // 무적시간은 너무낮아지지않게 최소값보장.
        playerGodMode = Mathf.Max(0.3f, playerGodMode - playerGodModeDecrease);
    }

    public void AddScore(int value)
    {
        if (!isGameOver)
        {
            score += value;
            uiManager.UpdateScore(score);
        }
    }

    public void GameOver()
    {
        if (isGameOver) return;
        isGameOver = true;
        //게임정지
        Time.timeScale = 0f;
        uiManager.SetRestart();
    }

    public void RestartGame()
    {
        Time.timeScale = 1f;
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }
    //GameOverPanel GameManager연결해주세요.
    //GameOverUI속 Button에 GameManager.RestartGame()연결해주
}

 

이런식으로 짯다.

 

그리고 그 와중에 GitHub가 터져서 다시만들었다...