게임 프로젝트 기초집LESSON 13
랜덤 규칙 다듬기: 같은 택배가 4회 이상 연속되지 않게 하기
난이도초급 프로젝트
예상 시간50분
선수지식12강 시간 기반 난이도
13강. 랜덤 규칙 다듬기: 같은 택배가 4회 이상 연속되지 않게 하기
1. 이번 강의에서 해결할 문제
완전 무작위 생성은 같은 택배가 길게 이어져 공정하지 않게 느껴질 수 있습니다. 네 번째 선택에서는 직전 종류를 후보에서 제외합니다.
2. 학습 목표
3. 핵심 개념
같은 종류가 4회 이상 나오지 않는다는 뜻은 최대 3회까지 허용한다는 의미입니다. 조건을 만족할 때까지 재추첨하는 while 문은 후보가 하나면 끝나지 않습니다. 가능한 후보 목록을 먼저 만들고 한 번 뽑습니다.
4. 단계별 실습
C# · 파일 경로: Assets/_Project/Scripts/Gameplay/PackageSelector.cs
PackageSelector.cs
using System.Collections.Generic;
using DeliverySorter.Data;
using UnityEngine;
namespace DeliverySorter.Gameplay
{
public sealed class PackageSelector : MonoBehaviour
{
[SerializeField] private PackageDefinition[] definitions;
[SerializeField, Min(1)] private int maxConsecutive = 3;
private PackageDefinition last;
private int streak;
private readonly List<PackageDefinition> candidates = new();
public PackageDefinition Next()
{
candidates.Clear();
foreach (PackageDefinition definition in definitions)
{
if (definition == null) continue;
if (definitions.Length > 1 && streak >= maxConsecutive && definition == last) continue;
candidates.Add(definition);
}
if (candidates.Count == 0) return null;
PackageDefinition selected = candidates[Random.Range(0, candidates.Count)];
streak = selected == last ? streak + 1 : 1;
last = selected;
return selected;
}
public void ResetSequence() { last = null; streak = 0; }
}
}
Unity Editor·Inspector 작업: PackageSelector GameObject에 두 정의 에셋과 Max Consecutive 3을 연결하고 Spawner가 배열에서 직접 뽑는 대신 selector.Next()를 호출합니다.
테스트 작업: 1,000번 선택한 Id를 기록해 같은 Id가 4회 연속 없는지 검사합니다. 에셋 하나, null 포함, 빈 배열에서도 무한 반복이 없어야 합니다.
5. 코드가 동작하는 이유
연속 제한에 도달하면 직전 에셋만 후보에서 제외합니다. 후보 하나 상황은 제외 조건을 적용하지 않아 정상 반환하고, 빈 후보는 null로 명시해 Spawner가 생성을 건너뜁니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2랜덤 규칙 다듬기: 같은 택배가 4회 이상 연속되지 않게 하기 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
13강. 랜덤 규칙 다듬기: 같은 택배가 4회 이상 연속되지 않게 하기 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.