11 코드 구조·패턴·에디터 - jes79/Unity-AI-Glossary-Playground GitHub Wiki

11 코드 구조·패턴·에디터

기능 요청 끝에 "이벤트로 분리해줘" 같은 구조 요구를 한 줄 덧붙이세요.

씬 13개 · 폴더 Assets/00_Scenes/11_Patterns

번호 용어 쉽게 말하면 씬에서 보여 주는 것 구현 방식
1101 싱글톤 (Singleton) 게임에 하나만 있는 관리자 싱글톤 + DontDestroyOnLoad로 씬 재로드 후에도 점수 유지 런타임 데모
1102 이벤트 / 옵저버 (Action, UnityEvent) "이 일이 생겼어"를 방송, 듣는 쪽이 반응 OnPlayerDied 이벤트에 UI·사운드·카메라가 각자 반응 런타임 데모
1103 인터페이스 (Interface) 공통 규칙 약속 IInteractable로 문·상자·NPC·레버를 E키 하나로 런타임 데모
1104 컴포넌트 분리 한 스크립트에 다 넣지 않기 이동·공격·체력 컴포넌트 분리, 각각 켜고 끄기 런타임 데모
1105 상태 패턴 (State Pattern) 상태를 클래스로 분리 Idle/Run/Jump/Attack 상태 클래스 State 패턴 런타임 데모
1106 커맨드 패턴 입력을 명령 객체로, 되돌리기 가능 상자 밀기 퍼즐 Undo/Redo Command 패턴 런타임 데모
1107 프리팹 / 프리팹 변형 (Prefab Variant) 재사용 오브젝트 / 일부만 바꾼 복사본 Base 적 프리팹에서 Fast/Strong Prefab Variant 생성·소환 에디터 도구 데모
1108 [SerializeField] / [Header] / Range(#1108) Inspector에 변수 노출·정리 SerializeField·Header·Range 등 Inspector 속성 모음 런타임 데모
1109 Gizmos 씬 뷰에 보조선 그리기 OnDrawGizmos로 적 시야·공격 범위 그리기 런타임 데모
1110 에디터 확장 (Custom Editor, EditorWindow) 나만의 툴 버튼·창 Inspector '적 10마리 생성' 버튼 Custom Editor + EditorWindow 에디터 도구 데모
1111 디버그 로그 / Debug.DrawRay 콘솔 출력 / 레이 시각화 Debug.DrawRay로 Raycast 시각화 + 미니 콘솔 런타임 데모
1112 버전 관리 (Git, .gitignore) 작업 기록·백업 Git·.gitignore·LFS 단계, 미니 Git 시뮬레이터 설명 + 대체 구현
1113 빌드 설정 (PC, Android, WebGL) 플랫폼 출력 PC/Android/WebGL→itch.io 빌드 단계, Build Settings 씬 목록 에디터 도구 데모

항목별 상세

1101

싱글톤 (Singleton) — 게임에 하나만 있는 관리자

요청 예문: "GameManager를 싱글톤으로 만들고 씬이 바뀌어도 유지(DontDestroyOnLoad)되게 해줘."

  • 씬: Assets/00_Scenes/11_Patterns/1101_Singleton.unity
  • 핵심 스크립트: GameManager, SingletonDemoUI
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1101_Singleton.cs
  • 구현 방식: 런타임 데모
  • 개념: 어디서나 접근할 수 있는 인스턴스를 하나만 두는 패턴. 매니저류에 편하지만 의존 관계가 숨고 테스트가 어려워지므로, 꼭 하나여야 하는 것에만 쓰는 게 좋다.
  • 씬에서 보여 주는 것: 싱글톤 + DontDestroyOnLoad로 씬 재로드 후에도 점수 유지
  • 확인 포인트: 점수를 올린 뒤 씬을 다시 로드해 보세요. DontDestroyOnLoad 싱글톤이라 점수가 유지되고, 매니저가 두 개로 늘지 않는지도 확인해 보세요.

1102

이벤트 / 옵저버 (Action, UnityEvent) — "이 일이 생겼어"를 방송, 듣는 쪽이 반응

요청 예문: "플레이어가 죽으면 OnPlayerDied 이벤트를 쏘고 UI와 사운드가 각각 반응하게 해줘."

  • 씬: Assets/00_Scenes/11_Patterns/1102_EventObserver.unity
  • 핵심 스크립트: PlayerHealthSubject, EventObserverDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1102_EventObserver.cs
  • 구현 방식: 런타임 데모
  • 개념: 어떤 일이 생겼다고 알리면 듣고 있던 쪽들이 각자 반응하는 구조. 알리는 쪽이 누가 듣는지 몰라도 되므로 UI·사운드·카메라를 서로 모르는 상태로 묶을 수 있다. 구독 해제를 잊으면 누수가 생긴다.
  • 씬에서 보여 주는 것: OnPlayerDied 이벤트에 UI·사운드·카메라가 각자 반응
  • 확인 포인트: 플레이어를 죽여 OnPlayerDied 하나에 UI·사운드·카메라가 각자 반응하는지 보세요. 구독자를 하나 끄면 그 반응만 사라지고 나머지는 그대로입니다.

1103

인터페이스 (Interface) — 공통 규칙 약속

요청 예문: "IInteractable 인터페이스로 상호작용 대상을 통일해줘."

  • 씬: Assets/00_Scenes/11_Patterns/1103_Interface.unity
  • 핵심 스크립트: IInteractable, InteractorPlayer
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1103_Interface.cs
  • 구현 방식: 런타임 데모
  • 개념: 클래스가 반드시 갖춰야 할 함수 목록만 약속해 두는 문법. 서로 상관없는 문·상자·NPC 를 같은 코드로 다룰 수 있게 해 주며, 상속과 달리 여러 개를 동시에 구현할 수 있다.
  • 씬에서 보여 주는 것: IInteractable로 문·상자·NPC·레버를 E키 하나로
  • 확인 포인트: 문·상자·NPC·레버를 모두 E 키 하나로 상호작용해 보세요. 각자 다른 동작을 하지만 호출하는 코드는 IInteractable 하나입니다.

1104

컴포넌트 분리 — 한 스크립트에 다 넣지 않기

요청 예문: "이 PlayerController를 이동, 공격, 체력 스크립트로 나눠줘."

  • 씬: Assets/00_Scenes/11_Patterns/1104_ComponentSplit.unity
  • 핵심 스크립트: PlayerMovement, PlayerAttack, PlayerHealth
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1104_ComponentSplit.cs
  • 구현 방식: 런타임 데모
  • 개념: 한 스크립트에 모든 기능을 넣지 않고 이동·공격·체력처럼 역할별로 쪼개는 설계. 필요한 조합만 붙여 쓸 수 있고, 기능을 하나씩 켜고 끄며 문제를 좁힐 수 있다.
  • 씬에서 보여 주는 것: 이동·공격·체력 컴포넌트 분리, 각각 켜고 끄기
  • 확인 포인트: 이동·공격·체력 컴포넌트를 하나씩 꺼 보세요. 해당 기능만 멈추고 나머지는 정상 동작합니다. 적에는 공격만 붙이는 식의 재조합도 가능합니다.

1105

상태 패턴 (State Pattern) — 상태를 클래스로 분리

요청 예문: "플레이어 상태(Idle, Run, Jump, Attack)를 State 패턴으로 리팩터링해줘."

  • 씬: Assets/00_Scenes/11_Patterns/1105_StatePattern.unity
  • 핵심 스크립트: IPlayerState, StatePatternPlayer
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1105_StatePattern.cs
  • 구현 방식: 런타임 데모
  • 개념: 상태마다 클래스를 만들어 진입·갱신·퇴장 로직을 그 안에 담는 패턴. if 뭉치로 커진 FSM 을 정리할 때 쓰고, 상태를 추가해도 기존 코드를 건드리지 않는다.
  • 씬에서 보여 주는 것: Idle/Run/Jump/Attack 상태 클래스 State 패턴
  • 확인 포인트: Idle/Run/Jump/Attack 을 전환하며 현재 상태 클래스 이름과 Enter/Exit 로그가 찍히는지 보세요. 상태별 코드가 서로 섞이지 않는 구조를 확인해 보세요.

1106

커맨드 패턴 — 입력을 명령 객체로, 되돌리기 가능

요청 예문: "퍼즐 게임에 Undo가 되도록 Command 패턴을 적용해줘."

  • 씬: Assets/00_Scenes/11_Patterns/1106_CommandPattern.unity
  • 핵심 스크립트: ICommand, MoveCommand, CommandPuzzle
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1106_CommandPattern.cs
  • 구현 방식: 런타임 데모
  • 개념: 입력이나 동작을 객체로 만들어 쌓아 두고 실행·되돌리기를 하는 패턴. 퍼즐 되돌리기, 에디터 Undo, 리플레이 기록에 쓴다.
  • 씬에서 보여 주는 것: 상자 밀기 퍼즐 Undo/Redo Command 패턴
  • 확인 포인트: 상자를 밀어 퍼즐을 움직인 뒤 Undo/Redo 를 눌러 보세요. 이동 전후 상태가 정확히 되돌아가고 다시 실행되는지 보세요.

1107

프리팹 / 프리팹 변형 (Prefab Variant) — 재사용 오브젝트 / 일부만 바꾼 복사본

요청 예문: "기본 적 프리팹에서 빠른 적, 강한 적을 Prefab Variant로 만드는 법 알려줘."

  • 씬: Assets/00_Scenes/11_Patterns/1107_PrefabVariant.unity
  • 핵심 스크립트: VariantEnemy, VariantSpawner
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1107_PrefabVariant.cs
  • 구현 방식: 에디터 도구 데모
  • 개념: 프리팹은 재사용할 오브젝트 원본이고, Prefab Variant 는 원본을 물려받아 일부만 바꾼 파생본이다. 원본을 고치면 Variant 에도 반영되므로 적 종류를 늘릴 때 유리하다.
  • 씬에서 보여 주는 것: Base 적 프리팹에서 Fast/Strong Prefab Variant 생성·소환
  • 확인 포인트: Base 적에서 파생된 Fast / Strong Variant 를 소환해 보세요. 공통 속성은 같고 바꾼 값만 다릅니다. Base 를 수정하면 둘 다 함께 바뀝니다.

1108

[SerializeField] / [Header] / [Range] — Inspector에 변수 노출·정리

요청 예문: "private 변수를 SerializeField로 노출하고 Header와 Range로 정리해줘."

  • 씬: Assets/00_Scenes/11_Patterns/1108_InspectorAttributes.unity
  • 핵심 스크립트: InspectorAttributeDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1108_InspectorAttributes.cs
  • 구현 방식: 런타임 데모
  • 개념: private 변수를 Inspector 에 노출하는 SerializeField, 항목을 묶는 Header, 범위를 제한하는 Range 등 Inspector 표시를 다듬는 속성들. 기획 값을 코드 수정 없이 조절하게 해 준다.
  • 씬에서 보여 주는 것: SerializeField·Header·Range 등 Inspector 속성 모음
  • 확인 포인트: Inspector 에서 Header 로 묶인 항목, Range 슬라이더, Tooltip 설명이 보이는지 확인하고, public 없이도 값이 노출되는 것을 보세요.

1109

Gizmos — 씬 뷰에 보조선 그리기

요청 예문: "적의 시야 범위와 공격 범위를 OnDrawGizmos로 그려줘."

  • 씬: Assets/00_Scenes/11_Patterns/1109_Gizmos.unity
  • 핵심 스크립트: EnemyVisionGizmos, GizmosDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1109_Gizmos.cs
  • 구현 방식: 런타임 데모
  • 개념: Scene 뷰에만 그려지는 보조선. 적의 시야·공격 범위·순찰 경로처럼 눈에 보이지 않는 값을 보이게 만들어 디버깅 속도를 크게 올려 준다.
  • 씬에서 보여 주는 것: OnDrawGizmos로 적 시야·공격 범위 그리기
  • 확인 포인트: Scene 뷰에서 적의 시야 부채꼴과 공격 범위 원이 그려지는지 보세요. 값을 바꾸면 선도 함께 변합니다. 게임 화면에는 나오지 않는 것이 Gizmos 의 특징입니다.

1110

에디터 확장 (Custom Editor, EditorWindow) — 나만의 툴 버튼·창

요청 예문: "Inspector에 '적 10마리 생성' 버튼을 추가하는 Custom Editor를 만들어줘."

  • 씬: Assets/00_Scenes/11_Patterns/1110_EditorExtension.unity
  • 핵심 스크립트: EnemySpawnerToolEditor, EnemySpawnerWindow
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1110_EditorExtension.cs
  • 구현 방식: 에디터 도구 데모
  • 개념: Inspector 에 버튼을 넣거나(Custom Editor) 별도 창을 만들어(EditorWindow) 반복 작업을 자동화하는 기능. 이 프로젝트의 182개 씬도 전부 에디터 확장으로 생성한 것이다.
  • 씬에서 보여 주는 것: Inspector '적 10마리 생성' 버튼 Custom Editor + EditorWindow
  • 확인 포인트: Inspector 의 [적 10마리 생성] 버튼과 전용 EditorWindow 를 실행해, 손으로 배치하지 않고 씬이 채워지는지 보세요.

1111

디버그 로그 / Debug.DrawRay — 콘솔 출력 / 레이 시각화

요청 예문: "Raycast가 어디로 나가는지 Debug.DrawRay로 보여줘."

  • 씬: Assets/00_Scenes/11_Patterns/1111_DebugDrawRay.unity
  • 핵심 스크립트: RaycastDebugTurret, OnScreenConsole
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1111_DebugDrawRay.cs
  • 구현 방식: 런타임 데모
  • 개념: 콘솔에 값을 찍는 Debug.Log 와 Scene 뷰에 선을 그리는 Debug.DrawRay. 가장 원시적이지만 가장 빠른 디버깅 수단이고, 출시 빌드에서는 걷어내는 것이 좋다.
  • 씬에서 보여 주는 것: Debug.DrawRay로 Raycast 시각화 + 미니 콘솔
  • 확인 포인트: Raycast 를 쏘아 Scene 뷰에 선이 그려지고 미니 콘솔에 맞은 대상이 찍히는지 보세요. 선 색으로 맞았는지 여부를 구분하는 방식도 보세요.

1112

버전 관리 (Git, .gitignore) — 작업 기록·백업

요청 예문: "유니티 프로젝트용 .gitignore와 Git LFS 설정을 알려줘."

  • 씬: Assets/00_Scenes/11_Patterns/1112_VersionControl.unity
  • 핵심 스크립트: GuidePages, MiniGitSimulator
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1112_VersionControl.cs
  • 구현 방식: 설명 + 대체 구현
  • 개념: 작업 기록을 저장하고 되돌릴 수 있게 하는 도구. Unity 는 Library 등 생성 폴더를 제외하는 .gitignore 와, 큰 바이너리를 위한 LFS 설정이 함께 필요하다.
  • 씬에서 보여 주는 것: Git·.gitignore·LFS 단계, 미니 Git 시뮬레이터
  • 확인 포인트: 미니 Git 시뮬레이터에서 커밋·브랜치·되돌리기를 해 보세요. 패널의 Unity .gitignore 와 LFS 설정 단계가 실제 저장소 설정과 같은지 확인해 보세요.

1113

빌드 설정 (PC, Android, WebGL) — 플랫폼 출력

요청 예문: "WebGL로 빌드해서 itch.io에 올리는 순서를 알려줘."

  • 씬: Assets/00_Scenes/11_Patterns/1113_BuildSettings.unity
  • 핵심 스크립트: BuildInfoDisplay, BuildSettingsTools
  • 빌더: Assets/01_Scripts/Editor/Scenes/11_Patterns/Build1113_BuildSettings.cs
  • 구현 방식: 에디터 도구 데모
  • 개념: 플랫폼별로 실행 파일을 만드는 설정. 씬 목록·아이콘·해상도·압축 방식이 플랫폼마다 다르고, Build Settings 에 씬을 등록하지 않으면 로드에 실패한다.
  • 씬에서 보여 주는 것: PC/Android/WebGL→itch.io 빌드 단계, Build Settings 씬 목록
  • 확인 포인트: Build Settings 씬 목록과 각 플랫폼(PC/Android/WebGL) 설정 단계를 확인해 보세요. 씬이 목록에 없을 때 어떤 오류가 나는지도 함께 읽어 보세요.