1. 오늘 학습 키워드
엔딩 연결해주기, 상단바 UI제작
2. 오늘 학습 한 내용을 나만의 언어로 정리하기
코드로 작성한 부분은 별로 없어서, 쓸 내용이 많지는 않다만
우선 Memory로 작성했던 내용을 상단바에 넣을 내용이기에, 코드를 옮겨줬다.
오브젝트 하나하나를 관리하는 것보다 큰 UI에 담아서 한번에 관리해주었다.
아직 코드적으로 완성이 되진 않았지만,
덱과 체력 그리고 메모리, 유물까지 관리를 해줄 상단 바이다.
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.UI;
public class UpperBar : MonoBehaviour
{
private DataManager DM;
[Header("HP")]
private TextMeshProUGUI text;
[Header("Booty")]private List<Image> Slots = new();
[Header("Memory")] public GameObject memory;
[SerializeField] private Transform content;
private List<GameObject> pool = new ();
public List<MemorySO> memoryList;
[Header("Deck")] public List<CardSO> cardList;
private void Init()
{
memoryList = new List<MemorySO>(DM.Memories.Values);
cardList = new List<CardSO>(DM.cardList);
}
void Start()
{
DM = Manager.Instance.DataManager;
Init();
InitPool();
InitButton();
LoadMemoryList();
}
private void InitButton()
{
Button btn = transform.Find("MemoryBtn")?.GetComponent<Button>();
Button btn2 = transform.Find("CardBtn")?.GetComponent<Button>();
btn?.onClick.AddListener(LoadMenoryCollection);
btn2?.onClick.AddListener(LoadDeckCollection);
}
public void AddToCollection(MemorySO so)
{
DM.Memories.Add(so.Index,so);
}
public void InitPool() //초기 풀 생성
{
for (int i = 0; i < memoryList.Count; i++)
{
GameObject obj = Instantiate(memory, content);
obj.SetActive(false);
pool.Add(obj);
}
}
public void LoadDeckCollection() //수집품 열기
{
ReturnAllPanels();
foreach (var kvp in DM.Memories)
{
var so = kvp.Value;
var panelObj = GetPanel();
var ui = panelObj.GetComponent<CardSO>();
ui.Setup(so, this,false);
}
}
public void LoadMenoryCollection() //수집품 열기
{
ReturnAllPanels();
foreach (var kvp in DM.Memories)
{
var so = kvp.Value;
var panelObj = GetPanel();
var ui = panelObj.GetComponent<MemoryCard>();
ui.Setup(so, this,false);
}
}
private void LoadMemoryList()
{
var handle = Addressables.LoadAssetsAsync<MemorySO>("MemoryData", so =>
{
memoryList.Add(so);
}); handle.Completed += result =>
{
if (result.Status == AsyncOperationStatus.Succeeded)
{
Debug.Log("Memory SOs Loaded!");
InitPool();
}
};
}
public GameObject GetPanel() //패널 사용시 사용하는 메서드
{
foreach (GameObject obj in pool)
{
if (!obj.activeInHierarchy)
{
obj.SetActive(true);
return obj;
}
}
GameObject newObj = Instantiate(memory, content);
pool.Add(newObj);
return newObj;
}
public void ReturnAllPanels() // 모든 패널 비활성화
{
foreach (GameObject obj in pool)
{
obj.SetActive(false);
}
}
public void ShowRandomMemories() //테스트용 메모리 카드 띄우기
{
ReturnAllPanels();
int count = Mathf.Min(memoryList.Count, memoryList.Count);
var chosen = new HashSet<int>();
while (chosen.Count < count)
{
int idx = Random.Range(0, memoryList.Count);
chosen.Add(idx);
}
foreach (int idx in chosen)
{
var panelObj = GetPanel();
var ui = panelObj.GetComponent<MemoryCard>();
ui.Setup(memoryList[idx], this, true);
}
}
public void ResetAllMemories() //다시 시작시에 스택 값과 수집품 초기화
{
foreach (var kvp in DM.Memories)
{
var m = kvp.Value;
m.Stack = 0;
}
DM.Memories.Clear();
}
}
그리고 팀원분이 작성해준 코드를 사용해서, 조건에 부합하면 엔딩으로 향하게 제작했다.
3. 학습하며 겪었던 문제점 & 에러
시간이 왜 24시간일까
4. 내일 학습 할 것은 무엇인지
우선 상단 UI바를 제작하고, 특정 씬일때엔 해당 UI바의 오브젝트 중 일부를 비활성화 처리도 해줘야하고
캐릭터 데이터를 데이터 매니저에 넣어줘서, 무슨 진영을 선택했는지까지 해야한다.
'TIL' 카테고리의 다른 글
25.04.25 TIL (0) | 2025.04.25 |
---|---|
25.04.24 TIL (0) | 2025.04.24 |
25.04.22 TIL (0) | 2025.04.22 |
25.04.21 TIL (0) | 2025.04.21 |
25.04.18 TIL (0) | 2025.04.18 |