• 게임
  • 산업 분야
  • 리소스
  • 커뮤니티
  • 학습
  • 문의하기
개발
Unity 엔진
모든 플랫폼 위한 2D 및 3D 게임 제작
다운로드플랜 및 가격
수익화
인앱 결제/인앱 구매(IAP)
스토어 간 IAP 검색 및 관리
Mediation
수익 / 매출 극대화 및 수익화 / 수익 창출 최적화(하다)
Ad Quality
앱 유저. '광고 지면'의 타겟 고객 경험 보호
탭조이
장기적인 유저. '광고 지면'의 타겟 고객 충성도 구축
모든 수익화 / 수익 창출 제품
사용자 확보
사용자 확보
모바일 사용자를 검색하고 Acquire
Unity 벡터 AI
적합한 게임으로 플레이어 연결
Aura 디바이스 단위 광고
최대 참여/인게이지먼트 시 기기 내 사용자 도달률
모든 성장 제품
활용 부문
3D 협업
실시간 3D 프로젝트 빌드 및 검토
몰입형 교육
몰입도 높은 환경 제작
고객 경험
인터랙티브 3D 경험 제작
모든 업계 솔루션
산업 분야
제조업
운영 우수성 확보
리테일
상점 경험을 온라인 경험으로 전환
자동차
혁신 및 차량 내 경험 향상
전체 산업 분야
테크니컬 라이브러리
기술 자료
공식 유저. '광고 지면'의 타겟 고객 매뉴얼 및 API 레퍼런스
개발자 툴
릴리스 버전 및 이슈 트래커
로드맵
예정된 기능 검토
용어집
기술 용어 라이브러리
분석 자료
활용 사례
실제 성공 사례
베스트 프랙티스 가이드
전문가 팁
모든 리소스
새로운 기능
블로그
업데이트, 정보, 기술 팁
뉴스
뉴스, 스토리, 보도 센터
커뮤니티 허브
토론
토론, 문제 해결, 소통
이벤트
글로벌 이벤트 및 현지 이벤트
커뮤니티 사례
Made with Unity
Unity 크리에이터 소개
Livestreams
개발자, 크리에이터, Insider와의 소통
Unity Awards
전 세계 Unity 크리에이터 축하
모든 레벨 지원
Unity Learn
무료로 Unity 기술 마스터
전문 교육
Unity 강사와 함께 팀의 역량을 강화하세요
Unity 처음 사용하시나요
시작하기
학습 시작하기
Unity 필수 학습 길잡이
Unity 사용이 처음이신가요? 여정 시작하기
사용법 가이드
실용적인 팁 및 베스트 프랙티스
교육
학생용
커리어 시작하기
교육 담당자 대상 교육
교육 효율 극대화
교육 라이선스
교육 기관에 Unity 강력한 기능 도입
자격증
Unity 숙련도를 입증하세요
지원 옵션
도움 받기
성공을 위한 Unity
Success 플랜
전문가 지원을 통해 더 빠르게 목표 도달률 달성
FAQ
일반적인 질문에 대한 답변
문의하기
유니티 팀과 소통하기
플랜 및 가격
언어
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
소셜
통화
구매
  • 제품
  • 유니티 애즈
  • 구독
  • Unity 에셋 스토어
  • 리셀러
교육
  • 학생
  • 교육 담당자
  • 기관
  • 인증 시험
  • 레벨업 아카데미
  • Skills Development Program
다운로드
  • Unity Hub
  • 다운로드 아카이브
  • 베타 프로그램
Unity Labs
  • Labs
  • Publications
리소스
  • Unity 학습 플랫폼
  • 커뮤니티
  • 기술 자료
  • Unity QA
  • FAQ
  • Services Status
  • 활용 사례
  • Made with Unity
Unity
  • 회사
  • 뉴스레터
  • 블로그
  • 이벤트
  • 채용 정보
  • 도움말
  • Press
  • 파트너
  • 투자자
  • 어필리에이트
  • 보안
  • 소셜 임팩트
  • Inclusion & Diversity
  • 문의하기
Copyright © 2025 Unity Technologies
  • 법적 고지 사항
  • 개인정보처리방침
  • 쿠키
  • 개인정보 판매 또는 공유 금지

'Unity', Unity 로고 및 기타 Unity 상표는 미국 및 기타 국가에서 유니티 테크놀로지스 또는 계열사의 상표 또는 등록상표입니다(여기에서 자세한 정보 확인). 기타 명칭 또는 브랜드는 해당 소유자의 상표입니다.

Hero background image

