
이 페이지는 전자책 Unity에서 ScriptableObjects로 모듈형 게임 아키텍처 만들기의 동반 데모 프로젝트인 PaddleBallSO에 대한 개요를 제공하며, 코드 아키텍처에서 디자인 패턴과 모듈성을 어떻게 사용하는지 설명합니다.
이것은 전자책에 동반되는 데모를 지원하기 위해 Unity 개발자를 돕기 위해 만들어진 6개의 미니 가이드 시리즈 중 첫 번째입니다. 이 데모는 고전적인 공과 패들 아케이드 게임 메커니즘에서 영감을 받았으며, ScriptableObjects가 테스트 가능하고 확장 가능하며 디자이너 친화적인 구성 요소를 만드는 데 어떻게 도움이 되는지를 보여줍니다.
전자책, 데모 프로젝트 및 이러한 미니 가이드는 Unity 프로젝트에서 ScriptableObject 클래스와 함께 프로그래밍 디자인 패턴을 사용하는 모범 사례를 제공합니다. 이 팁은 코드를 단순화하고, 메모리 사용량을 줄이며, 코드 재사용성을 촉진하는 데 도움이 될 수 있습니다.
이 시리즈에는 다음 기사가 포함됩니다:
스크립터블 오브젝트 데모 프로젝트와 이 미니 가이드 시리즈에 들어가기 전에, 디자인 패턴의 핵심은 단지 아이디어라는 것을 기억하세요. 모든 상황에 적용되지 않을 것입니다. 이 기술들은 Unity와 ScriptableObjects를 다루는 새로운 방법을 배우는 데 도움이 될 수 있습니다.
각 패턴은 장단점이 있습니다. 특정 프로젝트에 의미 있게 도움이 되는 것만 선택하세요. 디자이너들이 Unity Editor에 많이 의존하나요? 스크립터블 오브젝트 기반 패턴은 그들이 개발자와 협력하는 데 도움이 될 수 있는 좋은 선택이 될 수 있습니다.
궁극적으로, 최고의 코드 아키텍처는 귀하의 프로젝트와 팀에 맞는 것입니다.

PaddleBallSO는 현대 비디오 게임의 탄생을 가져온 고전 게임을 중심으로 하며, 두 명의 플레이어, 두 개의 패들, 그리고 하나의 공이 특징입니다.
여기서 강조하는 것은 게임 메커니즘보다는 인프라입니다. 이것을 "게임 배관"이라고 생각하세요 - 덜 화려하지만 애플리케이션을 실행하는 데 필수적인 기초입니다.
이 프로젝트는 스크립터블 오브젝트가 어떻게 비하인드 씬에서 통합된 애플리케이션을 구축하는 데 작용할 수 있는지에 중점을 둡니다. 이들을 사용하여 프로젝트 유지 관리를 단순화하고 코드 재사용성을 촉진할 수 있는 다목적 게임 시스템을 구축하세요. 플레이어 데이터, 게임 상태 관리, 인게임 행동 등에도 사용할 수 있습니다.
PaddleBallSO 프로젝트는 현재 2022 LTS의 최신 Unity Long Term Support (LTS) 버전과 호환됩니다. 런타임 UI를 생성하기 위해 UI 툴킷을 통합하고, 사용자 입력을 처리하기 위해 입력 시스템을 사용합니다.

GitHub repository에서 프로젝트를 찾아 다운로드하세요.
게임 시스템 메뉴에서 부트로더 장면을 로드하거나 재생 시 부트스트랩 장면 로드를 활성화하십시오. 재생 모드에 들어가 시작하십시오.
이것들은 ScriptableObjects에 특정한 것은 아니지만, 데모 프로젝트는 게임 애플리케이션을 일관되고 예측 가능한 상태로 시작하는 데 도움이 되는 몇 가지 일반적인 기술을 사용합니다.
장면 부트스트래퍼 (또는 부트로더)는 게임의 초기 상태를 설정하는 책임이 있는 에디터 확장 스크립트입니다. 이 초기화 코드는 게임 로직과 분리되어 있으며, 장면의 객체에 대한 모든 종속성이 올바르게 설정되도록 보장합니다.
종속성 문제를 피하기 위해, 부트스트래퍼는 장면이 로드될 때 필수 게임 객체, 관리자 또는 서비스를 구성합니다.
Unity 애플리케이션이 여러 장면에 걸쳐 있는 경우, 부트로더는 빌드 설정의 첫 번째 장면인 특정 부트스트랩 장면을 강제로 로드할 수 있습니다. 재생 모드를 종료할 때, 에디터는 이전 장면을 다시 로드합니다.
부트스트랩 장면의 또 다른 구성 요소인 시퀀스 관리자는 장면 로드 시 필수 프리팹을 인스턴스화할 수 있습니다. 이 특정 데모 프로젝트에서 게임을 만들기 위해 필요한 모든 것은 카메라, 스플래시 화면, UI 메뉴 및 장면 로더를 포함한 프리팹입니다.
장면 로더는 필요에 따라 게임 플레이 장면을 추가적으로 로드(및 언로드)합니다. 대부분의 경우, 이러한 장면은 주로 프리팹으로 구성됩니다.
프로젝트 장면
각 미니 게임 레벨은 별도의 Unity 장면이며 빌드 설정에 나타납니다. 개별 장면을 탐색하려면 게임 시스템 메뉴에서 SceneBootstrapper를 비활성화하십시오.
많은 프로젝트는 부트스트랩 장면 이후에 메인 메뉴를 위한 스테이징 영역도 포함합니다. 이 간소화된 데모 프로젝트는 메인 메뉴 장면을 생략합니다.

