|  | 
|  | 1 | +# Live2D 모델 해상도별 크기 조정 시스템 가이드 | 
|  | 2 | + | 
|  | 3 | +## 개요 | 
|  | 4 | + | 
|  | 5 | +이 시스템은 다양한 해상도와 디바이스에서 Live2D 모델의 크기를 자동으로 조정하여 일관된 사용자 경험을 제공합니다. | 
|  | 6 | + | 
|  | 7 | +## 주요 구성 요소 | 
|  | 8 | + | 
|  | 9 | +### 1. ResolutionModelScaleConfig | 
|  | 10 | +- 해상도별 스케일 규칙을 정의하는 ScriptableObject | 
|  | 11 | +- 자동 스케일 계산 로직 포함 | 
|  | 12 | +- PC/모바일 구분 지원 | 
|  | 13 | + | 
|  | 14 | +### 2. Live2DModelScaler | 
|  | 15 | +- 개별 Live2D 모델에 스케일을 적용하는 컴포넌트 | 
|  | 16 | +- 해상도 변경 시 자동 스케일 조정 | 
|  | 17 | +- 원본 크기 보존 및 복원 기능 | 
|  | 18 | + | 
|  | 19 | +### 3. ResolutionManager | 
|  | 20 | +- 전체 시스템을 관리하는 싱글톤 매니저 | 
|  | 21 | +- 모든 모델 스케일러를 중앙에서 관리 | 
|  | 22 | +- 해상도 변경 감지 및 자동 적용 | 
|  | 23 | + | 
|  | 24 | +## 사용 방법 | 
|  | 25 | + | 
|  | 26 | +### 1. 기본 설정 | 
|  | 27 | + | 
|  | 28 | +1. **ResolutionModelScaleConfig 생성** | 
|  | 29 | + ``` | 
|  | 30 | + Assets > Create > ProjectVG > Character > Resolution Model Scale Config | 
|  | 31 | + ``` | 
|  | 32 | + | 
|  | 33 | +2. **기본 설정 구성** | 
|  | 34 | + - Reference Resolution: 기준 해상도 (예: 1920x1080) | 
|  | 35 | + - Reference Scale: 기준 스케일 (예: 1.0) | 
|  | 36 | + - Scale Mode: 스케일 계산 방식 선택 | 
|  | 37 | + | 
|  | 38 | +### 2. 해상도별 규칙 설정 | 
|  | 39 | + | 
|  | 40 | +```csharp | 
|  | 41 | +// 기본 규칙들 (모바일 기준 최적화) | 
|  | 42 | +- 모바일 기본: 0.85x 스케일 | 
|  | 43 | +- 모바일 세로 (작은 화면): 0.7x 스케일 | 
|  | 44 | +- 모바일 가로/태블릿 세로: 0.8x 스케일 | 
|  | 45 | +- 태블릿 가로: 0.9x 스케일 | 
|  | 46 | +- PC FHD (1920x1080): 1.1x 스케일 | 
|  | 47 | +- PC QHD 이상: 1.3x 스케일 | 
|  | 48 | +``` | 
|  | 49 | + | 
|  | 50 | +### 3. 자동 적용 | 
|  | 51 | + | 
|  | 52 | +1. **CharacterFacade 사용 시** | 
|  | 53 | + - 모델 스케일러가 자동으로 추가됨 | 
|  | 54 | + - 별도 설정 불필요 | 
|  | 55 | + | 
|  | 56 | +2. **수동 적용** | 
|  | 57 | + ```csharp | 
|  | 58 | + // Live2DModelScaler 컴포넌트 추가 | 
|  | 59 | + var scaler = modelObject.AddComponent<Live2DModelScaler>(); | 
|  | 60 | + scaler.ApplyScale(); | 
|  | 61 | + ``` | 
|  | 62 | + | 
|  | 63 | +## 해상도별 상세 설정 | 
|  | 64 | + | 
|  | 65 | +### 모바일 환경 | 
|  | 66 | +- **기준 해상도**: 1080x1920 (세로 모드) | 
|  | 67 | +- **모바일 기본**: 0.85x 스케일 (대부분의 모바일 기기) | 
|  | 68 | +- **작은 화면**: 0.7x 스케일 (480px 이하 너비) | 
|  | 69 | +- **가로 모드**: 0.8x 스케일 (481-768px 너비) | 
|  | 70 | +- **고해상도**: 0.9x 스케일 (1440px 이상 너비, 2960px 이상 높이) | 
|  | 71 | + | 
|  | 72 | +### 태블릿 환경 | 
|  | 73 | +- **태블릿 세로**: 0.8x 스케일 (481-768px 너비) | 
|  | 74 | +- **태블릿 가로**: 0.9x 스케일 (769-1024px 너비) | 
|  | 75 | + | 
|  | 76 | +### PC 환경 | 
|  | 77 | +- **PC FHD**: 1.1x 스케일 (1025-1920px 너비, 1080px 이하 높이) | 
|  | 78 | +- **PC QHD+**: 1.3x 스케일 (1921px 이상 너비, 1081px 이상 높이) | 
|  | 79 | + | 
|  | 80 | +## 스케일 계산 방식 | 
|  | 81 | + | 
|  | 82 | +### 1. HeightBased | 
|  | 83 | +- 화면 높이를 기준으로 스케일 계산 | 
|  | 84 | +- 세로 모드에 적합 | 
|  | 85 | + | 
|  | 86 | +### 2. WidthBased | 
|  | 87 | +- 화면 너비를 기준으로 스케일 계산 | 
|  | 88 | +- 가로 모드에 적합 | 
|  | 89 | + | 
|  | 90 | +### 3. AspectRatioBased (권장) | 
|  | 91 | +- 종횡비를 고려한 스케일 계산 | 
|  | 92 | +- 다양한 화면 비율에 대응 | 
|  | 93 | +- 모바일과 PC 환경 모두에 최적화 | 
|  | 94 | + | 
|  | 95 | +## 설정 예시 | 
|  | 96 | + | 
|  | 97 | +### 모바일 환경 (기준) | 
|  | 98 | +```yaml | 
|  | 99 | +Reference Resolution: 1080x1920 | 
|  | 100 | +Reference Scale: 1.0 | 
|  | 101 | +Scale Mode: AspectRatioBased | 
|  | 102 | +Min Scale: 0.6 | 
|  | 103 | +Max Scale: 1.5 | 
|  | 104 | +``` | 
|  | 105 | + | 
|  | 106 | +### PC 환경 | 
|  | 107 | +```yaml | 
|  | 108 | +Reference Resolution: 1920x1080 | 
|  | 109 | +Reference Scale: 1.1 | 
|  | 110 | +Scale Mode: AspectRatioBased | 
|  | 111 | +Min Scale: 0.6 | 
|  | 112 | +Max Scale: 1.5 | 
|  | 113 | +``` | 
|  | 114 | + | 
|  | 115 | +## 디버깅 | 
|  | 116 | + | 
|  | 117 | +### 1. 디버그 정보 활성화 | 
|  | 118 | +```csharp | 
|  | 119 | +// ResolutionManager에서 | 
|  | 120 | +showDebugInfo = true; | 
|  | 121 | + | 
|  | 122 | +// Live2DModelScaler에서 | 
|  | 123 | +showDebugInfo = true; | 
|  | 124 | +``` | 
|  | 125 | + | 
|  | 126 | +### 2. 현재 상태 확인 | 
|  | 127 | +```csharp | 
|  | 128 | +var info = ResolutionManager.Instance.GetCurrentResolutionInfo(); | 
|  | 129 | +Debug.Log($"해상도: {info.Resolution}, 스케일: {info.Scale}"); | 
|  | 130 | +``` | 
|  | 131 | + | 
|  | 132 | +## 고급 기능 | 
|  | 133 | + | 
|  | 134 | +### 1. 수동 스케일 설정 | 
|  | 135 | +```csharp | 
|  | 136 | +var scaler = GetComponent<Live2DModelScaler>(); | 
|  | 137 | +scaler.SetManualScale(1.5f); | 
|  | 138 | +``` | 
|  | 139 | + | 
|  | 140 | +### 2. 원본 크기 복원 | 
|  | 141 | +```csharp | 
|  | 142 | +scaler.ResetToOriginalScale(); | 
|  | 143 | +``` | 
|  | 144 | + | 
|  | 145 | +### 3. 동적 규칙 추가 | 
|  | 146 | +```csharp | 
|  | 147 | +// 런타임에 규칙 추가 가능 | 
|  | 148 | +var config = Resources.Load<ResolutionModelScaleConfig>("ResolutionModelScaleConfig"); | 
|  | 149 | +// 규칙 수정 후 적용 | 
|  | 150 | +``` | 
|  | 151 | + | 
|  | 152 | +## 주의사항 | 
|  | 153 | + | 
|  | 154 | +1. **Resources 폴더** | 
|  | 155 | + - ResolutionModelScaleConfig는 반드시 Resources 폴더에 위치해야 함 | 
|  | 156 | + - 기본 경로: `Assets/Resources/ResolutionModelScaleConfig.asset` | 
|  | 157 | + | 
|  | 158 | +2. **성능 고려** | 
|  | 159 | + - 해상도 변경 감지는 Update에서 수행 | 
|  | 160 | + - 불필요한 경우 `applyOnResolutionChange = false` 설정 | 
|  | 161 | + | 
|  | 162 | +3. **스케일 범위** | 
|  | 163 | + - Min/Max Scale 범위를 적절히 설정 | 
|  | 164 | + - 너무 극단적인 값은 피하기 | 
|  | 165 | + | 
|  | 166 | +## 실제 사용 예시 | 
|  | 167 | + | 
|  | 168 | +### 일반적인 해상도별 결과 | 
|  | 169 | +```csharp | 
|  | 170 | +// iPhone SE (375x667) - 모바일 세로 (작은 화면) | 
|  | 171 | +// 스케일: 0.7x | 
|  | 172 | + | 
|  | 173 | +// iPhone 12 (390x844) - 모바일 기본 | 
|  | 174 | +// 스케일: 0.85x | 
|  | 175 | + | 
|  | 176 | +// 모바일 고해상도 (1440x2960) - 모바일 고해상도 | 
|  | 177 | +// 스케일: 0.9x | 
|  | 178 | + | 
|  | 179 | +// iPad (768x1024) - 태블릿 세로 | 
|  | 180 | +// 스케일: 0.8x | 
|  | 181 | + | 
|  | 182 | +// iPad 가로 (1024x768) - 태블릿 가로 | 
|  | 183 | +// 스케일: 0.9x | 
|  | 184 | + | 
|  | 185 | +// PC FHD (1920x1080) - PC FHD | 
|  | 186 | +// 스케일: 1.1x | 
|  | 187 | + | 
|  | 188 | +// PC QHD (2560x1440) - PC QHD+ | 
|  | 189 | +// 스케일: 1.3x | 
|  | 190 | +``` | 
|  | 191 | + | 
|  | 192 | +### 디버그 정보 확인 | 
|  | 193 | +```csharp | 
|  | 194 | +// 현재 해상도 정보 출력 | 
|  | 195 | +var info = ResolutionManager.Instance.GetCurrentResolutionInfo(); | 
|  | 196 | +Debug.Log($"현재 해상도: {info.Resolution}"); | 
|  | 197 | +Debug.Log($"적용된 스케일: {info.Scale:F2}"); | 
|  | 198 | +Debug.Log($"종횡비: {info.AspectRatio:F2}"); | 
|  | 199 | +Debug.Log($"모바일 여부: {info.IsMobile}"); | 
|  | 200 | +``` | 
|  | 201 | + | 
|  | 202 | +## 문제 해결 | 
|  | 203 | + | 
|  | 204 | +### 1. 스케일이 적용되지 않는 경우 | 
|  | 205 | +- ResolutionModelScaleConfig가 Resources 폴더에 있는지 확인 | 
|  | 206 | +- Live2DModelScaler 컴포넌트가 추가되었는지 확인 | 
|  | 207 | +- 디버그 정보를 활성화하여 로그 확인 | 
|  | 208 | + | 
|  | 209 | +### 2. 스케일이 예상과 다른 경우 | 
|  | 210 | +- Reference Resolution과 Reference Scale 설정 확인 | 
|  | 211 | +- Scale Mode 설정 확인 | 
|  | 212 | +- 해상도별 규칙 우선순위 확인 | 
|  | 213 | + | 
|  | 214 | +### 3. 성능 문제 | 
|  | 215 | +- `autoDetectScalers = false` 설정 | 
|  | 216 | +- 필요한 경우에만 수동으로 스케일러 등록 | 
|  | 217 | + | 
|  | 218 | +### 4. 특정 해상도에서 문제가 있는 경우 | 
|  | 219 | +```csharp | 
|  | 220 | +// 특정 해상도에 대한 스케일 확인 | 
|  | 221 | +var config = Resources.Load<ResolutionModelScaleConfig>("ResolutionModelScaleConfig"); | 
|  | 222 | +var testResolution = new Vector2(1920, 1080); | 
|  | 223 | +var scale = config.CalculateScaleForResolution(testResolution); | 
|  | 224 | +Debug.Log($"1920x1080에서의 스케일: {scale:F2}"); | 
|  | 225 | +``` | 
0 commit comments