Unity ScriptableObjects 데모를 시작하세요

이 웹페이지는 이해를 돕기 위해 기계 번역으로 제공됩니다. 기계 번역으로 제공되는 콘텐츠에 대한 정확도나 신뢰도는 보장되지 않습니다. 번역된 콘텐츠의 정확도에 관해 의문이 있는 경우 웹페이지의 공식 영어 원문을 참고해 주시기 바랍니다.
여기를 클릭하세요.

이 페이지는 전자책 Unity에서 ScriptableObjects로 모듈형 게임 아키텍처 만들기의 동반 데모 프로젝트인 PaddleBallSO에 대한 개요를 제공하며, 코드 아키텍처에서 디자인 패턴과 모듈성을 어떻게 사용하는지 설명합니다.

이것은 전자책에 동반되는 데모를 지원하기 위해 Unity 개발자를 돕기 위해 만들어진 6개의 미니 가이드 시리즈 중 첫 번째입니다. 이 데모는 고전적인 공과 패들 아케이드 게임 메커니즘에서 영감을 받았으며, ScriptableObjects가 테스트 가능하고 확장 가능하며 디자이너 친화적인 구성 요소를 만드는 데 어떻게 도움이 되는지를 보여줍니다.

전자책, 데모 프로젝트 및 이러한 미니 가이드는 Unity 프로젝트에서 ScriptableObject 클래스와 함께 프로그래밍 디자인 패턴을 사용하는 모범 사례를 제공합니다. 이 팁은 코드를 단순화하고, 메모리 사용량을 줄이며, 코드 재사용성을 촉진하는 데 도움이 될 수 있습니다.

이 시리즈에는 다음 기사가 포함됩니다:

  • ScriptableObjects로 게임 데이터와 로직을 분리하기
  • Unity 프로젝트에서 ScriptableObject 기반 열거형 사용하기
  • ScriptableObjects를 위임 객체로 사용하기
  • 게임 코드에서 ScriptableObjects를 이벤트 채널로 사용하기
  • ScriptableObject 기반 런타임 세트 사용 방법
  • 시작하기 전에 중요한 참고 사항
  • 패들 볼 ScriptableObject 프로젝트
  • 시작하기
  • PaddleBallSO 프로젝트 개요
  • 패턴 및 미니 게임 탐색
  • 모듈형 게임 아키텍처
  • 작동 중인 ScriptableObjects
  • ScriptableObjects에 대한 6가지 모범 사례
  • 더 많은 ScriptableObject 리소스

시작하기 전에 중요한 참고 사항

스크립터블 오브젝트 데모 프로젝트와 이 미니 가이드 시리즈에 들어가기 전에, 디자인 패턴의 핵심은 단지 아이디어라는 것을 기억하세요. 모든 상황에 적용되지 않을 것입니다. 이 기술들은 Unity와 ScriptableObjects를 다루는 새로운 방법을 배우는 데 도움이 될 수 있습니다.

각 패턴은 장단점이 있습니다. 특정 프로젝트에 의미 있게 도움이 되는 것만 선택하세요. 디자이너들이 Unity Editor에 많이 의존하나요? 스크립터블 오브젝트 기반 패턴은 그들이 개발자와 협력하는 데 도움이 될 수 있는 좋은 선택이 될 수 있습니다.

궁극적으로, 최고의 코드 아키텍처는 귀하의 프로젝트와 팀에 맞는 것입니다.

패들볼

패들 볼 ScriptableObject 프로젝트

PaddleBallSO는 현대 비디오 게임의 탄생을 가져온 고전 게임을 중심으로 하며, 두 명의 플레이어, 두 개의 패들, 그리고 하나의 공이 특징입니다.

여기서 강조하는 것은 게임 메커니즘보다는 인프라입니다. 이것을 "게임 배관"이라고 생각하세요 - 덜 화려하지만 애플리케이션을 실행하는 데 필수적인 기초입니다.

이 프로젝트는 스크립터블 오브젝트가 어떻게 비하인드 씬에서 통합된 애플리케이션을 구축하는 데 작용할 수 있는지에 중점을 둡니다. 이들을 사용하여 프로젝트 유지 관리를 단순화하고 코드 재사용성을 촉진할 수 있는 다목적 게임 시스템을 구축하세요. 플레이어 데이터, 게임 상태 관리, 인게임 행동 등에도 사용할 수 있습니다.

PaddleBallSO 프로젝트는 현재 2022 LTS의 최신 Unity Long Term Support (LTS) 버전과 호환됩니다. 런타임 UI를 생성하기 위해 UI 툴킷을 통합하고, 사용자 입력을 처리하기 위해 입력 시스템을 사용합니다.

