대화형 선택지가 게임 엔딩과 플롯 분기를 바꾸는 6가지 디자인 패턴

대화형 선택지를 엔딩과 플롯 분기에 연결할 때 필요한 누적 변수, 플래그, 관계도, 우선순위 규칙을 정리한다. 선택의 의미를 유지하면서 분기 폭발과 테스트 비용을 통제하는 실전 게임 디자인 패턴을 소개한다.

✓ 복사 완료!
챕터일반 가이드
난이도중급
상태● 검토 완료
대상 엔진
Engine Agnostic
최종 업데이트
대화형 선택지가 게임 엔딩과 플롯 분기를 바꾸는 6가지 디자인 패턴

대화형 선택지는 문장을 고르게 하는 UI가 아니라 플레이어의 의도를 게임 상태로 변환하는 입력 장치다. 좋은 분기 설계는 모든 선택을 별도 스토리로 늘리지 않고 플래그·누적 점수·관계도·분기 우선순위를 조합해 의미 있는 엔딩 차이를 만든다. 핵심은 선택의 결과를 즉시 보여 주거나 나중에 회수하되 설계자가 추적 가능한 상태값으로 제한하는 데 있다.

대화형 선택지가 엔딩 분기에 어려운 이유는 무엇인가?

선택지 수가 늘면 가능한 경로는 빠르게 증가한다. 매 장마다 선택지가 3개이고 장이 6개라면 단순 계산상 가능한 선택 열은 다음과 같다.

36=7293^6 = 729

하지만 729개의 완전한 시나리오를 작성하고 테스트하는 방식은 대부분의 프로젝트에서 유지할 수 없다. 따라서 엔딩 분기는 보통 다음 두 층으로 나눈다.

층역할대표 데이터설계 목적
국소 분기현재 장면의 대사, 보상, 퀘스트 진행 변화questStage, npcMood, 아이템 보유 여부선택의 즉각적 반응 제공
거시 분기중후반 플롯과 엔딩 판정 변화신뢰도, 이념 점수, 핵심 플래그선택의 누적 의미와 재플레이 가치 제공

국소 분기는 다시 합류해 제작량을 제어하고 거시 분기는 마지막까지 유지해 엔딩의 정체성을 만든다. 이를 흔히 분기 후 합류(branch and bottleneck) 구조라고 부른다.

flowchart TD
    A[대화 선택] --> B{즉시 결과}
    B --> C[국소 대사·보상 변경]
    B --> D[플래그·점수 기록]
    C --> E[공통 메인 퀘스트]
    D --> F{챕터 또는 엔딩 판정}
    E --> F
    F --> G[엔딩 A]
    F --> H[엔딩 B]
    F --> I[엔딩 C]

이 구조에서 중요한 점은 “합류”가 선택을 무효화한다는 뜻이 아니라는 것이다. 같은 메인 퀘스트로 돌아오더라도 동행 NPC, 해결 방식, 대사 어조, 보상, 후속 조건이 달라지면 선택은 충분한 효력을 가진다.

대화 선택의 즉시 결과와 엔딩 판정용 상태값이 분리된 게임 UI 예시

엔딩과 플롯 분기에 쓰는 6가지 선택지 디자인 패턴

1. 이진 플래그 패턴: 되돌릴 수 없는 사건을 기록한다

이진 플래그는 특정 사실의 발생 여부를 기록한다. NPC를 구했는지 금지 구역에 들어갔는지 비밀을 폭로했는지처럼 서사적으로 명확한 사건에 적합하다.

public sealed class StoryFlags
{
    public bool SavedEngineer { get; set; }
    public bool RevealedProjectTruth { get; set; }
    public bool AcceptedCorporationDeal { get; set; }
}

플래그는 이해하기 쉽지만 남용하면 조건문이 폭발한다. 엔딩 조건에 쓰는 플래그는 “세계 상태를 바꾸는 사건”으로 제한하고 단순 호감 표현까지 모두 플래그로 만들지 않는 편이 좋다.

2. 누적 점수 패턴: 여러 선택의 방향성을 압축한다

도덕성, 독립성, 질서 성향처럼 플레이어의 반복된 태도를 반영해야 한다면 누적 점수가 적합하다. 각 선택이 작은 영향을 남기고 특정 임계값을 넘었을 때 플롯과 엔딩이 달라진다.

public enum Alignment
{
    Order,
    Freedom,
    Empathy
}

public sealed class NarrativeState
{
    public int OrderScore { get; private set; }
    public int FreedomScore { get; private set; }
    public int EmpathyScore { get; private set; }

    public void ApplyChoice(Alignment alignment, int value)
    {
        switch (alignment)
        {
            case Alignment.Order: OrderScore += value; break;
            case Alignment.Freedom: FreedomScore += value; break;
            case Alignment.Empathy: EmpathyScore += value; break;
        }
    }
}

