• 게임
  • 산업 분야
  • 리소스
  • 커뮤니티
  • 학습
  • 문의하기
개발
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 프로젝트에서 스크립터블 오브젝트 기반 열거형 사용

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

이 페이지에서는 Unity 프로젝트에서 스크립터블 오브젝트 기반 열거형을 사용하는 방법을 설명합니다.

이 전자책과 함께 제공되는 Unity 개발자 데모를 지원하기 위해 제작된 6개의 미니 가이드 시리즈의 세 번째 가이드입니다. ScriptableObjects로 Unity에서 모듈식 게임 아키텍처 만들기.

이 데모는 고전적인 볼 및 패들 아케이드 게임 메카닉에서 영감을 얻었으며, 스크립터블 오브젝트를 사용하여 테스트 가능하고 확장 가능하며 디자이너 친화적인 컴포넌트를 제작하는 방법을 보여 줍니다.

전자책, 데모 프로젝트 및 이 미니 가이드는 Unity 프로젝트에서 ScriptableObject 클래스와 함께 프로그래밍 디자인 패턴을 사용하는 베스트 프랙티스를 제공합니다. 다음 팁을 통해 코드를 단순화하고, 메모리 사용량을 줄이고, 코드 재사용성을 높일 수 있습니다.

이 시리즈에는 다음과 같은 문서가 포함되어 있습니다.

  • Unity 스크립터블 오브젝트 데모 시작하기
  • 스크립터블 오브젝트로 게임 데이터 및 로직 분리
  • 스크립터블 오브젝트를 델리게이트 오브젝트로 사용
  • 게임 코드에서 스크립터블 오브젝트를 이벤트 채널로 사용
  • 스크립터블 오브젝트 기반 런타임 세트를 사용하는 방법
  • 시작하기 전에 중요한 참고 사항
  • 확장 가능한 열거형
  • 스크립터블 오브젝트 기반 열거형
  • PaddleBallSO의 플레이어 ID
  • 패턴 데모
  • 동작 확장
  • 스크립터블 오브젝트 기반 열거형의 이점
  • 더 많은 스크립터블 오브젝트 리소스

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

스크립터블 오브젝트 데모 프로젝트와 이 시리즈의 미니 가이드를 살펴보기 전에 디자인 패턴은 단순히 아이디어라는 점을 기억하세요. 모든 상황에 적용되는 것은 아닙니다. 이 기술을 통해 Unity 및 스크립터블 오브젝트를 사용하는 새로운 방법을 배울 수 있습니다.

각 패턴에는 장단점이 있습니다. 특정 프로젝트에 유의미한 부분만 선택하세요. 디자이너가 Unity 에디터를 많이 사용하나요? 스크립터블 오브젝트 기반 패턴을 사용하면 개발자와 협업하는 데 도움이 될 수 있습니다.

궁극적으로 프로젝트와 팀에 가장 적합한 코드 아키텍처가 가장 좋습니다.

탭 1
열거형 값을 삭제하거나 순서를 변경하면 예기치 않은 동작이 리드 수 있습니다.

확장 가능한 열거형

열거형은 코드에서 고정된 명명 값을 관리하는 편리한 방법입니다. 하지만 몇 가지 제한 사항이 있습니다. 직렬화된 열거형 값은 상징적인 이름 대신 정수로 저장되므로 값을 제거하거나 순서를 변경하면 잘못되거나 예기치 않은 동작이 리드 수 있습니다. 이는 열거형이 많을 때 특히 Unity 개발 시 문제를 일으킬 수 있다는 의미입니다.

표준 접근 방식

일반적인 열거형은 다음과 같습니다.

[System.Serializable]
public 열거형 HandGestures
{
암석,
서류
자지
}

System.Serializable 속성을 사용하여 열거형을 직렬화하면 인스펙터에 표시됩니다.

문제점

값의 순서를 변경하거나 삭제하면 문제가 발생할 수 있습니다. 내부적으로 각 값은 정수이므로 표현하는 것이 다를 수 있습니다. 이 예시에서는 Paper 값을 삭제하면 Scissors가 값 1을 가정하게 됩니다.

아래 예시와 같이 값을 추가하면 됩니다

선택한 열거형 값은 삭제된 항목 이후에 나타나면 변경됩니다.

