/// <summary>
        /// 스테이지 구성을 위해서 구성정보를 로드한다.
        /// </summary>
        /// <param name="nStage">스테이지 번</param>
        public StageInfo LoadStage(int nStage)
        {
            StageInfo stageInfo = StageReader.LoadStage(nStage);

            if (stageInfo != null)
            {
                Debug.Log(stageInfo.ToString());
            }

            return(stageInfo);
        }
        /// <summary>
        /// 스테이지 구성을 위해서 구성정보를 로드한다.
        /// </summary>
        /// <param name="nStage"> 스테이지 번호</param>
        /// <returns></returns>
        public static StageInfo LoadStage(int nStage)
        {
            Debug.Log($"Load Stage : Stage/{GetFileName(nStage)}");

            //1. 리소스 파일에서 텍스트를 읽어온다.
            TextAsset textAsset = Resources.Load <TextAsset>($"Stage/{GetFileName(nStage)}");

            if (textAsset != null)
            {
                //2. JSON 문자열을 객체(StageInfo)로 변환한다.
                StageInfo stageInfo = JsonUtility.FromJson <StageInfo>(textAsset.text);

                //3. 변환된 객체가 유효한지 체크한다(only Debugging)
                Debug.Assert(stageInfo.DoValidation());

                return(stageInfo);
            }

            return(null);
        }
        /// <summary>
        /// 주어진 크기의 Stage를 생성하고,  Stage를 구성하는 보드의 Cell과 Block을 구성한다
        /// </summary>
        /// <returns>생성된 Stage 객체</returns>
        public Stage ComposeStage()
        {
            Debug.Assert(m_nStage > 0, $"Invalide Stage : {m_nStage}");

            //0. 스테이지 정보를 로드한다.(보드 크기, Cell/블럭 정보 등)
            m_StageInfo = LoadStage(m_nStage);

            //1. Stage 객체를 생성한다.
            Stage stage = new Stage(this, m_StageInfo.row, m_StageInfo.col);

            //2. Cell,Block 초기 값을 생성한다.
            for (int nRow = 0; nRow < m_StageInfo.row; nRow++)
            {
                for (int nCol = 0; nCol < m_StageInfo.col; nCol++)
                {
                    stage.blocks[nRow, nCol] = SpawnBlockForStage(nRow, nCol);
                    stage.cells[nRow, nCol]  = SpawnCellForStage(nRow, nCol);
                }
            }

            return(stage);
        }