TIL

25.04.18 TIL

gaon99 2025. 4. 18. 21:18

1. 오늘 학습 키워드

 

패널 잠금 및 팝업 제작


2. 오늘 학습 한 내용을 나만의 언어로 정리하기

 

제일 먼저 작업한건 해금이 된 엔딩만이 크레딧에서 볼 수 있기에, 이 부분을 짰다.

 

EndingSO에 bool 값과 이미지를 담아서 각각 bool과 이미지를 담당하도록 했고,

버튼 액션시에, 패널 즉 SO가 isLocked가 true라면, 잠김 팝업을 띄우도록 설정해주고,

 

SetText를 isLocked 여부에 따라 이름을 설정해주었다.

panel.SetText(panel.isLocked ? $"{capturedIdx}. ???" : $"{capturedIdx}. {so.EndingName}");

panel.SetButtonAction(() => {
    if (panel.isLocked)
    {
        LockPopup();
    }
    else
    {
        onClick?.Invoke(capturedIdx);
    }
});

 

 

그리고 1번 패널을 클릭했는데 막 7번 인덱스의 패널 텍스트가 열리고 이런 오류가 발생했다.

어제 맞췄다고 생각했는데 아니였어서,

 

이 부분을 수정하기 위해 패널을 제작하는 메서드랑 패널을 로드해주는 메서드를 계속 손봤지만 오류가 계속 진행되어서,

로그를 찍어보았더니, 로드는 잘 된다는 결과에 도달했다.

그래서 그럼 의심할 부분이 UI를 띄우는 부분에서 로드 값을 제대로 못받는 경우다 라고 생각해서

UI부분을 수정했다.

private IEnumerator LoadEnding(int endingIndex)
{
    var handle = Addressables.LoadAssetsAsync<EndingSO>("Ending", null);
    yield return handle;

    if (handle.Status == AsyncOperationStatus.Succeeded)
    {
        foreach (var ending in handle.Result)
        {
            if (ending.Index == endingIndex)
            {
                UpdateUI(ending);
                break;
            }
        }
    }
    Addressables.Release(handle);
}

 

 

그리고 텍스트 유틸리티 즉, 텍스트에 사용되는 효과들을 초기에는 StartUI에서만 사용을 했기에, 거기에 넣어두었지만

엔딩에서도 이 효과를 원하신다고 하셔서 TextUtility를 제작해서 텍스트에 관련된 효과를 전역으로 제작했다.

using System;
using System.Collections;
using System.Text;
using TMPro;
using UnityEngine;

public static class TextUtility
{
    public static string CleanLineBreaks(string text)
    {
        return text.Replace("Wn", "\n").Replace("\\n", "\n").Replace(@"\n", "\n");
    }
    public static IEnumerator AnimatorText(TextMeshProUGUI target,string text, Action onComplete)
    {
        target.text = string.Empty;

        StringBuilder stringBuilder = new();

        for (int i = 0; i < text.Length; i++)
        {
            char currentChar = text[i];

            if (currentChar == '\n') // 줄바꿈을 만났을 경우, 입력 대기
            {
                stringBuilder.Append(currentChar);
                target.text = stringBuilder.ToString();

                yield return new WaitUntil(() => Input.anyKeyDown);

            }
            else
            {
                stringBuilder.Append(text[i]);
                target.text = stringBuilder.ToString();
                yield return new WaitForSeconds(0.05f);
            }
        }
        yield return new WaitUntil(() => Input.anyKeyDown);
        
        onComplete?.Invoke();
    }
}


이후 텍스트를 불러오는 와중 \n을 줄바꿈이 아니라 문자로 띄워주는 오류가 발생해서 CleanLineBreaks를 거쳐서 텍스트를 뽑아냈다.

public void UpdateUI(EndingSO ending)
{
    string cleanedText = TextUtility.CleanLineBreaks(ending.EndingText);
    StartCoroutine(TextUtility.AnimatorText(endingText, cleanedText ,ReturnToLobby));
    endingText.text = ending.EndingText;
    endingImage.sprite = ending.EndingImage;
}

private void ReturnToLobby()
{
    //버튼으로 씬 로드
    SceneBase.LoadScene("StartScene");
}

3. 학습하며 겪었던 문제점 & 에러

 

어드레서블을 여러 사람이 추가하고 이러다보니 오류가 생겼다. 이 부분은 씬 제작처럼 한 사람이 관리하는 것이 좋다고 되어있어서,

마지막에 오류 수정했어서 내가 담당하기로 했다.

 

그리고 위에서도 말했지만 엔딩 연결 오류 등이 있었다.


4. 내일 학습 할 것은 무엇인지

 

주말동안 모의 면접 예상 질문에 대해서 좀 작성을 해 둘 예정이고, 월요일엔 지금 사운드를 로드하는 부분에서 오류가 존재해서,

이 부분을 좀 고칠 것 같다.

'TIL' 카테고리의 다른 글

25.04.22 TIL  (0) 2025.04.22
25.04.21 TIL  (0) 2025.04.21
25.04.17 TIL  (0) 2025.04.17
25.04.16 TIL  (0) 2025.04.16
25.04.15 TIL  (0) 2025.04.15