본문으로 건너뛰기
Unity C# 기초집LESSON 19

랜덤과 난이도 조절

난이도초급
예상 시간45분
선수지식18강 생성 Coroutine

19강. 랜덤과 난이도 조절

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

완전 랜덤 생성은 같은 택배가 지나치게 연속으로 나와 불공정하게 느껴지고, 시간이 지나도 난이도가 같습니다. 랜덤에 게임 규칙을 더합니다.

2. 학습 목표​

3. 핵심 개념​

랜덤은 규칙이 없는 것이 아니라 허용 후보 중 하나를 선택하는 도구입니다. 최대 연속 횟수에 도달하면 직전 타입을 후보에서 제외합니다. 난이도 곡선은 최솟값을 두어 생성 간격이 0에 가까워지지 않게 합니다.

4. 단계별 실습​

C# · 파일 경로: Assets/DeliverySorter/Scripts/Spawning/PackageTypeSelector.cs

PackageTypeSelector.cs
using UnityEngine;

[System.Serializable]
public sealed class PackageTypeSelector
{
[SerializeField] private PackageTypeData[] types;
[SerializeField, Min(1)] private int maxConsecutive = 3;

private PackageTypeData previous;
private int consecutiveCount;

public PackageTypeData Next()
{
if (types == null || types.Length < 2)
{
Debug.LogError("At least two package types are required.");
return null;
}

PackageTypeData selected;
do
{
selected = types[Random.Range(0, types.Length)];
}
while (selected == previous && consecutiveCount >= maxConsecutive);

consecutiveCount = selected == previous ? consecutiveCount + 1 : 1;
previous = selected;
return selected;
}
}

C# · PackageSpawner에 간격 계산 추가

PackageSpawner.cs
[SerializeField, Min(0.1f)] private float startingInterval = 1.5f;
[SerializeField, Min(0.1f)] private float minimumInterval = 0.45f;
[SerializeField, Min(0f)] private float decreasePerMinute = 0.25f;

private float ElapsedSeconds => Time.time - gameStartedAt;

private float CurrentInterval()
{
float minutes = ElapsedSeconds / 60f;
return Mathf.Max(minimumInterval, startingInterval - decreasePerMinute * minutes);
}

SpawnLoop의 대기값을 CurrentInterval()로 바꾸고 SpawnOne에서 selector.Next 결과를 Configure에 전달합니다.

5. 코드가 동작하는 이유​

연속 횟수가 최대에 도달하기 전에는 모든 타입이 후보입니다. 최대 3회에 도달하면 같은 타입을 뽑은 동안 다시 선택하므로 네 번째는 다른 타입이 됩니다. 최소 두 타입을 요구해 무한 반복 가능성을 막습니다.

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

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

랜덤과 난이도 조절 미니 퀴즈

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

0 / 2
  1. 문제 1“랜덤과 난이도 조절” 내용을 실제 작업에 적용한 설명으로 가장 알맞은 것은 무엇인가요?
  2. 문제 2‘난이도를 Update에서 매 프레임 적용’ 상태에 관한 “랜덤과 난이도 조절” 본문의 설명으로 가장 알맞은 것은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

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

19강. 랜덤과 난이도 조절 미완료 상태