PaddleBallSO 다운로드
부트로더

시작하기

GitHub repository에서 프로젝트를 찾아 다운로드하세요.

게임 시스템 메뉴에서 부트로더 장면을 로드하거나 재생 시 부트스트랩 장면 로드를 활성화하십시오. 재생 모드에 들어가 시작하십시오.

이것들은 ScriptableObjects에 특정한 것은 아니지만, 데모 프로젝트는 게임 애플리케이션을 일관되고 예측 가능한 상태로 시작하는 데 도움이 되는 몇 가지 일반적인 기술을 사용합니다.

장면 부트스트래퍼 (또는 부트로더)는 게임의 초기 상태를 설정하는 책임이 있는 에디터 확장 스크립트입니다. 이 초기화 코드는 게임 로직과 분리되어 있으며, 장면의 객체에 대한 모든 종속성이 올바르게 설정되도록 보장합니다.

종속성 문제를 피하기 위해, 부트스트래퍼는 장면이 로드될 때 필수 게임 객체, 관리자 또는 서비스를 구성합니다.

Unity 애플리케이션이 여러 장면에 걸쳐 있는 경우, 부트로더는 빌드 설정의 첫 번째 장면인 특정 부트스트랩 장면을 강제로 로드할 수 있습니다. 재생 모드를 종료할 때, 에디터는 이전 장면을 다시 로드합니다.

부트스트랩 장면의 또 다른 구성 요소인 시퀀스 관리자는 장면 로드 시 필수 프리팹을 인스턴스화할 수 있습니다. 이 특정 데모 프로젝트에서 게임을 만들기 위해 필요한 모든 것은 카메라, 스플래시 화면, UI 메뉴 및 장면 로더를 포함한 프리팹입니다.

장면 로더는 필요에 따라 게임 플레이 장면을 추가적으로 로드(및 언로드)합니다. 대부분의 경우, 이러한 장면은 주로 프리팹으로 구성됩니다.

프로젝트 장면

각 미니 게임 레벨은 별도의 Unity 장면이며 빌드 설정에 나타납니다. 개별 장면을 탐색하려면 게임 시스템 메뉴에서 SceneBootstrapper를 비활성화하십시오.

많은 프로젝트는 부트스트랩 장면 이후에 메인 메뉴를 위한 스테이징 영역도 포함합니다. 이 간소화된 데모 프로젝트는 메인 메뉴 장면을 생략합니다.

tab5

PaddleBallSO 프로젝트 개요

재생 및 패턴 메뉴를 사용하여 패들볼SO를 테스트하십시오. 여기에는 다음이 포함됩니다:

  • 디자인 패턴 데모 또는 특정 기술을 보여주고 각 패턴을 고립하여 설명하는 간단한 예제
  • 미니게임은 이를 결합하여 기능적이고 작동하는 샘플을 만듭니다.

코어 폴더에는 기본 패턴 스크립트, 장면 관리 및 UI 로직과 같은 애플리케이션 비특정 코드베이스의 부분이 포함되어 있습니다. 이들은 다양한 애플리케이션에 적용될 수 있는 보다 일반적인 클래스입니다.

tab10

패턴 및 미니 게임 탐색

샘플 게임은 상징적인 2D 물리 시뮬레이션을 재현하고 ScriptableObject 기반 디자인 패턴의 잠재력을 보여줍니다.

패턴에 뛰어들기 전에 애플리케이션을 구성하는 MonoBehaviour에 익숙해지는 것이 좋습니다. 예상할 수 있듯이, Paddle, Ball, Bouncer 및 ScoreGoal 스크립트와 같은 구성 요소는 기본 게임 플레이를 지배합니다.

여러 고급 관리자 스크립트가 게임 흐름을 제어합니다:

  • 게임매니저는 게임 상태(시작, 종료, 재설정)를 제어하고, 게임 구성 요소를 초기화하며, UI를 관리하고, 이벤트에 응답합니다.
  • 게임설정은 GameManager와 함께 공, 패들, 벽 및 목표를 설정합니다.
  • 점수관리자는 점수 값을 업데이트하고, 게임 이벤트를 처리하며, 점수 표시를 위한 UI 업데이트를 제어합니다.

이 MonoBehaviour는 ScriptableObject와 함께 작동합니다. 이들은 이러한 구성 요소가 서로 통신하고 데이터를 공유할 수 있도록 연결하는 중요한 역할을 합니다.