이로 인해 프로젝트를 유지 관리하고 업데이트할 때 문제가 발생할 수 있으며, 특히 열거형에 많은 값이 포함될 수 있습니다. 이 문제를 완화하려면 요소를 비어 있거나 사용되지 않게 두거나 정수 값을 명시적으로 설정하면 됩니다. 하지만 두 가지 솔루션 모두 이상적입니다.

PaddleBallSO 다운로드
tab3
스크립터블 오브젝트 간의 동등성 확인

스크립터블 오브젝트 기반 열거형

스크립터블 오브젝트 기반 열거형은 기존 열거형과 동일한 기능을 제공하지만 개별 에셋으로 저장됩니다. 예를 들어 아래 예시에서 PaddleBallSO 프로젝트의 PlayerIDSO 스크립터블 오브젝트를 살펴보겠습니다.

기본적으로 빈 스크립터블 오브젝트입니다.

이를 사용하여 프로젝트에서 P1, P2 등 여러 스크립터블 오브젝트 에셋을 생성할 수 있습니다. 데이터가 없는 경우에도 스크립터블 오브젝트를 사용하여 비교할 수 있습니다. 프로젝트에서 새 스크립터블 오브젝트 에셋을 생성하고 이름을 지정하면 됩니다.

프로젝트 내에서 필요한 만큼의 플레이어 ID를 생성하고 간편하게 전환할 수 있습니다. GameDataSO 스크립트에서 할당된 에셋을 변경하면 됩니다.

평등을 확인하는 경우 열거형과 유사하게 작동합니다. 두 개의 변수가 동일한 스크립터블 오브젝트를 참조하나요? 해당하는 경우 동일한 항목 유형입니다. 그렇지 않으면 그렇지 않습니다.

추가 데이터가 없더라도 스크립터블 오브젝트는 카테고리나 아이템 유형을 나타냅니다.

PaddleBallSO의 플레이어 ID

PaddleBallSO에서 PlayerIDSO는 팀 명명으로 변합니다. GameDataSO에서 P1 및 P2 에셋을 사용하여 두 패들을 구분합니다.

GameSetup 스크립트는 각 패들에 플레이어 ID를 할당합니다. 게임플레이 중에 패들 스크립트는 플레이어 입력을 지정된 팀 ID와 비교합니다.

이 모든 유형의 Multiplayer 게임에 대한 응용 프로그램이 있습니다. 아니면 열거형에 도달률 모든 곳에서 이를 도입해 보세요.

스크립터블 오브젝트는 인스펙터에서 단순히 할당되기 때문에 이름 변경과 순서 변경과 같은 문제가 발생하지 않습니다.

식별자 이름을 각각 'Player1' 또는 'Player2'로 변경하고 싶으신가요? 그렇게 하면 모든 것이 계속 작동합니다. 스크립터블 오브젝트를 추가하고 싶으신가요? 인스펙터에서 에셋 할당은 그대로 유지됩니다.

tab5
블록은 비교를 위해 할당된 팀을 사용합니다.

패턴 데모

이 동작은 게임플레이 제작에 유용합니다. 패턴 데모에서 Switch Enum 버튼을 클릭 수 팀을 변경합니다. DemoBall의 MonoBehaviour 그에 따라 SpriteRenderer를 업데이트합니다.

공이 충돌하면 블록에 대미지를 입히나요? 간단한 평등 테스트를 실행하여 알아보세요. 아래 코드 예시에서 비교할 수 있는 방법이 있습니다.

이 방법을 사용하면 두 게임 오브젝트가 동일한 팀에 있는지 확인할 수 있으며, 이는 친구와 적의 상호 작용 여부를 확인할 때 유용합니다. 이 간단한 비교는 아이템 픽업, 데미지 또는 '팀' 또는 '정렬'이 있는 다른 요소에도 적용할 수 있습니다.

PaddleBallSO 다운로드

동작 확장

재미있는 부분은 스크립터블 오브젝트에 로직을 추가할 때입니다. 기존 열거형과 달리 스크립터블 오브젝트는 데이터를 보유하는 것 외에도 필드와 메서드를 가질 수 있습니다.

이를 사용하면 각 스크립터블 오브젝트에 특수한 비교 로직을 적용할 수 있습니다. 예를 들어 냉기, 열, 전기, 마법 등 특수 대미지를 정의하는 스크립터블 오브젝트를 사용할 수 있습니다.

