본문으로 건너뛰기
게임 프로젝트 기초집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강. 난이도 조절: 시간에 따라 생성 간격·속도·종류를 바꾸기 미완료 상태