[개발일지] Box Tengo - 리팩토링. 게임 세팅 Scriptable 화

 

기존방식과 문제점

기존 방식

Monobehavior Script 내 변수에 [SerializeField]를 Attribute를 주어, Inspector에서 조절 가능하게 만들고, GameObject를 생성, 거기에 Script를 Component로 추가한 뒤 조절함

문제점

게임 관련된 상수들이 GameObject에 종속되어, 수정하려면 그 오브젝트가 들어있는 씬으로 들어가, 하이어라키를 뒤져서 Object의 Inspector창을 연 다음 수정할 수 밖에 없었습니다. 
또한 게임에서 밸런스가 필요한 두 값이 다른 Object에 들어가 있는 경우 두 Object를 이동하며 수정해야 합니다.


Obect 자체 코드 또한 길어지게 됩니다.

기존 코드

기타 문제점 정리

1.Play Mode 동안 수정한 값들이 Edit모드로 돌아가면 사라짐.(장점일 수도, 단점일 수도 있음)
2.Setting 세트들  ( ex)총 시간 60초일 때는 따라오는 나머지 세팅값들 set, 30초일 때 밸런스 맞는 나머지 세팅값들 set 등)
3.Setting에 접근하려는 모든 코드가 Setting GameObject를 찾아야함. (static으로 해결 가능)

리팩토링 코드

원래 코드에 변수 선언부에 
public GameConfig _settings;
GameConfig s;
추가

GameConfig.cs
using UnityEngine;

[CreateAssetMenu(menuName = "BoxTengo/Game Config", fileName = "GameConfig.asset")]
public class GameConfig : ScriptableObject
{
    [Header("Time")]
    public float totalTime;
    public float secondTime;
    public float retryTime;
    public float subRetryTime;
    public float minRetryTime;

    [Header("Point")]
    public float allClearPoint;

    [Header("Combo")]
    public float comboTime;
    public float baseMaxComboTime;
    public float plusComboTime;
    public float maxComboTime;
}

저장하고 
Project 창에서 Assets/Config 폴더 아래로 들어가 오른쪽 클릭을 해보면 
Create > Box Tengo  메뉴가 생긴 것을 확인할 수 있습니다.
그 아래 Game Config를 만들고, Inspector에서 값들을 줍니다.

기존 코드에서 해당 변수들을 선언문을 지우고, s.변수 의 형식으로 재지정해줍니다.

결과물




깔끔.

참고자료


Box Tengo 마켓 링크


댓글

이 블로그의 인기 게시물

인디 게임 탐방 - Dictators:No Peace

[Python 텔레그램 봇] 버튼 기능 만들기 - Pt.1 알아둘 것들

구현 방법 탐구 - 'The Looker ' 1.그리기 구현