점수 기반 엔딩은 한 번의 실수로 결과가 고정되는 문제를 줄인다. 다만 임계값이 너무 낮으면 초반 선택이 엔딩을 사실상 확정하고 너무 높으면 선택의 영향이 체감되지 않는다.

엔딩 점수는 선택 횟수에 따라 정규화하면 밸런싱하기 쉽다.

E=∑i=1nwici∑i=1n∣wi∣E = \frac{\sum_{i=1}^{n} w_i c_i}{\sum_{i=1}^{n} |w_i|}

여기서 c_i는 선택의 방향값, w_i는 해당 장면의 중요도다. 예를 들어 일상 대화는 w_i = 1, 동료를 희생시키는 결정은 w_i = 5로 둘 수 있다.

3. 관계도 벡터 패턴: NPC마다 다른 기억을 남긴다

하나의 공용 도덕성 점수만으로는 동료 관계를 설득력 있게 만들기 어렵다. NPC별 관계도를 별도로 저장하면 같은 선택도 인물마다 다르게 받아들이게 할 수 있다.

선택반군 리더 신뢰경비대장 신뢰시민 지지도
검문소를 강제로 통과+2-3-1
협상으로 통과+1+1+2
임무를 포기-20-1

관계도는 동행 가능 여부, 개인 퀘스트, 엔딩 컷신의 등장 인물을 결정하는 데 효과적이다. 다만 모든 NPC가 모든 선택에 반응할 필요는 없다. 핵심 인물 3~5명만 대화 선택과 강하게 연결해도 플레이어는 세계가 자신의 결정을 기억한다고 느낀다.

4. 잠금과 해금 패턴: 선택으로 콘텐츠 접근권을 바꾼다

선택의 결과를 엔딩 영상에만 몰아두면 플레이 중의 체감이 약해진다. 특정 발언이나 신뢰도에 따라 정보, 지역, 동료 퀘스트, 해결 수단을 해금하면 결과가 과정에도 반영된다.

  • 기술자의 신뢰도 70 이상: 발전소 우회 경로 해금
  • RevealedProjectTruth == true: 기자 NPC의 조사 퀘스트 해금
  • 질서 점수 우세: 공식 지원군 요청 가능
  • 자유 점수 우세: 지하 조직의 은신처 이용 가능

이 패턴은 플롯 분기를 늘리는 대신, 기존 목표를 다른 방식으로 해결하게 만들어 콘텐츠 재사용 효율도 높인다.

NPC 신뢰도와 핵심 플래그에 따라 해금되는 퀘스트 경로 예시

5. 지연 회수 패턴: 선택의 무게를 시간차로 만든다

중요한 선택은 즉시 정답·오답처럼 판정하지 않는 편이 좋다. 예를 들어 초반에 정보를 숨긴 선택이 중반의 동료 갈등으로 이어지고 후반에 지원군 여부로 회수되면 플레이어는 자신의 결정을 다시 해석하게 된다.

지연 회수는 다음 세 단계로 설계한다.

  1. 기록한다: 선택 직후 플래그나 점수를 저장한다.
  2. 암시한다: 짧은 대사, 뉴스, NPC 반응으로 결과가 남았음을 알린다.
  3. 회수한다: 이후 퀘스트의 조건, 해결 수단, 엔딩 장면에서 분명한 차이를 보여 준다.

암시 없이 너무 늦게 회수하면 플레이어가 원인을 기억하지 못한다. 반대로 결과를 너무 자세히 예고하면 선택이 계산 문제로 변한다. “누군가 이 일을 기억할 것이다” 정도의 신호가 적절하다.

6. 우선순위 엔딩 패턴: 충돌하는 조건을 명시적으로 해결한다

실제 엔딩 판정에서는 여러 조건이 동시에 만족한다. 예를 들어 반군 신뢰도도 높고 기업 계약도 수락했으며 진실도 폭로했을 수 있다. 이때 조건문 순서가 곧 서사적 우선순위가 된다.

public string ResolveEnding(NarrativeState state, StoryFlags flags, int rebelTrust)
{
    if (flags.AcceptedCorporationDeal && !flags.RevealedProjectTruth)
        return "CorporationControl";

    if (flags.RevealedProjectTruth && rebelTrust >= 70)
        return "Revolution";

    if (state.EmpathyScore >= 60)
        return "CivilianAlliance";

    return "UncertainFuture";
}

우선순위 규칙은 기획 문서에도 표로 적어야 한다. 구현자가 조건 순서를 바꾸는 것만으로 엔딩 의도가 달라지는 일을 막을 수 있다.

