유저테스트 피드백 - 던전 탈출 기능 구현

2025. 1. 10. 19:10카테고리 없음

유저테스트를 진행중에 피드백으로 던전 탈출 기능이 있었으면 좋겠다는 피드백을 듣고 만들기로 했다.

 

일단 던전 탈출 ui를 먼저 만들어줬다.

 

그리고 던전 탈출에 실패했습니다 오브젝트는 꺼둔상태로 만든후에 던전 탈출 버튼을 클릭시 5초동안 몬스터한테 공격을 받지않고, 플레이어가 움직이지 않으면 로비씬으로 이동하게 만들었다.

던전 탈출 스크립트

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class DungeonEscape : UIBase
{
    [SerializeField] private Button escapeButton;
    [SerializeField] private GameObject failurePanel;
    [SerializeField] private TextMeshProUGUI numberText;

    public void Initialize(bool isBool)
    {
        failurePanel.SetActive(false);
        if(!isBool)
        {
            StopAllCoroutines();
            UIManager.Instance.Hide<DungeonEscapeTimer>();
            GameManager.Instance.isDungeonEscape = false;
            StartCoroutine(Failure());
        }
        
        ButtonInitialize();
    }

    private void ButtonInitialize()
    {
        escapeButton.onClick.AddListener(() => OnDungeonEscape());
    }
    
    public void OnDungeonEscape()           //탈출 버튼
    {
        GameManager.Instance.isDungeonEscape = true;
        UIManager.Instance.Show<DungeonEscapeTimer>();
    }

    private IEnumerator Failure()                           //실패창 띄우는 코루틴
    {
        failurePanel.SetActive(true);
        yield return new WaitForSecondsRealtime(1f);
        failurePanel.SetActive(false);
    }
}

5초 카운터 세는 스크립트

 

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEditor;
using UnityEngine;

public class DungeonEscapeTimer : UIBase
{
    [SerializeField] private TextMeshProUGUI timerText;

    private float timer = 5;

    private void Update()
    {
        if (timer > 0)
        {
            timer -= Time.deltaTime;
            timerText.text = timer.ToString("F2");
        }
        else
        {
            GameManager.Instance.GotoLobby();
            GameManager.Instance.isDungeonEscape = false;
            UIManager.Instance.Hide<DungeonEscape>();
            Hide();
        }
    }
}

처음에는 시간초 세는 기능과 화면에 ui띄우는 기능을 한 스크립트에 다 넣을려고 했는데 그렇게 할려고 하니 화면에 시간이 흘러가는 텍스트를 부드럽게 나오게하기 어려울거 같다는 판단하게 새로운 스크립트에서 업데이트를 사용해 구현하게 되었다.

기능 구현하면서 어려웠던 부분

던전 탈출 버튼을 클릭을 했을때 플레이어가 움직이면 타이머 기능을 멈추고 정지되었다는 ui를 보내줘야하는데 이 조건을 어떡게 잡을지 감을 잘 못잡았어서 고생을 조금 했다. 처음에는 액션을 사용해서 할려고 하다가 액션이랑은 안맞는거 같아서 게임매니저에 bool값을 하나 만들고 해당 불값에 따라 실패인지 성공인지 판별했다.

오류

위와같이 했을때 문제없이 잘되서 좋아하고 있는데 여러가지 테스트를 하면서 탈출버튼을 광클릭했을시 캐릭터가 계속 움직이고 있어도 시간초가 안멈추는 버그가 있었는데 이게 생긴 원인이 위 DungeonEscape스크립트를 보시면 실패시 코루틴을 이용해서 1초동안 실패ui를 보여주는데 이때 끝나고 나서 게임매니저에 있는 조건변수 값을 바꿔줘서 생겼던 원인이였다. 그래서 코루틴 시작전에 변수값을 바꾸고 실패ui를 띄우는 식으로 해서 문제를 해결했다.