게임플레이 아이템을 장착하기 위해 애플리케이션에 인벤토리 / 광고 지면 시스템이 필요한 경우 스크립터블 오브젝트는 아이템 유형이나 무기 슬롯을 나타낼 수 있습니다. 특정 캐릭터가 특정 아이템을 들을 수 없나요? 마법 같은 아이템이 있거나 특수한 능력이 있나요? 스크립터블 오브젝트 기반 열거형은 이를 확인하기 위한 메서드를 추가할 수 있습니다.

이전 예시의 MonoBehaviour DemoBall에는 스크립터블 오브젝트를 비교하기 위한 AreEqual 메서드가 포함되어 있습니다. 동작을 확장할 때 스크립터블 오브젝트 자체에 비교 로직을 번들링할 수 있습니다.

패턴 데모에서는 오브젝트와 충돌할 때 더 선택적으로 공을 수정할 수 있습니다. 아래 코드 예시에서 충돌을 위한 범용 항목을 살펴보세요.

이는 현재 데모와 유사한 결과를 얻을 수 있지만 이제는 m_Weakness 필드가 있습니다. 이렇게 하면 각 스크립터블 오브젝트가 충돌 시 파괴할 다른 스크립터블 오브젝트를 정의할 수 있습니다.

각 스크립터블 오브젝트는 AreEqual 메서드를 호출하는 대신 자체 비교 로직을 관리합니다.

그 결과 더 유연하고 확장할 수 있습니다. 공이 다른 팀의 블록을 파괴하는 대신 구체적으로 표현할 수 있습니다. 씬의 여러 공은 개별 CollisionItem에 따라 서로 다른 블록을 파괴할 수 있습니다.

이렇게 하면 더 다양한 복잡한 상호 작용이 가능합니다. 바위 종이 자르기 시스템을 만들고 싶다면 다음 세 가지 스크립터블 오브젝트를 정의할 수 있습니다. 암석, 종이, 수레 각각 고유의 m_Weakness를 가질 수 있으며, IsWinner 메서드를 사용하여 상호 작용을 처리할 수 있습니다.

열거형과 달리 스크립터블 오브젝트는 이 프로세스를 모듈화하고 조정할 수 있도록 합니다. 별도의 데이터 세트와 동기화하려면 추가 데이터 구조나 로직을 추가할 필요가 없습니다. 로직을 처리할 필드나 메서드를 추가하기만 하면 됩니다.

스크립터블 오브젝트 기반 열거형의 이점

스크립터블 오브젝트 기반 열거형에 익숙해지면 특히 팀원들과 작업할 때 워크플로를 개선할 수 있습니다. 에셋이므로 업데이트하면 병합 충돌이 줄어들어 데이터 손실의 위험을 줄일 수 있습니다.

새로운 스크립터블 오브젝트 기반 열거형을 추가하는 것은 다른 에셋을 만드는 것과 같습니다. 기존 열거형과 달리 새 값을 추가하면 기존 코드가 손상되지 않습니다. 또한 Unity 다른 에셋과 마찬가지로 에셋을 검색, 필터링, 정리할 수 있는 빌트인 툴도 있습니다.

에디터의 드래그 앤 드롭 UI를 사용하면 디자이너가 소프트웨어 개발자 추가 지원 없이도 게임플레이 데이터를 확장할 수 있습니다. 처음에는 여전히 필드를 설정하는 방법을 조정해야 하지만, 디자이너는 해당 필드를 자체적으로 데이터로 채울 수 있습니다.

PaddleBallSO 다운로드
스크립터블 튜토리얼

더 많은 스크립터블 오브젝트 리소스

스크립터블 오브젝트 기반 열거형은 팀에서 협업과 효율성을 개선하는 데 사용할 수 있는 또 다른 리소스입니다.

스크립터블 오브젝트를 사용한 디자인 패턴에 대한 자세한 내용은 기술 전자책인 Unity에서 스크립터블 오브젝트로 모듈식 게임 아키텍처 만들기에서 확인할 수 있습니다. 또한 일반적인 Unity 개발 디자인 패턴에 대한 자세한 내용은 게임 프로그래밍 패턴으로 코딩 업그레이드를 참조하세요.