Open/unity-release

유니티 구글스프레드시트 연동 (UniGS)

shlifedev 2023. 1. 10. 12:46

UniGS는 개인적으로 인디게임 개발을 위해 만들어서 쓰던 구글시트통합 라이브러리 입니다. 

 

2년 전 Itch.IO에 출시하여 유료로 배포하던 유니티 구글스프레드시트 통합 라이브러리를 최근에 무료로 배포하게 되었습니다. 구글시트를 정말 쉽게 유니티에 통합하고 무엇보다 정말 효율적으로 게임개발에 써먹을 수 있는 UniGS를 소개합니다! 

 

구글시트 통합뿐만 아니라 다양한 강력한 기능을 제공합니다. 한번 사용해보세요!

배포 주소

  • 오픈소스 UPM을 통해 배포하고 있습니다.
  • Itch.IO 에서 무료로 다운로드 하고 잘 사용하고 계시다면 후원도 하실 수 있습니다!

UniGS를 사용해야 하는이유

  • 개발문서를 보고 아래 만화와 글들을 더 재미있게 읽어보세요! 개발문서에 모든것이 설명되어 있습니다.

Live Load 기능을 제공합니다.  

UGS를 사용하면 Live Load 기능을 사용해서 시트에서 데이터를 바꾼 후 변경된 데이터를 게임에서 확인할 수 있습니다. 심지어 오히려 그 반대로 데이터를 시트에 쓸수도 있습니다

당연히 로컬에 캐싱해두고 데이터를 불러올 수도 있습니다.

또한!

  • 시트 데이터를 플레이모드가 아닌 아닌 UnityEditor 에서도 사용 가능합니다.
  • 안드로이드, iOS, WebGL 환경에서도 사용 가능합니다. (플랫폼 제한 없음)
  • 게임, 씬을 재실행 or 빌드 하지 않고도 게임데이터를 변경해서 테스트 할 수 있습니다.
  • 어쨌든(?) 개발자도 기획자도 QA도 모두 행복해집니다. 행복은 가까이에 있어요.

즉 UniGS를 사용하면 시트에서 데이터를 바꾸고 단 몇초면 데이터 변경을 테스트 할 수 있습니다. 모바일에서도 동작하므로 빌드시간이 30분, 1시간 넘어가는 프로젝트라면 이 기능을 적극적으로 사용해보세요. 생각만해도 미소가 지어지지 않나요?

커스텀 타입을 추가할 수 있습니다.  

UniGS에 포함되어있는 TypeChecker(따로 분리한 소스코드) 통해 이 기능을 지원합니다.
게임을 개발하다보면 위치, 회전, 크기정보를 저장할 수 있는 Vector3 타입을 많이 사용할것입니다.

UGS에서는 이런 위치정보를 어떻게 불러올 수 있을까요? 시트에 다음과 같은 데이터가 있다고 가정합니다.

UniGS는 타입의 읽기 쓰기 구현이 추상화된 IType 인터페이스를 상속해서 구현하기만 하면 스프레드시트에서 읽어온 데이터를 읽을 수 있습니다. (상속만 받으면 됩니다.)

예를 들어, 다음과 같이 구현할 수 있습니다.

using UnityEngine; 
namespace Hamster.ZG.Type
{ 
	// 스프레드 시트에 인식할 수 있는 타입을 선언해주기 위한 Attribute
    [Type(typeof(Vector3), new string[] { "vector3", "Vector3", "vec3" })]
    public class Vector3Type : IType
    {
        public object DefaultValue => Vector3.zero;
        /// <summary>
        /// 스프레드 시트에 적혀잇는 값을 파싱한다.
        /// </summary> 
        public object Read(string value)
        {
            var points = Array.ConvertAll(value[1..^1].Split(','), float.Parse);
            var position = new Vector3(points[0], points[1], points[2]);
            return position;
        }

        /// <summary>
        /// 스프레드시트에 값을 쓸때
        /// </summary> 
        public string Write(object value)
        {
            Vector3 v = (Vector3)value;
            return $"[{v.x},{v.y},{v.z}]";
        }
    }
}

이렇게 되면 UniGS는 Vector3 타입의 Read구현을 통해 시트에 적힌 값을 읽을 수 있게됩니다.

Enum또한 지원합니다. 이 링크 를 확인해보세요.

모두에게 친화적입니다.

생각해보면.. 개발자 입장에서도 비개발자 입장에서도 UniGS는 정말 친절합니다.
그 이유를 설명하자면..

구글시트는 직관적입니다!

Json, 텍스트파일, CSV, 엑셀보다는 웹 환경에서 사용하는 구글시트는 정말 편리합니다. 구글시트를 사용하면 시트 데이터 변경을 언제 어디에서나, 누구나 할 수 있습니다. 그리고 구글시트의 모든 기능 (데이터 정렬, 함수, 다른시트 참조 등..) 대부분의 기능을 제약없이 사용해서 개발 할 수 있습니다.

에디터에서 구글 드라이브 익스플로러를 제공해요!


윈도우 폴더 탐색기와 비슷한 구글 폴더 탐색기를 제공합니다. 구글시트 페이지를 열어두지 않아도 되므로 편리합니다.

잘 짜여진 시트 규칙이 있습니다.


시트 룰을 잘 설계하면 게임 개발이 정말 편해집니다. UniGS는 어느 프로젝트, 어느 누구나 쉽게 이해할 수 있는 시트 룰을 사용합니다.

아래에서 기본 시트 템플릿을 확인해보세요! 작성하기 나름입니다.

시트 규칙을 통해 코드 제네레이터를 지원합니다.  

생성된 코드인 아래 사진(좌/우)를 비교해보세요!

여담 + 판매 성적표

2020년에 판매를 시작하고, 올해(2023) 오픈소스로 변경하게 되었습니다. 당시(2020년) 에셋스토어 출시를 하려고 했으나 스토어 검수가 코로나로 인해서 5개월 넘게 지체되었고 검수 완료 메세지를 받았을땐 에셋 이름에 'Unity'가 들어간다고 반려되었기 때문에..

바꿀게 하도 많아서 꺾여버린 에셋스토어 출시 의지..ㅜㅜ

사실 이걸로 큰 돈을 벌 생각은 없었기에 한국 인디게임 개발자를 대상으로만 Itch.io에서만 판매하게 되었고 티스토리에서 판매하고 있었습니다.

추가로, Itch 판매 성적표를 공개합니다! 1370 달러를 벌었네요.

비공개로 한정된 조건으로 판매한 것 치곤 생각보다 잘 팔렸더라구요.. 

저처럼 라이브러리 출시를 목표로 하시는분들은 참고하세요!

첫 Velog 포스트라 미숙할 수 있는점 양해부탁드립니다. (__)
감사합니다.

 

도움된 사이트 (만화 제작) https://www.canva.com/