Unity/John Lemon in Nightmareland

Unity Piscine Module06 - 10. UI 추가

surkim 2024. 8. 28. 20:46

UI 작업은 복잡하지 않지만, 해야 할 일이 많고 체계적으로 정리하지 않으면 금방 꼬여버려 시간이 많이 소요되는 작업이었다. 작업을 진행하다 보니 욕심이 생겨 이것저것 추가해보았는데, 그 내용을 정리해보겠다.

열쇠 개수 표시

열쇠 먹기 전
열쇠 먹은 후

열쇠 개수 표시 자체는 어려운 작업이 아니었다. 다만, 괜찮은 열쇠 이미지를 구하는 게 귀찮았다.

시점 표시 문구

TPS View
FPS View
FPS View (WASD)

사실 없어도 되는 기능이었지만, FPS 시점에서 과제에서 요구하는 기본 조작키가 마음에 들지 않아서 일반적인 FPS 조작을 구현했고, R키를 눌러 조작키를 변경할 수 있게 해주었다. FPS 시점에서 두 가지 조작키가 생겨서 이를 표시해주기 위해 만든 기능이다.

유령이 쫓아올 때 사이렌 표시

유령에게 잔뜩 어그로를 끌고 방으로 겨우 들어온 모습

유령이 쫓아올 때 소리가 나긴 하지만, 좀 더 가시성 있게 표현하고 유령에게 들켰을 때 긴장감을 주기 위해 사이렌 표시를 추가했다. 사이렌의 개수는 쫓아오는 유령의 수를 나타낸다.

설명서

피드백을 주러 온 사람들에게 말로 설명하는 것보다, 게임 내에서 설명서를 제공하는 것이 더 게임다워 보여서 만들었다.

진짜 열심히 만들었는데 다들 안읽고 지나간다... 

클리어 타임 표시

디버그용 키로 강제로 클리어한 모습

후술할 랭크 시스템 때문에 클리어 타임을 표시하게 되었다. 시간으로 순위를 매기니 플레이어들의 집중력이 달라졌다.

랭크 시스템

마의 1분대를 깨기위해서 동료들이 많이 시도한 모습

 

UI 작업은 귀찮고 시간이 많이 걸리지만, 어렵지는 않았다. 그러나 랭크 시스템을 만들 때는 배운 점이 있어 기록해둔다.

우선, 하나의 데이터(nickname, timestring, time)를 클래스 SaveData로 정의하고, 이를 JSON으로 저장한 후 가져와 비교하는 것까지는 잘 진행되었다. 그러나 이를 표현하는 방법에서, 텍스트를 무한히 붙이는 것보다는 텍스트 라인을 프리팹화하여 밑에 붙이는 기법을 배우게 되었다.

    void LoadRankData()
    {
        string allData = PlayerPrefs.GetString("SaveData");
        if (!string.IsNullOrEmpty(allData))
        {
            string[] records = allData.Split('\n');
            List<SaveData> rankingList = new List<SaveData>();

            foreach (string record in records)
            {
                SaveData data = JsonUtility.FromJson<SaveData>(record);
                rankingList.Add(data);
            }

            rankingList.Sort((a, b) => a.time.CompareTo(b.time));

            foreach (SaveData data in rankingList)
            {
                GameObject rankItem = Instantiate(rankPrefab, scrollViewContent.transform);
                rankItem.transform.Find("PlayerName").GetComponent<TMPro.TMP_Text>().text = data.nickName;
                rankItem.transform.Find("Time").GetComponent<TMPro.TMP_Text>().text = data.timeString;
            }
        }
    }

 

결론

UI 작업은 귀찮고 시간이 많이 걸리는 작업이지만, 게임에 있어서 필수적인 요소다. 잘 구성된 UI는 게임의 퀄리티를 크게 향상시켜주며, 플레이어의 경험을 한층 더 풍부하게 만들어준다. 비록 많은 수고가 필요하지만, 그만큼의 가치가 충분히 있는 작업이다. 이번 프로젝트를 통해 UI가 게임에서 얼마나 중요한 역할을 하는지 다시 한번 깨달을 수 있었다.

 

이번 포스트를 끝으로 이 과제는 끝이고 다음 포스트는 게임 플레이 영상이다.