코딩의 신 58

김동관·2025년 12월 23일

오늘 한 일

Unity 튜토리얼 시스템 개선 (Trigger 기반 점프 튜토리얼)
작업 배경

NPC 대화 이후 플레이어에게 이동, 점프 같은 기본 조작을 알려주기 위해 튜토리얼 시스템을 구현했다.
초기에는 F 키로 대화와 튜토리얼을 모두 넘기는 구조였는데, 이로 인해 입력 충돌과 UX 문제가 발생했다.

기존 문제점

입력 키 충돌

F 키 하나로

NPC 상호작용

대화 넘기기

튜토리얼 넘기기
를 모두 처리

NPC 앞에서 튜토리얼 중 F를 누르면

  • 튜토리얼 + NPC 대화가 동시에 다시 시작되는 문제 발생

강제적인 튜토리얼 UX

가만히 서서 F만 누르면 튜토리얼이 진행됨

“점프를 해보세요” 안내가 행동과 무관하게 진행됨

해결 방향

튜토리얼은 키 설명이 아니라
플레이어 행동을 유도해야 한다

그래서 튜토리얼을 다음처럼 분리했다.

  • 이동(WASD) : NPC 대화 직후 UI 패널로 안내

  • 점프(Space) :

  • 언덕 근처에 도착했을 때만
  • Trigger 기반으로 텍스트 표시
  • 실제로 Space를 누르면 종료

최종 구조 설계
🎯 점프 튜토리얼 흐름

플레이어가 언덕 근처로 이동

Trigger 영역 진입

월드에 텍스트 표시
→ "Space Bar로 점프해보세요"

플레이어가 Space 입력

텍스트 제거 + 튜토리얼 종료

✔ F 키 사용 x
✔ 위치 + 행동 기반 튜토리얼 0

씬 구성

JumpTutorialZone
 ├─ BoxCollider (Is Trigger)
 └─ JumpGuideText (TextMeshPro - 3D)

TextMeshProUGUI x

TextMeshPro (3D) 0

시작 시 텍스트는 비활성화

JumpTutorialTrigger.cs

using UnityEngine;
using TMPro;

public class JumpTutorialTrigger : MonoBehaviour
{
    [SerializeField] private GameObject jumpGuideText;

    private bool isActive = false;
    private bool completed = false;

    private void OnTriggerEnter(Collider other)
    {
        if (completed) return;
        if (!other.CompareTag("Player")) return;

        isActive = true;
        jumpGuideText.SetActive(true);
    }

    private void OnTriggerExit(Collider other)
    {
        if (!other.CompareTag("Player")) return;

        isActive = false;
        jumpGuideText.SetActive(false);
    }

    private void Update()
    {
        if (!isActive || completed) return;

        if (Input.GetKeyDown(KeyCode.Space))
        {
            CompleteTutorial();
        }
    }

    private void CompleteTutorial()
    {
        completed = true;
        jumpGuideText.SetActive(false);
        Destroy(gameObject); // 한 번만 실행
    }
}
  • 정리

x 튜토리얼을 키 입력으로만 넘기는 방식

0 Trigger + 행동 기반 튜토리얼

x 패널 띄워두고 F 연타

0 위치에 맞는 월드 텍스트 안내

“튜토리얼은 설명이 아니라
플레이어의 행동을 자연스럽게 유도하는 장치”

profile
아이디어 뱅크

0개의 댓글