개발일지/TIL

[Unity Devcamp] 0213 개발일지

JangKroed 2023. 3. 21. 20:56
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
반응형