최종 프로젝트 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 |