TIL

25.04.14 TIL

gaon99 2025. 4. 14. 21:49

최종 프로젝트 n일차

 

1. 오늘 학습 키워드

 

오류 수정 및 크레딧 제작


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

 

수정은 크게 2가지였다.

 

하나는 Front에 Text를 넣어서, 해당 텍스트도 같이 회전하게끔 어제 제작을 했으나, 주말 기간동안 카드 앞면을 제작해주셔서

이 부분을 넣었다. 다만 이부분이 초회차는 잘 보였으나, 리턴을 하고, 다시 패널을 클릭하면 그 값이 회전이 되어있어서 거울이 있어야만

글을 읽을 수 있었다.

 

이 부분 수정이 완성을 하고나니 단 한 줄로 끝났지만,

처음에는 isFlipped 불리언을 사용해서, 뒤집어져 있을땐, isFlipped ? target y = 180 : 0; 이런 느낌으로 작성했다.

이렇게 작성하니, 1회차는 되었고, 2회차에 회전이 되어있는 카드가 flip 없이, 바로 동작하는 이슈가 있었다.

 

그리고 3회차를 해보니 카드가 뒤집혀있었고, 이 방법은 실패했다.

 

다음은 isFlipped가 true일때 180도를 더해주는 방법을 해보았다.

 

startRot = front.transform.rotation로 받고, if문을 사용해서 더 해주었는데,

1회차는 되었고, 2회차도 되었지만. 3회차에서 또 돌아가는 이슈가 발생했다.

 

이 부분에서 영감을 얻은게 텍스트 처럼 계속 180도씩 더해서, 위상차가 180도가 나도록 생성하면 항상 올바른 화면이 나올것이다.

라고 생각하고

Quaternion startRot = front.transform.rotation  = Quaternion.Euler(0, 180, 0);

이렇게 작성해주었더니, 잘 작동하는 모습을 볼 수 있었다.

 

다음은 카드가 버튼으로 되어있어 가시적으로 보여주기위해 hover를 사용하고 싶었는데,

Button에 자동 애니메이션을 생성해주는 기능이 있어 이 부분을 사용해서 작업했었다.

 

다만, 선택을 한 이후 카드 선택하는 화면으로 갔을 때, 카드가 커져있는 문제가 발생했다.

이 부분을 수정하기 위해 transform의 localscale을 받아서, Vector one(1,1,1)을 넣어주었으나 변동을 하지 않았다.

 

문제를 찾고싶었는데, 내 지식의 밖이라고 생각해서 튜터님께 도움을 청했더니, Normal 애니메이션을 설정을 안해서 그렇다고 알려주셨다.

 

그래서 Normal 애니메이션의 scale에 초기값을 넣어주었더니. 바로 작동했다..

 

이 오류 수정이 끝나고 추가로 오늘 작업한 부분은 크레딧을 만들었는데

우선 크레딧에 들어가는 패널이 계속 생성이 되었다가 삭제가 되었다가 하기에. 이 부분이 너무 미비하지만 데이터 낭비가 있을 것으로 판단하고 오브젝트 풀을 간단히 제작했다.

using System.Collections.Generic;
using UnityEngine;

public class CreditPanelPool : MonoBehaviour
{
    public GameObject panelPrefab;
    public Transform parent;
    public int poolSize = 10;

    private List<GameObject> pool = new List<GameObject>();

    void Start()
    {
        for (int i = 0; i < poolSize; i++)
        {
            GameObject obj = Instantiate(panelPrefab, parent);
            obj.SetActive(false);
            pool.Add(obj);
        }
    }

    public GameObject GetPanel()
    {
        foreach (GameObject obj in pool)
        {
            if (!obj.activeInHierarchy)
            {
                obj.SetActive(true);
                return obj;
            }
        }
        GameObject newObj = Instantiate(panelPrefab, parent);
        pool.Add(newObj);
        return newObj;
    }

    public void ReturnAllPanels()
    {
        foreach (GameObject obj in pool)
        {
            obj.SetActive(false);
        }
    }
}

 

 

이 부분은 엔딩에 패널을 제작하는 코드인데. serializableDic의 유틸을 사용해서 string값과 EndingSO값을 저장해주고,

그리고 이 값과 CreditPanel 클래스 내부에서 작성한 SetButtonAction 액션을 연결시켰다.

public void CreateEndingPanels(SerializableDic<string, EndingSO> endings, Action<EndingSO> onClick)
{
    int count = 1;
    foreach (var pair in endings.dataList)
    {

        GameObject panelObj = creditPanelPool.GetPanel();
        CreditPanel panel = panelObj.GetComponent<CreditPanel>();

        string key = pair.Key;
        EndingSO ending = pair.Value;
        panel.SetText($"{count}. " + "\t"+ $"{ending.EndingName}");
        panel.SetButtonAction(() => onClick?.Invoke(ending));
        count++;
    }
}

 


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

 

에러는 다 말한 것 같고, 지금 제작에 지연되는 부분은 Loading에 어드레서블을 사용해서 데이터를 로드하고, 그 값을 로딩을 하게 될 것인데. 이 부분을 어떻게 구현해야할지 감이 오질 않는다는 점이다.

그리고 지금 제작한 엔딩 데이터를 추후에 엔딩 씬으로 넘겨야하는데. 이 부분도 어떻게 넘겨야하는지 잘 모르겠다.

공부가 더 필요해보인다.


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

 

우선 로딩씬이 슬슬 빨리 제작이 되어야할 것같기에. 이 부분을 제작할 예정이다.

 

'TIL' 카테고리의 다른 글

25.04.16 TIL  (0) 2025.04.16
25.04.15 TIL  (0) 2025.04.15
25.04.11 TIL  (0) 2025.04.11
25.04.10 TIL  (0) 2025.04.10
25.04.09 TIL  (0) 2025.04.09