우선순위엔딩핵심 조건의도
1기업 통제계약 수락, 진실 미폭로플레이어의 은폐 선택을 강하게 회수
2혁명진실 폭로, 반군 신뢰 70 이상동맹과 행동의 일관성 보상
3시민 연합공감 점수 60 이상갈등 완화 중심 플레이 보상
4불확실한 미래위 조건 불충족중립 또는 미완의 결과 제공

대화 선택지 분기를 어떻게 구현할까?

1단계: 선택지를 서사 문장이 아니라 상태 변화로 정의한다

기획 문서에서 각 선택지에 다음 필드를 붙인다.

필드예시
선택지 IDchapter2_guard_negotiation
표시 문장“당신의 명령은 정당하지 않습니다.”
즉시 결과경비대장 대사 변경, 검문소 통과
상태 변화GuardTrust +1, FreedomScore +2
지연 회수4장에서 지원군 요청 조건 변경
엔딩 영향시민 연합 엔딩 점수에 간접 기여

이 형식은 작가, 퀘스트 디자이너, 프로그래머, QA가 같은 선택을 같은 기준으로 볼 수 있게 한다.

2단계: 상태값의 역할을 겹치지 않게 분리한다

같은 정보를 플래그와 점수에 중복 저장하면 디버깅이 어려워진다. 다음 기준을 권장한다.

  • 한 번 일어난 사건의 사실 여부: bool 플래그
  • 반복된 태도와 성향: 정수 점수
  • 특정 인물의 반응: NPC별 관계도
  • 현재 장면의 진행 상태: 퀘스트 단계 enum
  • 콘텐츠 노출 여부: 해금 목록 또는 태그

3단계: 엔딩 판정을 데이터로 검증한다

엔딩마다 대표 플레이 경로를 최소 1개 이상 만들고 QA가 재현할 수 있는 상태 스냅샷을 준비한다. Unity라면 개발 빌드에서 현재 플래그와 점수를 확인하거나 임시로 주입하는 디버그 패널이 유용하다.

public bool CanReachRevolutionEnding(StoryFlags flags, int rebelTrust)
{
    return flags.RevealedProjectTruth && rebelTrust >= 70;
}

“어떤 선택을 하면 어떤 엔딩에 도달하는가”를 전부 공개할 필요는 없지만 개발팀 내부에서는 모든 엔딩의 도달 조건과 배제 조건을 명확히 관리해야 한다.

선택지가 가짜 선택처럼 느껴지는 이유는 무엇인가?

플레이어는 결국 같은 장소로 돌아온다는 사실보다 자신의 선택이 이후 대화와 해결 방식에 반영되지 않는다는 사실에 더 크게 실망한다. 다음 신호가 반복되면 가짜 선택으로 느껴지기 쉽다.

  • 어떤 선택을 해도 NPC의 다음 대사가 완전히 같다.
  • 보상, 퀘스트 해결법, 동행 인물에 차이가 없다.
  • 엔딩 차이가 마지막 한 문장 교체에 그친다.
  • 선택의 결과가 너무 늦게 나오는데 중간 암시가 없다.
  • 명백히 다른 답을 골라도 동일한 점수가 들어간다.

반대로 모든 선택에 대규모 콘텐츠를 만들 필요는 없다. 한두 줄의 재반응, 다른 카메라 연출, 보상 아이템의 교체, 후속 대사의 호칭 변화처럼 저비용 반응을 꾸준히 넣으면 선택의 신뢰도가 높아진다.

자주 묻는 질문 (FAQ)

엔딩은 몇 개가 적절한가?

엔딩 수보다 각 엔딩이 플레이 과정에서 충분히 준비되었는지가 중요하다. 소규모 게임이라면 핵심 엔딩 3개와 조건을 만족하지 못했을 때의 기본 엔딩 1개가 관리하기 좋은 출발점이다.

모든 대화 선택지를 엔딩에 반영해야 하는가?

아니다. 엔딩에 반영할 선택은 세계관의 가치, 핵심 관계, 주요 갈등 해결과 직접 연결된 것만 고른다. 나머지는 즉시 반응이나 국소 퀘스트 변화로 의미를 만든다.

점수 시스템을 플레이어에게 공개해야 하는가?

정확한 수치를 공개하면 전략 게임처럼 의도적으로 설계할 수 있고 숨기면 역할극과 몰입을 강화할 수 있다. 게임의 목표가 최적화인지 서사적 자기표현인지에 따라 결정한다.

정리

대화형 선택지의 엔딩 설계는 분기 수를 늘리는 작업이 아니라 상태값을 설계하는 작업이다. 사건은 플래그로 태도는 누적 점수로 인물 반응은 관계도로 기록하고 핵심 조건만 끝까지 유지하자. 그러면 제한된 제작 비용 안에서도 플레이어가 자신의 선택이 플롯과 결말을 바꾸었다고 납득할 수 있는 분기 구조를 만들 수 있다.