본문 바로가기

GameDevelopmentDiary/PuzzleGame

3 Match 장르 게임 2 (4-6일차 총 10시간)

진행 상황: 범위 확장(3Match Game -> 3Match Game & Editor) 및 타일 브러시

 

< 에디터 모드에서의 타일 브러시 기능 테스트 >

 

현재 사용되는 클래스

  Engine

    - TileManagerGUI : EditorWindow (맵 생성 변수 조절)

    - PuzzleManager : MonoBehaviour (퍼즐 변수 관리)

        - TileMapComponent : MonoBehaviour (맵 생성 및 타일들 관리)

            - RestedTiles (타일 게임 오브젝트 풀링)

            - TileComponent : MonoBehaviour

    - UIManager : MonoBehaviour

            - BrushButtonsWidget

    - CursorComponent

 

목표작업에서의 변경사항

  타일 생성에 관련된 옵션을 추가하려던 중, 사용자가 일일히 타일을 설정 가능해야하다고 생각했기에 단순히 맵 생성 옵션 추가보다, 에디터 기능을 먼저 구현하기로 했다.

 


이전 계획이 아닌데 진행된 부분
  에디터/플레이 모드 변환 기능

  에디터 모드에서의 타일 브러시 기능

  일부 Index급 클래스에 싱글톤 패턴 추가(PuzzleManager, UIManager)

 

  싱글톤 사용 예)

더보기

UIManager 호출이 반복문에서 사용되는 경우, 유니티의 탐색 함수(GameObject.Find)를 사용하거나 매번 없으면 새로 생성하는 구문을 추가하고 싶지 않았다. 

//UIManager.cs

public class UIManager : MonoBehaviour
{
    #region instance
    private static UIManager _instance;
    public static UIManager instance
    {
        get
        {
            {
                if (_instance == null)
                {
                    GameObject obj = GameObject.Find("Canvas");
                    if (obj == null)
                    {
                        obj = new GameObject("Canvas");
                        obj.AddComponent<UIManager>();
                    }
                    return obj.GetComponent<UIManager>();
                }
                else
                {
                    return _instance;
                }
            }
        }
    }
    #endregion
    
    // ...
    
}
// BrushButtonsWidget.cs

foreach (var type in tileTypeList.Select((value, index) => (value, index)))
{
    GameObject brushButton = new GameObject();
    brushButton.name = "BrushButton_" + type.index.ToString();
    brushButton.transform.SetParent(UIManager.instance.mainCanvas.transform);

    brushButton.AddComponent<Image>().sprite = spriteArr[0];
    brushButton.AddComponent<Button>().onClick.AddListener(() => { selectedBrush = brushButton; });

    brushButton.GetComponent<RectTransform>().anchoredPosition = new Vector2(10.0f, 10.0f + (type.index * brushSize.y * 0.5f));
    brushButton.GetComponent<RectTransform>().anchorMin = Vector2.zero;
    brushButton.GetComponent<RectTransform>().anchorMax = Vector2.zero;
    brushButton.GetComponent<RectTransform>().pivot = brushPivot;
    brushButton.GetComponent<RectTransform>().sizeDelta = brushSize;

    brushButtonList.Add(brushButton);
}

 

 


변경된 다음 계획

  타일 브러시 - UX 수정 (드레그 말고 Ctl+Click 으로 직선 그리기, 위치 및 테스트 아이콘 추가)

  맵 저장/불러오기 - 에디터에서 만든 타일 맵을 Json 형식으로 로컬폴더에 저장/불러오기