재생 및 패턴 메뉴를 사용하여 패들볼SO를 테스트하십시오. 여기에는 다음이 포함됩니다:
코어 폴더에는 기본 패턴 스크립트, 장면 관리 및 UI 로직과 같은 애플리케이션 비특정 코드베이스의 부분이 포함되어 있습니다. 이들은 다양한 애플리케이션에 적용될 수 있는 보다 일반적인 클래스입니다.

샘플 게임은 상징적인 2D 물리 시뮬레이션을 재현하고 ScriptableObject 기반 디자인 패턴의 잠재력을 보여줍니다.
패턴에 뛰어들기 전에 애플리케이션을 구성하는 MonoBehaviour에 익숙해지는 것이 좋습니다. 예상할 수 있듯이, Paddle, Ball, Bouncer 및 ScoreGoal 스크립트와 같은 구성 요소는 기본 게임 플레이를 지배합니다.
여러 고급 관리자 스크립트가 게임 흐름을 제어합니다:
이 MonoBehaviour는 ScriptableObject와 함께 작동합니다. 이들은 이러한 구성 요소가 서로 통신하고 데이터를 공유할 수 있도록 연결하는 중요한 역할을 합니다.
이벤트는 프로젝트의 다양한 부분 간의 통신에 필수적입니다. 이들은 이러한 관리자 스크립트를 다른 장면 객체 및 사용자 인터페이스와 연결합니다. 이 이벤트 기반 아키텍처는 코드를 더 조직적이고 디버깅하기 쉽게 만드는 데 도움이 될 수 있습니다.
가장 일반적인 ScriptableObject 패턴에 대한 간소화된 데모 예제를 제공했습니다. 이들에 익숙해지면 ScriptableObject가 미니게임 아키텍처의 기초가 되는 방식을 인식하기 시작할 것입니다.
특집 미니게임을 훨씬 적은 코드 줄로 만들 수 있었지만, 이 데모는 특히 ScriptableObject와 함께 디자인 패턴에 중점을 두고 있습니다. ScriptableObject 없이도 이러한 패턴 중 많은 것을 구현할 수 있다는 점에 유의하세요.
각 패턴이 프로젝트에 어떻게 적용될 수 있을지 팀으로 결정하고, 여러분에게 가장 적합한 접근 방식을 선택하세요.

소프트웨어 개발에서 모듈화는 애플리케이션을 더 작고 독립적인 조각으로 나누는 것을 포함합니다. 이 모듈들은 특정 목적을 수행하며 별도로 개발하고 테스트할 수 있습니다.
각 작은 객체 집합은 하나의 단위로 기능하며 게임의 한 측면을 처리합니다. 이것은 플레이어 입력 제어, 물리 처리 또는 점수 집계와 같은 어떤 것이든 될 수 있습니다.
프로젝트 스크립트를 탐색할 때 다음의 주요 사항에 주의하세요:
대규모 단일 스크립트를 더 작은 조각으로 리팩토링하면 재사용성과 확장성을 촉진합니다. 이는 팀 협업을 개선하고 테스트를 단순화합니다.

우리는 스크립터블 오브젝트 사용 사례를 보여주기 위해 PaddleBallSO 프로젝트를 만들었습니다. 다음은 이들이 작동하는 몇 가지 특정 장소입니다:
몇 가지 추가 사항을 위해 디자인 패턴 데모를 꼭 확인하세요!

스크립터블 오브젝트는 게임 데이터를 저장하고 작업 흐름을 간소화하는 강력한 도구가 될 수 있지만, 프로젝트가 복잡해지지 않도록 효과적으로 사용하는 것이 중요합니다.
유니티에서 스크립터블 오브젝트를 사용할 때의 몇 가지 모범 사례는 다음과 같습니다:
이 가이드라인을 따르면 일반적인 개발 함정을 피할 수 있습니다.

ScriptableObjects와 함께하는 디자인 패턴에 대한 자세한 내용은 전자책 'ScriptableObjects로 Unity에서 모듈식 게임 아키텍처 만들기'를 참조하세요. 전자책 '게임 프로그래밍 패턴으로 코드를 향상시키기'에서 일반적인 Unity 개발 디자인 패턴에 대한 자세한 내용을 찾을 수 있습니다.