✅ 1. 폴더 구조는 일관되게
가장 기본이자 중요함.
대부분 아래처럼 폴더를 나누면 좋아:
Assets/
├── Scripts/
│ ├── Player/
│ ├── Enemy/
│ └── UI/
├── Prefabs/
│ ├── Characters/
│ ├── Enemies/
│ └── UI/
├── Scenes/
├── Art/
│ ├── Sprites/
│ ├── Models/
│ └── Animations/
├── Audio/
│ ├── BGM/
│ └── SFX/
├── Materials/
├── Resources/
├── ScriptableObjects/
이름만 통일되게 정하면 팀원끼리 찾기 쉬움.
예: PlayerController.cs, EnemyGoblin.prefab, UIButton.prefab
✅ 2. 프리팹 단위로 기능 쪼개기
한 오브젝트 안에 기능이 다 들어가 있으면 수정하거나 재사용하기 어려워.
예: 캐릭터에선
움직임 → PlayerMovement.cs
애니메이션 → PlayerAnimator.cs
공격 → PlayerAttack.cs
이렇게 나누고, 각각을 컴포넌트화해서 붙이면 재사용도 편함.
✅ 3. ScriptableObject로 설정 분리
체력, 속도, 공격력 같은 스탯 → ScriptableObject로 관리하면
프리팹 안 건드리지 않고도 수치만 따로 바꿀 수 있어서 유지보수 대박 편함
[CreateAssetMenu(menuName = "Character/Stats")]
public class CharacterStats : ScriptableObject {
public float hp;
public float moveSpeed;
public float attackPower;
}
✅ 4. Resources, Addressables 전략
🟡 Resources/ 폴더
간단한 게임이면 Resources.Load<T>("경로")로 쉽게 로딩 가능.
단점: 빌드 시 무조건 전부 포함돼서 무거워짐.
🟢 Addressables (추천)
대규모 프로젝트 필수
리소스를 필요한 시점에만 로딩하고, 메모리도 자동 관리 가능.
리소스 용량도 관리하기 쉬움.
✅ 5. 스크립트 네이밍 & 네임스페이스
PlayerManager, EnemySpawner, SoundController 등 역할이 명확하게 드러나는 이름 사용.
네임스페이스도 다음처럼 나누면 좋아:
namespace Game.Player {
public class PlayerMovement : MonoBehaviour { ... }
}
namespace Game.UI {
public class HealthBar : MonoBehaviour { ... }
}
✅ 6. 에셋 버전 관리
중요한 프리팹/ScriptableObject는 버전 넘버를 붙여서 백업
예: EnemyGoblin_v1.prefab, EnemyGoblin_v2.prefab
실수로 깨졌을 때도 복구가 쉬움
🧼 보너스: 협업을 위한 정리 습관
상황 방법
많은 파일 수정 후 CTRL + D로 프리팹 백업 후 작업
테스트용 파일 Dev/ 폴더 만들어 따로 정리
스크립트 안 쓸 때 // TODO 또는 // REMOVE 주석 남기기
오브젝트 이름 Enemy_Goblin(Clone) → Enemy_Goblin_01 등 명확히
예시 구조 한눈에
Assets/
├── Scripts/
│ ├── Game/
│ ├── Player/
│ ├── Enemy/
│ └── Managers/
├── Prefabs/
│ ├── Characters/
│ └── UI/
├── ScriptableObjects/
│ ├── CharacterStats/
│ └── ItemData/
├── AddressableAssets/
├── Art/
├── Scenes/
└── Audio/