콘텐츠로 이동

🎮 자막 감지 기반 미니게임 만들기

“선생님” 자막이 나오면 5초 안에 버튼을 눌러라!

이 튜토리얼에서는 음성을 영상처럼 만들고 자막 달기
에서 만든 프로젝트를 그대로 이어서 사용합니다.

이전 챕터에서는 다음을 완성했습니다:

  • UI 배경 이미지 설정
  • 오디오 불러오기
  • Whisper로 자막 생성
  • 번역 자막 생성

이번에는 그 자막을 실제 게임 요소로 활용
"특정 단어 등장 → 반응 시간 제한 → 성공/실패 분기"
구조를 가진 작은 미니게임 시스템을 만듭니다.

예제로 사용할 작업은 아래 체험판입니다:

https://www.dlsite.com/home/work/=/product_id/RJ01323001.html
(블루아카이브 카즈사 / 체험판)

블루아카이브에서는 주인공을 “선생님”이라고 부르기 때문에
자막 감지 예제로 아주 적합합니다.


🧭 전체 구조 미리보기

자막에 “선생님” 이라는 단어가 나오면:

  1. 전역 변수 SenseiFlag ← 1
  2. 버튼 UI 표시
  3. 5초 동안 기다림
  4. 버튼을 누르면 성공
  5. 누르지 않으면 트랙 종료(실패)

1️⃣ 자막 타입 먼저 수정하기 (중요!)

이번 미니게임은 자막에서 특정 단어(“선생님”)가 등장한 순간을 감지해야 합니다.
그런데 이전 챕터에서 만들어둔 자막은 기본적으로 전체 문장이 한 번에 표시되는 타입입니다.

이 방식은 “앞으로 어떤 단어가 나올지”를 미리 알 수 있기 때문에
실제 감지 타이밍이 부정확해지는 문제가 생깁니다.

그래서 반드시 자막 타입을 TypeWriter 방식으로 변경해야 합니다.


✔ TypeWriter 자막의 특징

  • 자막이 전체 시간에 맞춰 한 글자씩 출력
  • 아직 표시되지 않은 글자는 감지할 수 없음
  • 따라서 “선생님”이라는 단어가 등장하는 정확한 순간을 잡아내기 좋음
  • 미니게임·단어 감지·호흡 싱크 등에서 가장 적합한 자막 타입

📌 TypeWriter 타입으로 변경하는 법

  1. 타임라인에서 오디오를 더블클릭하여 음성 편집 화면으로 이동
  2. 자막 목록으로 이동
  3. Ctrl + A 눌러 모든 자막 선택
  4. 우측 하단의 Animation → TypeWriter 를 클릭해 타입 변경

자막타입변경

이제 모든 자막이 “한 글자씩 보여주는 방식”으로 바뀌었고
특정 단어가 등장하는 순서를 정확하게 감지할 수 있습니다.


1️⃣ UI 만들기 (반응 버튼)

alt text

  1. UI 탭 → 새 UI
  2. Button 컨트롤을 가운데 배치
  3. 버튼 Text = "선생님!" 또는 "PRESS!"

이전 챕터에서 배운 UI 제작 방식과 동일합니다.

TIP
버튼은 화면 중앙 정렬로 두면 미니게임 UI처럼 자연스럽습니다.


2️⃣ 전역 변수 만들기

alt text

  1. 좌측의 리소스관리 탭의 변수
  2. 십자 버튼
  3. 이름: SenseiFlag
  4. 초기값: 0

이 변수는 입력 대기 상태인지 판단하는 핵심 역할을 합니다.

값 의미:
0 = 대기 중 아님
1 = "선생님" 감지됨 → 5초 안에 누르기 모드


3️⃣ 자막 감지 스크립트 만들기

이번 단계에서는
자막에 “선생님” 이라는 단어가 등장했을 때 자동으로 실행되는
감지 스크립트를 구성합니다.

이 스크립트는 다음과 같은 흐름으로 작동합니다:

  1. 자막에 “선생님”이 포함되었는지 확인
  2. 포함되었다면 글로벌 변수 SenseiFlag ← 1
  3. 5초 동안 대기
  4. 5초 동안 버튼을 누르지 않았다면 실패 처리(트랙 종료계열로 이동)

📌 스크립트 구성 방법

  1. Script 탭 → 새 스크립트(New Script)
  2. 스크립트 이름: SenseiTrigger
  3. 아래 구조대로 스크립트를 구성합니다.

✔ 1단계: 자막에 “선생님”이 포함되었는지 검사

조건문을 추가하고 다음과 같이 설정합니다:

조건
- 자막에 [선생님]이 포함된 경우입니다.

만족
- 변수 [SenseiFlag] 를 [1] 만큼 [대입]합니다. [0초 동안 진행됩니다.]
- 시간 [5]초 만큼 대기합니다.

이렇게 하면 “선생님”이 등장한 순간에만 SenseiFlag 값이 1이 됩니다.


✔ 2단계: 5초 후에도 SenseiFlag가 여전히 1인지 확인 (실패 판정)

첫 번째 조건문 아래에 또 하나의 조건문을 추가합니다.

조건
- 변수 [SenseiFlag] 이 [1] 보다 [같음]일 경우입니다.

만족
- 현재 트랙의 시간을 [420]초로 변경합니다.
(트랙 맨 끝으로 이동하는 효과)

즉, 플레이어가 버튼을 누르지 않으면
SenseiFlag가 1 그대로이기 때문에 실패 처리됩니다.


📌 전체 구조 예시

아래는 완성된 구조의 모습입니다:

(이미지 예시) 자막감지_스크립트

위와 동일하게 구성하면
자막에 “선생님”이 등장 → 5초 카운트 → 무반응이면 엔딩으로 이동
이라는 흐름이 완성됩니다.


5️⃣ 버튼 Click 스크립트 만들기

UI 화면에서 버튼을 선택하고:

오른쪽 패널 → Script → Click → 편집

아래 스크립트를 구성합니다.


✔ 성공 조건: SenseiFlag == 1 일 때

조건: SenseiFlag == 1
SenseiFlag ← 0
Play Sound (성공 효과음)

사용자가 제때 눌렀음을 의미합니다.


✔ 늦게 누른 경우: SenseiFlag == 0 일 때

자막감지_스크립트

조건: SenseiFlag == 0
Jump Track(실패 지점)

사용자가 너무 늦게 눌렀거나,
이미 실패 판정이 난 후에 눌렀다는 의미입니다.


🧪 전체 흐름 정리 (요약)


🔷 자막 감지 스크립트 (SenseiTrigger)

SenseiFlag ← 1
UI Show
특정 시간만큼 5초 대기
If SenseiFlag == 1:
Jump Track(end)


🔷 버튼 클릭 스크립트

If SenseiFlag == 1:
SenseiFlag ← 0
Play Sound(success)
Else:
Jump Track(end)


🎉 최종 결과

이제 프로젝트는 다음처럼 동작합니다:

  • “선생님” 자막 등장 → 버튼 팝업
  • 사용자는 5초 안에 눌러야 함
  • 제때 누르면 성공
  • 늦으면 실패
  • beginner-audio-to-video 에서 만든
    “오디오 + 자막 + UI 배경” 프로젝트 기반으로 자연스럽게 확장됨

이 예제는 VSP의 모든 기능이 결합된
미니 게임형 인터랙티브 시스템의 기본 골격이 됩니다.