이벤트는 프로젝트의 다양한 부분 간의 통신에 필수적입니다. 이들은 이러한 관리자 스크립트를 다른 장면 객체 및 사용자 인터페이스와 연결합니다. 이 이벤트 기반 아키텍처는 코드를 더 조직적이고 디버깅하기 쉽게 만드는 데 도움이 될 수 있습니다.

가장 일반적인 ScriptableObject 패턴에 대한 간소화된 데모 예제를 제공했습니다. 이들에 익숙해지면 ScriptableObject가 미니게임 아키텍처의 기초가 되는 방식을 인식하기 시작할 것입니다.

특집 미니게임을 훨씬 적은 코드 줄로 만들 수 있었지만, 이 데모는 특히 ScriptableObject와 함께 디자인 패턴에 중점을 두고 있습니다. ScriptableObject 없이도 이러한 패턴 중 많은 것을 구현할 수 있다는 점에 유의하세요.

각 패턴이 프로젝트에 어떻게 적용될 수 있을지 팀으로 결정하고, 여러분에게 가장 적합한 접근 방식을 선택하세요.

PaddleBallSO 다운로드
tanb22

모듈형 게임 아키텍처

소프트웨어 개발에서 모듈화는 애플리케이션을 더 작고 독립적인 조각으로 나누는 것을 포함합니다. 이 모듈들은 특정 목적을 수행하며 별도로 개발하고 테스트할 수 있습니다.

각 작은 객체 집합은 하나의 단위로 기능하며 게임의 한 측면을 처리합니다. 이것은 플레이어 입력 제어, 물리 처리 또는 점수 집계와 같은 어떤 것이든 될 수 있습니다.

프로젝트 스크립트를 탐색할 때 다음의 주요 사항에 주의하세요:

  • 프리팹에서 장면 구성하기: 프로젝트의 대부분의 장면은 최소한의 오버라이드가 있는 프리팹의 모음이라는 것을 알 수 있습니다. 프리팹은 본질적으로 모듈성의 수준을 제공합니다. 기능 문제 해결은 특정 프리팹을 독립적으로 테스트하는 문제입니다. 스크립터블 오브젝트와 마찬가지로, 프리팹은 여러 장면에서 재사용되고 공유될 수 있는 프로젝트 수준 자산입니다.
  • 데이터 저장을 위해 스크립터블 오브젝트 사용하기 (및 그 이상): 정적 게임플레이 데이터를 저장하기 위해 모노비헤이비어를 사용하지 마세요. 대신, 더 나은 재사용성을 위해 스크립터블 오브젝트를 활용하세요. 특정 게임 로직을 스크립터블 오브젝트에 위임하거나 장면 객체 간의 통신을 촉진하도록 할 수 있습니다.
  • 관심사 분리: 프로젝트에서 데이터, 로직 및 사용자 인터페이스 간의 명확한 구분을 유지하세요. 이것은 코드 유지 보수성을 향상시키고 디버깅을 단순화합니다. 우리의 메뉴 화면 시스템은 최신 UI 툴킷을 활용합니다. 이 UI 시스템은 인터페이스를 그 기본 로직과 분리하는 워크플로우를 강제합니다. 자세한 내용은 유니티의 사용자 인터페이스 디자인 및 구현 전자책을 확인하세요.
  • 의존성 최소화: 구성 요소 간의 의존성을 줄이면 예기치 않은 문제를 일으키지 않고 프로젝트의 일부를 수정하거나 교체하기가 더 쉬워집니다.
  • 통신을 위한 이벤트 사용: 이벤트는 구성 요소 간의 느슨한 결합을 가능하게 하여 서로 직접적인 의존성 없이 메시지를 보낼 수 있게 합니다. 스크립터블 오브젝트 기반의 “이벤트 채널”로 더 추가적인 분리를 할 수 있습니다.
  • 불필요한 싱글톤 피하기: 싱글톤 디자인 패턴은 유용할 수 있지만, 클래스의 단일 인스턴스가 필수적일 때만 사용해야 합니다. 싱글톤을 과도하게 사용하면 코드가 밀접하게 결합되어 테스트에 방해가 될 수 있습니다. 필요하지 않다면 싱글톤을 건너뛰세요.

대규모 단일 스크립트를 더 작은 조각으로 리팩토링하면 재사용성과 확장성을 촉진합니다. 이는 팀 협업을 개선하고 테스트를 단순화합니다.

디자인 패턴

작동 중인 ScriptableObjects

