스테이지 락 언락 하기
public class ClearData
{
public bool[,] stageCleared = new bool[12,6]; //12개의 별자리, 6개의 스테이지
}
각 별자리와 스테이지 불 배열을 만들어준다.
public class GameManager : Singleton<GameManager>
{
public ClearData clearData { get; set; }
private void Start()
{
clearData = new ClearData();
Debug.Log("클리어 데이터 생성 ");
}
싱글톤을 상속받는 게임매니저에 클리어 정보를 생성해준다.
private void Awake()
{
clearData = GameManager.Instance.clearData;
//Debug.Log("스테이지 클리어 정: " + clearData.stageCleared[0, 1]);
Debug.Log("스테이지 클리어 정: " + clearData.stageCleared[0, 2]);
int buttonIndex = 0;
clearData.stageCleared[0, 0] = true; // 첫 번째 별자리의 첫 스테이지는 언락
for (int i = 0; i < clearData.stageCleared.GetLength(0); i++) // 별자리 갯수 만큼 12번 돌리기
{
for(int j = 0; j < clearData.stageCleared.GetLength(1); j++) // 스테이지 갯수 만큼 6번 돌리기
{
Debug.Log("i:" + i);
Debug.Log("j:" + j);
if(buttonIndex >= buttons.Length) // 버튼 수 초과하면 반복 종
{
break;
}
if (clearData.stageCleared[i,j] == false)
{
buttons[buttonIndex].image.color = new Color(1, 1, 1, 0.3f);
buttons[buttonIndex].interactable = false;
}
else
{
buttons[buttonIndex].image.color = new Color(1, 1, 1, 1);
buttons[buttonIndex].interactable = true;
}
buttonIndex++;
}
}
}
스테이지 ui가 나오면 각 스테이지 버튼에 만들어준 스테이지 정보를 넣어주는 작업을 한다.
2중 for문으로 각 별자리와 스테이지를 false로 해 잠궈준다.
첫 별자리의 스테이지는 열어주었다.
public void StageClear()
{
Cursor.lockState = CursorLockMode.None;
UIManager.Instance.Show<UIPopupStageClear>();
ClearData clearData = GameManager.Instance.clearData;
clearData.stageCleared[starIdx, stageIdx] = true;
if(clearData.stageCleared.GetLength(1) > stageIdx) // 현재 스테이지가 6스테이지 보다 작으면
{
clearData.stageCleared[starIdx, stageIdx + 1] = true; // 다음 스테이지 언락
GameManager.Instance.clearData.stageCleared[starIdx, stageIdx + 1] = true;
}
else if(clearData.stageCleared.GetLength(1) == stageIdx) // 현재 스테이지가 6이면,
{
clearData.stageCleared[starIdx + 1, 0] = true; //다음 별 1스테이지 언락
GameManager.Instance.clearData.stageCleared[starIdx + 1, 0] = true;
}
Debug.Log(starIdx + stageIdx);
Debug.Log(GameManager.Instance.clearData.stageCleared[starIdx, stageIdx + 1]);
//GameManager.Instance.OnstageCleared?.Invoke(starIdx, stageIdx + 1);
//Debug.Log(clearData.stageCleared[starIdx, starIdx+1]);
}
던전 매니저에서 스테이지 클리어를 했을 때, 다음 스테이지를 열어주도록 하였다.
박싱 언박싱
박싱(Boxing)이란?
값 형식 (int, double, struct 등)을 참조 형식 (object)으로 변환하는 것을 의미합니다.
박싱과 언박싱의 장단점
박싱에서의 성능저하 (메모리 오버헤드) 언박싱에서의 성능저하(GC)
가비지 컬렉터란?
가비지 컬렉터는 프로그램 실행 중 자동으로 사용되지 않는 동적 메모리를 해제하는 시스템을 말합니다.
C# 어플리케이션의 메모리는 주어진 공간을 순차적으로 채우는 특징 때문에 할당을 반복하면 힙의 마지막 주소에 도달하게 된다. 이때 GC가 필요없는 메모리를 수집하여 해당 공간의 할당을 해제하는데, 이것이 Garbage Collection이다.
마킹(Marking):
작동원리는 굳이
단점에 대해, 해결 방안에 대해 이야기 해야됌.
성능저하, 생성 파괴 될 때 니까 오브젝트 풀링으로 방지가능