본문으로 건너뛰기
게임 프로젝트 기초집LESSON 12

난이도 조절: 시간에 따라 생성 간격·속도·종류를 바꾸기

난이도초급 프로젝트
예상 시간50분
선수지식11강 게임 상태 흐름

12강. 난이도 조절: 시간에 따라 생성 간격·속도·종류를 바꾸기

1. 이번 강의에서 해결할 문제

난이도 수치가 Spawner 코드에 박혀 있어 반복 조정과 쉬움·어려움 비교가 어렵습니다. 경과 시간 입력을 생성 간격·속도 출력으로 바꾸는 데이터 에셋을 만듭니다.

2. 학습 목표

3. 핵심 개념

난이도는 한 번에 여러 요소를 급격히 바꾸지 않습니다. 이 과정은 생성 간격 감소와 이동 속도 증가를 먼저 적용하고, 추가 택배 종류는 해금 시간으로 제어합니다. 곡선과 범위는 데이터, 적용 시점은 Spawner가 맡습니다.

4. 단계별 실습

C# · 파일 경로: Assets/_Project/Scripts/Data/DifficultyProfile.cs

DifficultyProfile.cs
using UnityEngine;

namespace DeliverySorter.Data
{
[CreateAssetMenu(fileName = "Difficulty", menuName = "Delivery Sorter/Difficulty Profile")]
public sealed class DifficultyProfile : ScriptableObject
{
[SerializeField, Min(10f)] private float rampSeconds = 180f;
[SerializeField, Min(0.1f)] private float startInterval = 1.6f;
[SerializeField, Min(0.1f)] private float minimumInterval = 0.45f;
[SerializeField, Min(0.1f)] private float startSpeed = 2f;
[SerializeField, Min(0.1f)] private float maximumSpeed = 5f;
[SerializeField] private AnimationCurve curve = AnimationCurve.EaseInOut(0, 0, 1, 1);

public float Interval(float elapsed)
{
float t = curve.Evaluate(Mathf.Clamp01(elapsed / rampSeconds));
return Mathf.Lerp(startInterval, minimumInterval, t);
}

public float Speed(float elapsed)
{
float t = curve.Evaluate(Mathf.Clamp01(elapsed / rampSeconds));
return Mathf.Lerp(startSpeed, maximumSpeed, t);
}
}
}

C# · Spawner 변경 요점

PackageSpawner.cs
[SerializeField] private DifficultyProfile difficulty;
private float startedAt;

public void Begin() { startedAt = Time.time; /* 기존 Coroutine 시작 */ }

// SpawnLoop 안
float elapsed = Time.time - startedAt;
package.Initialize(definition, difficulty.Speed(elapsed), bounds);
yield return new WaitForSeconds(difficulty.Interval(elapsed));

Unity Editor·Inspector 작업: DefaultDifficulty.asset을 만들고 Spawner에 연결합니다. Curve를 완만하게 시작해 후반에 증가하도록 조정합니다.

테스트 작업: Ramp Seconds를 20초로 줄인 테스트 에셋에서 0초, 중간, 종료 시점의 Interval과 Speed를 로그로 기록하고 최소·최대 범위를 넘지 않는지 확인합니다.

5. 코드가 동작하는 이유

경과 시간을 정규화해 곡선의 0~1 입력으로 만들고 두 제한 값 사이를 보간합니다. Spawner는 현재 수치를 요청할 뿐 난이도 곡선의 구체 값을 모릅니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

난이도 조절: 시간에 따라 생성 간격·속도·종류를 바꾸기 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“난이도 조절: 시간에 따라 생성 간격·속도·종류를 바꾸기”에서 다음 단계로 넘어가기 전에 확인할 핵심은 무엇인가요?
  2. 문제 2“난이도 조절: 시간에 따라 생성 간격·속도·종류를 바꾸기”에서 ‘난이도 수치를 코드 여러 곳에 작성’ 문제가 생겼습니다. 가장 알맞은 진단 또는 대응은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

12강. 난이도 조절: 시간에 따라 생성 간격·속도·종류를 바꾸기 미완료 상태