우리는 스크립터블 오브젝트 사용 사례를 보여주기 위해 PaddleBallSO 프로젝트를 만들었습니다. 다음은 이들이 작동하는 몇 가지 특정 장소입니다:

  • GameDataSO 스크립터블 오브젝트는 게임 설정을 위한 중앙 데이터 컨테이너 역할을 합니다. 공통 데이터를 한 번 편집한 후, 이를 필요로 하는 다른 객체와 공유하세요.
  • 미니 게임은 느슨한 방식으로 통신하기 위해 수많은 이벤트 채널에 의존합니다. 이 스크립터블 오브젝트 기반 이벤트는 객체가 서로 메시지를 보내는 방식의 중추를 형성합니다.
  • 사운드 재생은 MonoBehaviour 구성 요소와 로직을 분리하기 위해 스크립터블 오브젝트 기반의 델리게이트 객체를 사용합니다.
  • 우리는 Player1과 Player2 간의 “팀”을 구별하기 위해 PlayerIDSO 스크립터블 오브젝트 기반 열거형을 사용합니다.
  • LevelLayoutSO 스크립터블 오브젝트는 패들, 골, 벽 및 공과 같은 게임 요소의 시작 위치에 대한 데이터 컨테이너 역할을 합니다. 이것은 유니티 내에서 및 내보낸 JSON 파일을 통해 외부에서 레벨 레이아웃을 쉽게 수정할 수 있게 해줍니다. 유니티 외부에서 레벨 디자인을 수정하는 것은 플레이어의 창의성과 사용자 정의 레이아웃 공유를 장려할 수 있습니다.

몇 가지 추가 사항을 위해 디자인 패턴 데모를 꼭 확인하세요!

PaddleBallSO 다운로드
parcelbox

ScriptableObjects에 대한 6가지 모범 사례

스크립터블 오브젝트는 게임 데이터를 저장하고 작업 흐름을 간소화하는 강력한 도구가 될 수 있지만, 프로젝트가 복잡해지지 않도록 효과적으로 사용하는 것이 중요합니다.

유니티에서 스크립터블 오브젝트를 사용할 때의 몇 가지 모범 사례는 다음과 같습니다:

  • 데이터를 모듈화하고 정리하세요: 다양한 데이터 유형(예: 플레이어 통계용 하나, 적 행동용 하나 등)에 대해 별도의 스크립터블 오브젝트를 사용하세요. 복잡한 데이터를 쉽게 관리할 수 있는 더 작은 조각으로 나누세요.
  • 폴더 및 명명 규칙 사용: 스크립터블 오브젝트는 스크립트의 코드를 줄이는 데 도움이 될 수 있지만, 그 대가로 프로젝트 폴더에 더 많은 자산을 다루어야 합니다. 적절한 명명 및 디렉토리 조직은 이러한 스크립터블 오브젝트를 효율적으로 관리하는 데 도움이 될 수 있습니다. 명명에 대한 팁은 코드 스타일 가이드를 확인하세요.
  • 스크립터블 오브젝트의 과도한 사용을 피하세요: 스크립터블 오브젝트는 놀라운 데이터 컨테이너이지만, 과도하게 사용하지 않는 것이 중요합니다. 스크립터블 오브젝트는 프로젝트에 복잡성을 추가할 수 있으므로, 명확한 이점이 있을 때만 배포하세요. (예를 들어, 지속적인 데이터를 저장하는 데 사용하지 마세요.)
  • 데이터를 정기적으로 백업하세요: 스크립터블 오브젝트에 대한 변경 사항은 런타임 중에 "실시간"으로 발생하며 자산 파일로 저장됩니다. 프로젝트를 정기적으로 백업하여 데이터를 잃어버리지 않도록 하세요. 버전 관리 소프트웨어를 사용하여 ScriptableObjects의 변경 사항을 추적하세요.
  • 인스펙터 창 사용하기: ScriptableObjects의 주요 장점 중 하나는 직렬화 가능하며 인스펙터에 나타난다는 것입니다. Editor 인터페이스를 활용하여 ScriptableObjects에 저장된 데이터를 보고 조작하세요.
  • 맞춤형 Editor 스크립트를 활용하세요: ScriptableObjects는 기본적으로 씬 계층의 런타임 객체를 참조할 수 없습니다. 객체를 시각화해야 하는 경우 인스펙터를 보다 사용자 친화적인 인터페이스로 만들기 위해 Editor 스크립팅을 사용하세요.

이 가이드라인을 따르면 일반적인 개발 함정을 피할 수 있습니다.

스크립터블 아우트로

더 많은 ScriptableObject 리소스

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