728x90
반응형
게임 진행상황 save / load 완성
// Save - BoardManager.cs
```csharp
public void SaveProgress()
{
// 생성된 블록 박스 현황
ShapeManager.REF.CheckShapeContainer();
currentProgressData.shapesIndex = new int[3];
currentProgressData.shapesIndex = ShapeInfo.REF.shapesIndex;
currentProgressData.shapeCounter = ShapeManager.REF.shapeCounter;
// 현재 점수
currentProgressData.score = GameHUD.REF.GetScore();
// 현재 콤보 수
currentProgressData.comboState = comboCount;
int index = 0;
int[] matrixArr = new int[boardPanel.childCount];
for (int x = 0; x < size.y; x++)
{
for (int y = 0; y < size.x; y++)
{
matrixArr[index] = matrix[x, y];
index++;
}
}
currentProgressData.matrix = matrixArr;
PlayerPrefs.SetString("gameProgress_" + "Standard", JsonUtility.ToJson(currentProgressData));
}
```
Load
// BoardManager.cs
public void StartBoardManager()
{
if (DataExists(currentGameMode))
{
data = JsonUtility.FromJson<ProgressData>(PlayerPrefs.GetString("gameProgress_" + currentGameMode));
GameHUD.REF.scoreText.text = data.score;
score = int.Parse(data.score);
comboCount = data.comboState;
}
else score = 0;
BoardInitialize();
}
private void BoardInitialize()
{
matrix = new int[size.x, size.y];
matrixHL = new int[size.x, size.y];
matrixWithShadow = new int[size.x, size.y];
boardCells = new GameObject[size.x, size.y];
gridSize = cellWidth * cellPrefabScale;
int index = 0;
//행의 경우 x, 열의 경우 y
for (int x = 0; x < size.y; x++)
{
for (int y = 0; y < size.x; y++)
{
matrix[x, y] = DataExists(currentGameMode) ? data.matrix[index] : 0;
matrixHL[x, y] = 0;
matrixWithShadow[x, y] = 0;
Destroy(boardCells[x, y]);
boardCells[x, y] = CreateBoardCell(x, y, matrix[x, y]);
index++;
}
}
// ShapeManager.cs
public void StartShapeManager()
{
// 저장된 데이터 있는지 확인
if (BoardManager.DataExists(PlayerPrefs.GetString("GameMode"))) CreateSaveShapes();
else CreateShapes();
}
public void CreateSaveShapes()
{
ClearPanels();
ProgressData data = JsonUtility.FromJson<ProgressData>(PlayerPrefs.GetString("gameProgress_" + "Standard"));
shapeCounter = data.shapeCounter;
ShapeInfo.REF.shapesIndex = data.shapesIndex;
for (int i = 0; i < shapesPanel.Length; i++)
{
if (data.shapesIndex[i] == -1) continue;
var shapeSt = ShapeInfo.REF.GetSeletShape(data.shapesIndex[i]);
CreateShape(shapeSt, shapesPanel[i]);
}
SoundManager.REF.PlayBlockShapeResetSound();
BoardManager.REF.GameOverCheck();
}
신기록 달성 시 코드개선
- 기존에 Text Component 2개로 SetActive(true || false) 하던것을 하나로 줄이고 상황에 따라 text값 수정
프레임 끊겨 보이는 현상 개선
- 게임실행시 프레임 120으로 고정 후 약간 개선됨.
- 추후 드래그 부분 개선 필요
public int targetFrameRate = 120;
private void Start()
{
REF = this;
Application.targetFrameRate = targetFrameRate;
//BoardManager.REF.StartBoardManager();
ShowBestScoreHud();
}
리팩토링
- 중복되거나 보기 어려운 코드 개선 및 사용되는 용도 주석으로 표시
728x90
반응형
'개발일지 > TIL' 카테고리의 다른 글
[Unity Devcamp] 0215 개발일지 (0) | 2023.03.21 |
---|---|
[Unity Devcamp] 0214 개발일지 (0) | 2023.03.21 |
[Unity Devcamp] 0212 개발일지 (0) | 2023.03.21 |
[Unity Devcamp] 0210 개발일지 (0) | 2023.03.21 |
[Unity Devcamp] 0208 개발일지 (0) | 2023.03.21 |