├── .gitignore ├── Assets ├── Example.meta ├── Example │ ├── Example.unity │ ├── Example.unity.meta │ ├── Resources.meta │ ├── Resources │ │ ├── Flag.meta │ │ └── Flag │ │ │ ├── celestial.jpg │ │ │ ├── celestial.jpg.meta │ │ │ ├── flower.jpg │ │ │ ├── flower.jpg.meta │ │ │ ├── greendragon.jpg │ │ │ ├── greendragon.jpg.meta │ │ │ ├── treeolife.jpg │ │ │ └── treeolife.jpg.meta │ ├── StreamingAssets.meta │ ├── StreamingAssets │ │ ├── Fruit.meta │ │ └── Fruit │ │ │ ├── Fruit_1.png │ │ │ ├── Fruit_1.png.meta │ │ │ ├── Fruit_2.png │ │ │ ├── Fruit_2.png.meta │ │ │ ├── Fruit_3.png │ │ │ ├── Fruit_3.png.meta │ │ │ ├── Fruit_4.png │ │ │ ├── Fruit_4.png.meta │ │ │ ├── Fruit_5.png │ │ │ ├── Fruit_5.png.meta │ │ │ ├── Fruit_6.png │ │ │ ├── Fruit_6.png.meta │ │ │ ├── Fruit_7.png │ │ │ ├── Fruit_7.png.meta │ │ │ ├── Fruit_8.png │ │ │ └── Fruit_8.png.meta │ ├── main.cs │ └── main.cs.meta ├── RuntimeTextureAtlas.meta └── RuntimeTextureAtlas │ ├── Editor.meta │ ├── Editor │ ├── RawImageAgentEditor.cs │ ├── RawImageAgentEditor.cs.meta │ ├── TextureAtlasManagerEditor.cs │ └── TextureAtlasManagerEditor.cs.meta │ ├── Resources.meta │ ├── Resources │ ├── DrawTexture.shader │ └── DrawTexture.shader.meta │ ├── Script.meta │ ├── Script │ ├── Packer.meta │ ├── Packer │ │ ├── Column.cs │ │ ├── Column.cs.meta │ │ ├── GreedyPacker.cs │ │ ├── GreedyPacker.cs.meta │ │ ├── IBinaryPacker.cs │ │ ├── IBinaryPacker.cs.meta │ │ ├── Rectangle.cs │ │ ├── Rectangle.cs.meta │ │ ├── Row.cs │ │ └── Row.cs.meta │ ├── TextureAtlas.meta │ ├── TextureAtlas │ │ ├── SubTextureAgent.cs │ │ ├── SubTextureAgent.cs.meta │ │ ├── TextureAtlas.cs │ │ ├── TextureAtlas.cs.meta │ │ ├── TextureAtlasManager.cs │ │ ├── TextureAtlasManager.cs.meta │ │ ├── TextureUtil.cs │ │ └── TextureUtil.cs.meta │ ├── UIExtention.meta │ └── UIExtention │ │ ├── RawImageAgent.cs │ │ ├── RawImageAgent.cs.meta │ │ ├── RawImageExtension.cs │ │ └── RawImageExtension.cs.meta │ ├── TextureAtlasManager.prefab │ └── TextureAtlasManager.prefab.meta ├── Image ├── drawcall-with.png ├── drawcall-without.png ├── rendertexture.png └── screenshot.png ├── LICENSE ├── Packages └── manifest.json ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── NavMeshAreas.asset ├── NetworkManager.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset └── VFXManager.asset └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | [Ll]ibrary/ 2 | [Tt]emp/ 3 | [Oo]bj/ 4 | [Ll]ogs/ 5 | [Bb]uild/ 6 | [Bb]uilds/ 7 | Assets/AssetStoreTools* 8 | 9 | # Visual Studio cache directory 10 | .vs/ 11 | 12 | # Autogenerated VS/MD/Consulo solution and project files 13 | ExportedObj/ 14 | .consulo/ 15 | *.csproj 16 | *.unityproj 17 | *.sln 18 | *.suo 19 | *.tmp 20 | *.user 21 | *.userprefs 22 | *.pidb 23 | *.booproj 24 | *.svd 25 | *.pdb 26 | *.opendb 27 | 28 | # Unity3D generated meta files 29 | *.pidb.meta 30 | *.pdb.meta 31 | 32 | # Unity3D Generated File On Crash Reports 33 | sysinfo.txt 34 | 35 | # Builds 36 | *.apk 37 | *.unitypackage 38 | .DS_Store 39 | -------------------------------------------------------------------------------- /Assets/Example.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7323cb52355b442e2862a7f2376c8964 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Example/Example.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0.37311947, g: 0.38074, b: 0.35872698, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 0 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 10 58 | m_Resolution: 2 59 | m_BakeResolution: 10 60 | m_AtlasSize: 512 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_Padding: 2 66 | m_LightmapParameters: {fileID: 0} 67 | m_LightmapsBakeMode: 1 68 | m_TextureCompression: 1 69 | m_FinalGather: 0 70 | m_FinalGatherFiltering: 1 71 | m_FinalGatherRayCount: 256 72 | m_ReflectionCompression: 2 73 | m_MixedBakeMode: 2 74 | m_BakeBackend: 1 75 | m_PVRSampling: 1 76 | m_PVRDirectSampleCount: 32 77 | m_PVRSampleCount: 256 78 | m_PVRBounces: 2 79 | m_PVRFilterTypeDirect: 0 80 | m_PVRFilterTypeIndirect: 0 81 | m_PVRFilterTypeAO: 0 82 | m_PVRFilteringMode: 1 83 | m_PVRCulling: 1 84 | m_PVRFilteringGaussRadiusDirect: 1 85 | m_PVRFilteringGaussRadiusIndirect: 5 86 | m_PVRFilteringGaussRadiusAO: 2 87 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 88 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 89 | m_PVRFilteringAtrousPositionSigmaAO: 1 90 | m_ShowResolutionOverlay: 1 91 | m_LightingDataAsset: {fileID: 0} 92 | m_UseShadowmask: 1 93 | --- !u!196 &4 94 | NavMeshSettings: 95 | serializedVersion: 2 96 | m_ObjectHideFlags: 0 97 | m_BuildSettings: 98 | serializedVersion: 2 99 | agentTypeID: 0 100 | agentRadius: 0.5 101 | agentHeight: 2 102 | agentSlope: 45 103 | agentClimb: 0.4 104 | ledgeDropHeight: 0 105 | maxJumpAcrossDistance: 0 106 | minRegionArea: 2 107 | manualCellSize: 0 108 | cellSize: 0.16666667 109 | manualTileSize: 0 110 | tileSize: 256 111 | accuratePlacement: 0 112 | debug: 113 | m_Flags: 0 114 | m_NavMeshData: {fileID: 0} 115 | --- !u!1 &66738267 116 | GameObject: 117 | m_ObjectHideFlags: 0 118 | m_CorrespondingSourceObject: {fileID: 0} 119 | m_PrefabInstance: {fileID: 0} 120 | m_PrefabAsset: {fileID: 0} 121 | serializedVersion: 6 122 | m_Component: 123 | - component: {fileID: 66738268} 124 | - component: {fileID: 66738270} 125 | - component: {fileID: 66738269} 126 | m_Layer: 5 127 | m_Name: Flag1 128 | m_TagString: Untagged 129 | m_Icon: {fileID: 0} 130 | m_NavMeshLayer: 0 131 | m_StaticEditorFlags: 0 132 | m_IsActive: 1 133 | --- !u!224 &66738268 134 | RectTransform: 135 | m_ObjectHideFlags: 0 136 | m_CorrespondingSourceObject: {fileID: 0} 137 | m_PrefabInstance: {fileID: 0} 138 | m_PrefabAsset: {fileID: 0} 139 | m_GameObject: {fileID: 66738267} 140 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 141 | m_LocalPosition: {x: 0, y: 0, z: 0} 142 | m_LocalScale: {x: 1, y: 1, z: 1} 143 | m_Children: [] 144 | m_Father: {fileID: 251592550} 145 | m_RootOrder: 0 146 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 147 | m_AnchorMin: {x: 0.5, y: 0.5} 148 | m_AnchorMax: {x: 0.5, y: 0.5} 149 | m_AnchoredPosition: {x: 267, y: -191} 150 | m_SizeDelta: {x: 256, y: 256} 151 | m_Pivot: {x: 0.5, y: 0.5} 152 | --- !u!114 &66738269 153 | MonoBehaviour: 154 | m_ObjectHideFlags: 0 155 | m_CorrespondingSourceObject: {fileID: 0} 156 | m_PrefabInstance: {fileID: 0} 157 | m_PrefabAsset: {fileID: 0} 158 | m_GameObject: {fileID: 66738267} 159 | m_Enabled: 1 160 | m_EditorHideFlags: 0 161 | m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} 162 | m_Name: 163 | m_EditorClassIdentifier: 164 | m_Material: {fileID: 0} 165 | m_Color: {r: 1, g: 1, b: 1, a: 1} 166 | m_RaycastTarget: 1 167 | m_OnCullStateChanged: 168 | m_PersistentCalls: 169 | m_Calls: [] 170 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 171 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 172 | m_Texture: {fileID: 2800000, guid: c6f34a2439ff7402fb737fc2ce917123, type: 3} 173 | m_UVRect: 174 | serializedVersion: 2 175 | x: 0 176 | y: 0 177 | width: 1 178 | height: 1 179 | --- !u!222 &66738270 180 | CanvasRenderer: 181 | m_ObjectHideFlags: 0 182 | m_CorrespondingSourceObject: {fileID: 0} 183 | m_PrefabInstance: {fileID: 0} 184 | m_PrefabAsset: {fileID: 0} 185 | m_GameObject: {fileID: 66738267} 186 | m_CullTransparentMesh: 0 187 | --- !u!1 &124028182 188 | GameObject: 189 | m_ObjectHideFlags: 0 190 | m_CorrespondingSourceObject: {fileID: 0} 191 | m_PrefabInstance: {fileID: 0} 192 | m_PrefabAsset: {fileID: 0} 193 | serializedVersion: 6 194 | m_Component: 195 | - component: {fileID: 124028183} 196 | - component: {fileID: 124028185} 197 | - component: {fileID: 124028184} 198 | m_Layer: 5 199 | m_Name: Fruit3 200 | m_TagString: Untagged 201 | m_Icon: {fileID: 0} 202 | m_NavMeshLayer: 0 203 | m_StaticEditorFlags: 0 204 | m_IsActive: 1 205 | --- !u!224 &124028183 206 | RectTransform: 207 | m_ObjectHideFlags: 0 208 | m_CorrespondingSourceObject: {fileID: 0} 209 | m_PrefabInstance: {fileID: 0} 210 | m_PrefabAsset: {fileID: 0} 211 | m_GameObject: {fileID: 124028182} 212 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 213 | m_LocalPosition: {x: 0, y: 0, z: 0} 214 | m_LocalScale: {x: 1, y: 1, z: 1} 215 | m_Children: [] 216 | m_Father: {fileID: 251592550} 217 | m_RootOrder: 4 218 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 219 | m_AnchorMin: {x: 0.5, y: 0.5} 220 | m_AnchorMax: {x: 0.5, y: 0.5} 221 | m_AnchoredPosition: {x: 305, y: 196} 222 | m_SizeDelta: {x: 180, y: 160} 223 | m_Pivot: {x: 0.5, y: 0.5} 224 | --- !u!114 &124028184 225 | MonoBehaviour: 226 | m_ObjectHideFlags: 0 227 | m_CorrespondingSourceObject: {fileID: 0} 228 | m_PrefabInstance: {fileID: 0} 229 | m_PrefabAsset: {fileID: 0} 230 | m_GameObject: {fileID: 124028182} 231 | m_Enabled: 1 232 | m_EditorHideFlags: 0 233 | m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} 234 | m_Name: 235 | m_EditorClassIdentifier: 236 | m_Material: {fileID: 0} 237 | m_Color: {r: 1, g: 1, b: 1, a: 1} 238 | m_RaycastTarget: 1 239 | m_OnCullStateChanged: 240 | m_PersistentCalls: 241 | m_Calls: [] 242 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 243 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 244 | m_Texture: {fileID: 2800000, guid: 6dcac6b2b8a704d91a0e1a1f27036fd2, type: 3} 245 | m_UVRect: 246 | serializedVersion: 2 247 | x: 0 248 | y: 0 249 | width: 1 250 | height: 1 251 | --- !u!222 &124028185 252 | CanvasRenderer: 253 | m_ObjectHideFlags: 0 254 | m_CorrespondingSourceObject: {fileID: 0} 255 | m_PrefabInstance: {fileID: 0} 256 | m_PrefabAsset: {fileID: 0} 257 | m_GameObject: {fileID: 124028182} 258 | m_CullTransparentMesh: 0 259 | --- !u!1 &251592546 260 | GameObject: 261 | m_ObjectHideFlags: 0 262 | m_CorrespondingSourceObject: {fileID: 0} 263 | m_PrefabInstance: {fileID: 0} 264 | m_PrefabAsset: {fileID: 0} 265 | serializedVersion: 6 266 | m_Component: 267 | - component: {fileID: 251592550} 268 | - component: {fileID: 251592549} 269 | - component: {fileID: 251592548} 270 | - component: {fileID: 251592547} 271 | m_Layer: 5 272 | m_Name: Canvas 273 | m_TagString: Untagged 274 | m_Icon: {fileID: 0} 275 | m_NavMeshLayer: 0 276 | m_StaticEditorFlags: 0 277 | m_IsActive: 1 278 | --- !u!114 &251592547 279 | MonoBehaviour: 280 | m_ObjectHideFlags: 0 281 | m_CorrespondingSourceObject: {fileID: 0} 282 | m_PrefabInstance: {fileID: 0} 283 | m_PrefabAsset: {fileID: 0} 284 | m_GameObject: {fileID: 251592546} 285 | m_Enabled: 1 286 | m_EditorHideFlags: 0 287 | m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} 288 | m_Name: 289 | m_EditorClassIdentifier: 290 | m_IgnoreReversedGraphics: 1 291 | m_BlockingObjects: 0 292 | m_BlockingMask: 293 | serializedVersion: 2 294 | m_Bits: 4294967295 295 | --- !u!114 &251592548 296 | MonoBehaviour: 297 | m_ObjectHideFlags: 0 298 | m_CorrespondingSourceObject: {fileID: 0} 299 | m_PrefabInstance: {fileID: 0} 300 | m_PrefabAsset: {fileID: 0} 301 | m_GameObject: {fileID: 251592546} 302 | m_Enabled: 1 303 | m_EditorHideFlags: 0 304 | m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} 305 | m_Name: 306 | m_EditorClassIdentifier: 307 | m_UiScaleMode: 0 308 | m_ReferencePixelsPerUnit: 100 309 | m_ScaleFactor: 1 310 | m_ReferenceResolution: {x: 800, y: 600} 311 | m_ScreenMatchMode: 0 312 | m_MatchWidthOrHeight: 0 313 | m_PhysicalUnit: 3 314 | m_FallbackScreenDPI: 96 315 | m_DefaultSpriteDPI: 96 316 | m_DynamicPixelsPerUnit: 1 317 | --- !u!223 &251592549 318 | Canvas: 319 | m_ObjectHideFlags: 0 320 | m_CorrespondingSourceObject: {fileID: 0} 321 | m_PrefabInstance: {fileID: 0} 322 | m_PrefabAsset: {fileID: 0} 323 | m_GameObject: {fileID: 251592546} 324 | m_Enabled: 1 325 | serializedVersion: 3 326 | m_RenderMode: 0 327 | m_Camera: {fileID: 0} 328 | m_PlaneDistance: 100 329 | m_PixelPerfect: 0 330 | m_ReceivesEvents: 1 331 | m_OverrideSorting: 0 332 | m_OverridePixelPerfect: 0 333 | m_SortingBucketNormalizedSize: 0 334 | m_AdditionalShaderChannelsFlag: 0 335 | m_SortingLayerID: 0 336 | m_SortingOrder: 0 337 | m_TargetDisplay: 0 338 | --- !u!224 &251592550 339 | RectTransform: 340 | m_ObjectHideFlags: 0 341 | m_CorrespondingSourceObject: {fileID: 0} 342 | m_PrefabInstance: {fileID: 0} 343 | m_PrefabAsset: {fileID: 0} 344 | m_GameObject: {fileID: 251592546} 345 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 346 | m_LocalPosition: {x: 0, y: 0, z: 0} 347 | m_LocalScale: {x: 0, y: 0, z: 0} 348 | m_Children: 349 | - {fileID: 66738268} 350 | - {fileID: 1180237253} 351 | - {fileID: 860987515} 352 | - {fileID: 1083504353} 353 | - {fileID: 124028183} 354 | m_Father: {fileID: 585987112} 355 | m_RootOrder: 0 356 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 357 | m_AnchorMin: {x: 0, y: 0} 358 | m_AnchorMax: {x: 0, y: 0} 359 | m_AnchoredPosition: {x: 0, y: 0} 360 | m_SizeDelta: {x: 0, y: 0} 361 | m_Pivot: {x: 0, y: 0} 362 | --- !u!1 &534669902 363 | GameObject: 364 | m_ObjectHideFlags: 0 365 | m_CorrespondingSourceObject: {fileID: 0} 366 | m_PrefabInstance: {fileID: 0} 367 | m_PrefabAsset: {fileID: 0} 368 | serializedVersion: 6 369 | m_Component: 370 | - component: {fileID: 534669905} 371 | - component: {fileID: 534669904} 372 | - component: {fileID: 534669903} 373 | m_Layer: 0 374 | m_Name: Main Camera 375 | m_TagString: MainCamera 376 | m_Icon: {fileID: 0} 377 | m_NavMeshLayer: 0 378 | m_StaticEditorFlags: 0 379 | m_IsActive: 1 380 | --- !u!81 &534669903 381 | AudioListener: 382 | m_ObjectHideFlags: 0 383 | m_CorrespondingSourceObject: {fileID: 0} 384 | m_PrefabInstance: {fileID: 0} 385 | m_PrefabAsset: {fileID: 0} 386 | m_GameObject: {fileID: 534669902} 387 | m_Enabled: 1 388 | --- !u!20 &534669904 389 | Camera: 390 | m_ObjectHideFlags: 0 391 | m_CorrespondingSourceObject: {fileID: 0} 392 | m_PrefabInstance: {fileID: 0} 393 | m_PrefabAsset: {fileID: 0} 394 | m_GameObject: {fileID: 534669902} 395 | m_Enabled: 1 396 | serializedVersion: 2 397 | m_ClearFlags: 2 398 | m_BackGroundColor: {r: 0.6037736, g: 0.6037736, b: 0.6037736, a: 0} 399 | m_projectionMatrixMode: 1 400 | m_SensorSize: {x: 36, y: 24} 401 | m_LensShift: {x: 0, y: 0} 402 | m_GateFitMode: 2 403 | m_FocalLength: 50 404 | m_NormalizedViewPortRect: 405 | serializedVersion: 2 406 | x: 0 407 | y: 0 408 | width: 1 409 | height: 1 410 | near clip plane: 0.3 411 | far clip plane: 1000 412 | field of view: 60 413 | orthographic: 0 414 | orthographic size: 5 415 | m_Depth: -1 416 | m_CullingMask: 417 | serializedVersion: 2 418 | m_Bits: 4294967295 419 | m_RenderingPath: -1 420 | m_TargetTexture: {fileID: 0} 421 | m_TargetDisplay: 0 422 | m_TargetEye: 3 423 | m_HDR: 1 424 | m_AllowMSAA: 1 425 | m_AllowDynamicResolution: 0 426 | m_ForceIntoRT: 0 427 | m_OcclusionCulling: 1 428 | m_StereoConvergence: 10 429 | m_StereoSeparation: 0.022 430 | --- !u!4 &534669905 431 | Transform: 432 | m_ObjectHideFlags: 0 433 | m_CorrespondingSourceObject: {fileID: 0} 434 | m_PrefabInstance: {fileID: 0} 435 | m_PrefabAsset: {fileID: 0} 436 | m_GameObject: {fileID: 534669902} 437 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 438 | m_LocalPosition: {x: 0, y: 1, z: -10} 439 | m_LocalScale: {x: 1, y: 1, z: 1} 440 | m_Children: [] 441 | m_Father: {fileID: 0} 442 | m_RootOrder: 0 443 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 444 | --- !u!1 &585987111 445 | GameObject: 446 | m_ObjectHideFlags: 0 447 | m_CorrespondingSourceObject: {fileID: 0} 448 | m_PrefabInstance: {fileID: 0} 449 | m_PrefabAsset: {fileID: 0} 450 | serializedVersion: 6 451 | m_Component: 452 | - component: {fileID: 585987112} 453 | m_Layer: 0 454 | m_Name: UI 455 | m_TagString: Untagged 456 | m_Icon: {fileID: 0} 457 | m_NavMeshLayer: 0 458 | m_StaticEditorFlags: 0 459 | m_IsActive: 1 460 | --- !u!4 &585987112 461 | Transform: 462 | m_ObjectHideFlags: 0 463 | m_CorrespondingSourceObject: {fileID: 0} 464 | m_PrefabInstance: {fileID: 0} 465 | m_PrefabAsset: {fileID: 0} 466 | m_GameObject: {fileID: 585987111} 467 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 468 | m_LocalPosition: {x: 529.6157, y: 379.17175, z: 17.661573} 469 | m_LocalScale: {x: 1, y: 1, z: 1} 470 | m_Children: 471 | - {fileID: 251592550} 472 | - {fileID: 1424863092} 473 | m_Father: {fileID: 0} 474 | m_RootOrder: 2 475 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 476 | --- !u!1 &860987514 477 | GameObject: 478 | m_ObjectHideFlags: 0 479 | m_CorrespondingSourceObject: {fileID: 0} 480 | m_PrefabInstance: {fileID: 0} 481 | m_PrefabAsset: {fileID: 0} 482 | serializedVersion: 6 483 | m_Component: 484 | - component: {fileID: 860987515} 485 | - component: {fileID: 860987517} 486 | - component: {fileID: 860987516} 487 | m_Layer: 5 488 | m_Name: Fruit1 489 | m_TagString: Untagged 490 | m_Icon: {fileID: 0} 491 | m_NavMeshLayer: 0 492 | m_StaticEditorFlags: 0 493 | m_IsActive: 1 494 | --- !u!224 &860987515 495 | RectTransform: 496 | m_ObjectHideFlags: 0 497 | m_CorrespondingSourceObject: {fileID: 0} 498 | m_PrefabInstance: {fileID: 0} 499 | m_PrefabAsset: {fileID: 0} 500 | m_GameObject: {fileID: 860987514} 501 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 502 | m_LocalPosition: {x: 0, y: 0, z: 0} 503 | m_LocalScale: {x: 1, y: 1, z: 1} 504 | m_Children: [] 505 | m_Father: {fileID: 251592550} 506 | m_RootOrder: 2 507 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 508 | m_AnchorMin: {x: 0.5, y: 0.5} 509 | m_AnchorMax: {x: 0.5, y: 0.5} 510 | m_AnchoredPosition: {x: -79, y: -239} 511 | m_SizeDelta: {x: 180, y: 160} 512 | m_Pivot: {x: 0.5, y: 0.5} 513 | --- !u!114 &860987516 514 | MonoBehaviour: 515 | m_ObjectHideFlags: 0 516 | m_CorrespondingSourceObject: {fileID: 0} 517 | m_PrefabInstance: {fileID: 0} 518 | m_PrefabAsset: {fileID: 0} 519 | m_GameObject: {fileID: 860987514} 520 | m_Enabled: 1 521 | m_EditorHideFlags: 0 522 | m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} 523 | m_Name: 524 | m_EditorClassIdentifier: 525 | m_Material: {fileID: 0} 526 | m_Color: {r: 1, g: 1, b: 1, a: 1} 527 | m_RaycastTarget: 1 528 | m_OnCullStateChanged: 529 | m_PersistentCalls: 530 | m_Calls: [] 531 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 532 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 533 | m_Texture: {fileID: 2800000, guid: 346cb0e908ef0497abf3facf45a6b5e9, type: 3} 534 | m_UVRect: 535 | serializedVersion: 2 536 | x: 0 537 | y: 0 538 | width: 1 539 | height: 1 540 | --- !u!222 &860987517 541 | CanvasRenderer: 542 | m_ObjectHideFlags: 0 543 | m_CorrespondingSourceObject: {fileID: 0} 544 | m_PrefabInstance: {fileID: 0} 545 | m_PrefabAsset: {fileID: 0} 546 | m_GameObject: {fileID: 860987514} 547 | m_CullTransparentMesh: 0 548 | --- !u!1 &1042984420 549 | GameObject: 550 | m_ObjectHideFlags: 0 551 | m_CorrespondingSourceObject: {fileID: 0} 552 | m_PrefabInstance: {fileID: 0} 553 | m_PrefabAsset: {fileID: 0} 554 | serializedVersion: 6 555 | m_Component: 556 | - component: {fileID: 1042984422} 557 | - component: {fileID: 1042984423} 558 | m_Layer: 0 559 | m_Name: Main 560 | m_TagString: Untagged 561 | m_Icon: {fileID: 0} 562 | m_NavMeshLayer: 0 563 | m_StaticEditorFlags: 0 564 | m_IsActive: 1 565 | --- !u!4 &1042984422 566 | Transform: 567 | m_ObjectHideFlags: 0 568 | m_CorrespondingSourceObject: {fileID: 0} 569 | m_PrefabInstance: {fileID: 0} 570 | m_PrefabAsset: {fileID: 0} 571 | m_GameObject: {fileID: 1042984420} 572 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 573 | m_LocalPosition: {x: 529.6157, y: 379.17175, z: 17.661573} 574 | m_LocalScale: {x: 1, y: 1, z: 1} 575 | m_Children: [] 576 | m_Father: {fileID: 0} 577 | m_RootOrder: 1 578 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 579 | --- !u!114 &1042984423 580 | MonoBehaviour: 581 | m_ObjectHideFlags: 0 582 | m_CorrespondingSourceObject: {fileID: 0} 583 | m_PrefabInstance: {fileID: 0} 584 | m_PrefabAsset: {fileID: 0} 585 | m_GameObject: {fileID: 1042984420} 586 | m_Enabled: 1 587 | m_EditorHideFlags: 0 588 | m_Script: {fileID: 11500000, guid: b6ff3b7e4068a4a188aeb25a1fc73f36, type: 3} 589 | m_Name: 590 | m_EditorClassIdentifier: 591 | flag1: {fileID: 66738269} 592 | flag2: {fileID: 1180237254} 593 | fruit1: {fileID: 860987516} 594 | fruit2: {fileID: 1083504354} 595 | fruit3: {fileID: 124028184} 596 | --- !u!1 &1083504352 597 | GameObject: 598 | m_ObjectHideFlags: 0 599 | m_CorrespondingSourceObject: {fileID: 0} 600 | m_PrefabInstance: {fileID: 0} 601 | m_PrefabAsset: {fileID: 0} 602 | serializedVersion: 6 603 | m_Component: 604 | - component: {fileID: 1083504353} 605 | - component: {fileID: 1083504355} 606 | - component: {fileID: 1083504354} 607 | m_Layer: 5 608 | m_Name: Fruit2 609 | m_TagString: Untagged 610 | m_Icon: {fileID: 0} 611 | m_NavMeshLayer: 0 612 | m_StaticEditorFlags: 0 613 | m_IsActive: 1 614 | --- !u!224 &1083504353 615 | RectTransform: 616 | m_ObjectHideFlags: 0 617 | m_CorrespondingSourceObject: {fileID: 0} 618 | m_PrefabInstance: {fileID: 0} 619 | m_PrefabAsset: {fileID: 0} 620 | m_GameObject: {fileID: 1083504352} 621 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 622 | m_LocalPosition: {x: 0, y: 0, z: 0} 623 | m_LocalScale: {x: 1, y: 1, z: 1} 624 | m_Children: [] 625 | m_Father: {fileID: 251592550} 626 | m_RootOrder: 3 627 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 628 | m_AnchorMin: {x: 0.5, y: 0.5} 629 | m_AnchorMax: {x: 0.5, y: 0.5} 630 | m_AnchoredPosition: {x: -329, y: -239} 631 | m_SizeDelta: {x: 180, y: 160} 632 | m_Pivot: {x: 0.5, y: 0.5} 633 | --- !u!114 &1083504354 634 | MonoBehaviour: 635 | m_ObjectHideFlags: 0 636 | m_CorrespondingSourceObject: {fileID: 0} 637 | m_PrefabInstance: {fileID: 0} 638 | m_PrefabAsset: {fileID: 0} 639 | m_GameObject: {fileID: 1083504352} 640 | m_Enabled: 1 641 | m_EditorHideFlags: 0 642 | m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} 643 | m_Name: 644 | m_EditorClassIdentifier: 645 | m_Material: {fileID: 0} 646 | m_Color: {r: 1, g: 1, b: 1, a: 1} 647 | m_RaycastTarget: 1 648 | m_OnCullStateChanged: 649 | m_PersistentCalls: 650 | m_Calls: [] 651 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 652 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 653 | m_Texture: {fileID: 2800000, guid: 01dedd200c8234d5b9dab12dc8c5735e, type: 3} 654 | m_UVRect: 655 | serializedVersion: 2 656 | x: 0 657 | y: 0 658 | width: 1 659 | height: 1 660 | --- !u!222 &1083504355 661 | CanvasRenderer: 662 | m_ObjectHideFlags: 0 663 | m_CorrespondingSourceObject: {fileID: 0} 664 | m_PrefabInstance: {fileID: 0} 665 | m_PrefabAsset: {fileID: 0} 666 | m_GameObject: {fileID: 1083504352} 667 | m_CullTransparentMesh: 0 668 | --- !u!1 &1180237252 669 | GameObject: 670 | m_ObjectHideFlags: 0 671 | m_CorrespondingSourceObject: {fileID: 0} 672 | m_PrefabInstance: {fileID: 0} 673 | m_PrefabAsset: {fileID: 0} 674 | serializedVersion: 6 675 | m_Component: 676 | - component: {fileID: 1180237253} 677 | - component: {fileID: 1180237255} 678 | - component: {fileID: 1180237254} 679 | m_Layer: 5 680 | m_Name: Flag2 681 | m_TagString: Untagged 682 | m_Icon: {fileID: 0} 683 | m_NavMeshLayer: 0 684 | m_StaticEditorFlags: 0 685 | m_IsActive: 1 686 | --- !u!224 &1180237253 687 | RectTransform: 688 | m_ObjectHideFlags: 0 689 | m_CorrespondingSourceObject: {fileID: 0} 690 | m_PrefabInstance: {fileID: 0} 691 | m_PrefabAsset: {fileID: 0} 692 | m_GameObject: {fileID: 1180237252} 693 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 694 | m_LocalPosition: {x: 0, y: 0, z: 0} 695 | m_LocalScale: {x: 1, y: 1, z: 1} 696 | m_Children: [] 697 | m_Father: {fileID: 251592550} 698 | m_RootOrder: 1 699 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 700 | m_AnchorMin: {x: 0.5, y: 0.5} 701 | m_AnchorMax: {x: 0.5, y: 0.5} 702 | m_AnchoredPosition: {x: -207, y: 50} 703 | m_SizeDelta: {x: 256, y: 256} 704 | m_Pivot: {x: 0.5, y: 0.5} 705 | --- !u!114 &1180237254 706 | MonoBehaviour: 707 | m_ObjectHideFlags: 0 708 | m_CorrespondingSourceObject: {fileID: 0} 709 | m_PrefabInstance: {fileID: 0} 710 | m_PrefabAsset: {fileID: 0} 711 | m_GameObject: {fileID: 1180237252} 712 | m_Enabled: 1 713 | m_EditorHideFlags: 0 714 | m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} 715 | m_Name: 716 | m_EditorClassIdentifier: 717 | m_Material: {fileID: 0} 718 | m_Color: {r: 1, g: 1, b: 1, a: 1} 719 | m_RaycastTarget: 1 720 | m_OnCullStateChanged: 721 | m_PersistentCalls: 722 | m_Calls: [] 723 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 724 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 725 | m_Texture: {fileID: 2800000, guid: 8334e2f462f384b4d9b0cfe9d8601366, type: 3} 726 | m_UVRect: 727 | serializedVersion: 2 728 | x: 0 729 | y: 0 730 | width: 1 731 | height: 1 732 | --- !u!222 &1180237255 733 | CanvasRenderer: 734 | m_ObjectHideFlags: 0 735 | m_CorrespondingSourceObject: {fileID: 0} 736 | m_PrefabInstance: {fileID: 0} 737 | m_PrefabAsset: {fileID: 0} 738 | m_GameObject: {fileID: 1180237252} 739 | m_CullTransparentMesh: 0 740 | --- !u!1 &1424863089 741 | GameObject: 742 | m_ObjectHideFlags: 0 743 | m_CorrespondingSourceObject: {fileID: 0} 744 | m_PrefabInstance: {fileID: 0} 745 | m_PrefabAsset: {fileID: 0} 746 | serializedVersion: 6 747 | m_Component: 748 | - component: {fileID: 1424863092} 749 | - component: {fileID: 1424863091} 750 | - component: {fileID: 1424863090} 751 | m_Layer: 0 752 | m_Name: EventSystem 753 | m_TagString: Untagged 754 | m_Icon: {fileID: 0} 755 | m_NavMeshLayer: 0 756 | m_StaticEditorFlags: 0 757 | m_IsActive: 1 758 | --- !u!114 &1424863090 759 | MonoBehaviour: 760 | m_ObjectHideFlags: 0 761 | m_CorrespondingSourceObject: {fileID: 0} 762 | m_PrefabInstance: {fileID: 0} 763 | m_PrefabAsset: {fileID: 0} 764 | m_GameObject: {fileID: 1424863089} 765 | m_Enabled: 1 766 | m_EditorHideFlags: 0 767 | m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} 768 | m_Name: 769 | m_EditorClassIdentifier: 770 | m_HorizontalAxis: Horizontal 771 | m_VerticalAxis: Vertical 772 | m_SubmitButton: Submit 773 | m_CancelButton: Cancel 774 | m_InputActionsPerSecond: 10 775 | m_RepeatDelay: 0.5 776 | m_ForceModuleActive: 0 777 | --- !u!114 &1424863091 778 | MonoBehaviour: 779 | m_ObjectHideFlags: 0 780 | m_CorrespondingSourceObject: {fileID: 0} 781 | m_PrefabInstance: {fileID: 0} 782 | m_PrefabAsset: {fileID: 0} 783 | m_GameObject: {fileID: 1424863089} 784 | m_Enabled: 1 785 | m_EditorHideFlags: 0 786 | m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} 787 | m_Name: 788 | m_EditorClassIdentifier: 789 | m_FirstSelected: {fileID: 0} 790 | m_sendNavigationEvents: 1 791 | m_DragThreshold: 10 792 | --- !u!4 &1424863092 793 | Transform: 794 | m_ObjectHideFlags: 0 795 | m_CorrespondingSourceObject: {fileID: 0} 796 | m_PrefabInstance: {fileID: 0} 797 | m_PrefabAsset: {fileID: 0} 798 | m_GameObject: {fileID: 1424863089} 799 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 800 | m_LocalPosition: {x: -529.6157, y: -379.17175, z: -17.661573} 801 | m_LocalScale: {x: 1, y: 1, z: 1} 802 | m_Children: [] 803 | m_Father: {fileID: 585987112} 804 | m_RootOrder: 1 805 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 806 | -------------------------------------------------------------------------------- /Assets/Example/Example.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c288351a2c3b14089bca55981a3fc480 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Example/Resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 56b372fafd55943dda70c740ba965abf 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Example/Resources/Flag.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 216d5b146446446c3b88d5f408af11f1 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Example/Resources/Flag/celestial.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/Resources/Flag/celestial.jpg -------------------------------------------------------------------------------- /Assets/Example/Resources/Flag/celestial.jpg.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8334e2f462f384b4d9b0cfe9d8601366 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/Resources/Flag/flower.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/Resources/Flag/flower.jpg -------------------------------------------------------------------------------- /Assets/Example/Resources/Flag/flower.jpg.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a5b88e942f5154f1c975e2de5b93c287 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/Resources/Flag/greendragon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/Resources/Flag/greendragon.jpg -------------------------------------------------------------------------------- /Assets/Example/Resources/Flag/greendragon.jpg.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e49e67c1bd8894de5b806ece5d3bb2c4 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/Resources/Flag/treeolife.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/Resources/Flag/treeolife.jpg -------------------------------------------------------------------------------- /Assets/Example/Resources/Flag/treeolife.jpg.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c6f34a2439ff7402fb737fc2ce917123 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eaccf9e19c82f469aa6e971a37855001 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 569d524b4001f45738741159da25814d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/StreamingAssets/Fruit/Fruit_1.png -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_1.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eb18078aafeac4679be768be450cfa45 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/StreamingAssets/Fruit/Fruit_2.png -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_2.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6dcac6b2b8a704d91a0e1a1f27036fd2 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/StreamingAssets/Fruit/Fruit_3.png -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_3.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 01dedd200c8234d5b9dab12dc8c5735e 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/StreamingAssets/Fruit/Fruit_4.png -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_4.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8078e1dad3bc84dafbde2152c4bdd328 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/StreamingAssets/Fruit/Fruit_5.png -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_5.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 346cb0e908ef0497abf3facf45a6b5e9 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/StreamingAssets/Fruit/Fruit_6.png -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_6.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 16df1c73582184fc1b5817a8e5fa60a4 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/StreamingAssets/Fruit/Fruit_7.png -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_7.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c0a7a066b775943bf95e38305743b181 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Assets/Example/StreamingAssets/Fruit/Fruit_8.png -------------------------------------------------------------------------------- /Assets/Example/StreamingAssets/Fruit/Fruit_8.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: da1003d6d1cad4a3caf3805b70f3829e 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | - serializedVersion: 2 73 | buildTarget: Standalone 74 | maxTextureSize: 2048 75 | resizeAlgorithm: 0 76 | textureFormat: -1 77 | textureCompression: 1 78 | compressionQuality: 50 79 | crunchedCompression: 0 80 | allowsAlphaSplitting: 0 81 | overridden: 0 82 | androidETC2FallbackOverride: 0 83 | spriteSheet: 84 | serializedVersion: 2 85 | sprites: [] 86 | outline: [] 87 | physicsShape: [] 88 | bones: [] 89 | spriteID: 90 | vertices: [] 91 | indices: 92 | edges: [] 93 | weights: [] 94 | spritePackingTag: 95 | pSDRemoveMatte: 0 96 | pSDShowRemoveMatteOption: 0 97 | userData: 98 | assetBundleName: 99 | assetBundleVariant: 100 | -------------------------------------------------------------------------------- /Assets/Example/main.cs: -------------------------------------------------------------------------------- 1 | using RuntimeTextureAtlas; 2 | using System.Collections; 3 | using System.IO; 4 | using UnityEngine; 5 | using UnityEngine.Networking; 6 | using UnityEngine.UI; 7 | 8 | public class main : MonoBehaviour 9 | { 10 | // ui界面控件 11 | public RawImage flag1; 12 | public RawImage flag2; 13 | public RawImage fruit1; 14 | public RawImage fruit2; 15 | public RawImage fruit3; 16 | 17 | // 图片资源路径 18 | private string[] flags; 19 | private string[] fruits; 20 | 21 | private void Start() 22 | { 23 | InitUI(); 24 | ReloadUI(); 25 | } 26 | 27 | private void OnGUI() 28 | { 29 | if(GUI.Button(new Rect(10, 10, 200, 60), "Reload")) 30 | { 31 | ReloadUI(); 32 | } 33 | } 34 | 35 | /// 36 | /// 初始化UI资源路径 37 | /// 38 | void InitUI() 39 | { 40 | flags = new string[] { "celestial", "flower", "greendragon", "treeolife" }; 41 | for(int i = 0; i < flags.Length; i++) 42 | flags[i] = Path.Combine("Flag", flags[i]); 43 | 44 | fruits = new string[8]; 45 | for(int i = 0; i < 8; i++) 46 | fruits[i] = @"file://" + Path.Combine(Application.dataPath, "Example", "StreamingAssets", "Fruit", string.Format("Fruit_{0}.png", i + 1)); 47 | } 48 | 49 | /// 50 | /// 重新加载UI 51 | /// 52 | private void ReloadUI() 53 | { 54 | // 随机加载两个flags图片并显示 55 | Shuffle(flags); 56 | LoadFromResources(flag1, flags[0]); 57 | LoadFromResources(flag2, flags[1]); 58 | 59 | // 随机加载三个fruits图片并显示 60 | Shuffle(fruits); 61 | StartCoroutine(LoadFromFile(fruit1, fruits[0])); 62 | StartCoroutine(LoadFromFile(fruit2, fruits[1])); 63 | StartCoroutine(LoadFromFile(fruit3, fruits[2])); 64 | } 65 | 66 | /// 67 | /// 随机打乱数组元素顺序 68 | /// 69 | private void Shuffle(string[] arr) 70 | { 71 | for(var i = 0; i < arr.Length - 1; i++) 72 | { 73 | var j = Random.Range(i, arr.Length); 74 | var temp = arr[i]; 75 | arr[i] = arr[j]; 76 | arr[j] = temp; 77 | } 78 | } 79 | 80 | /// 81 | /// 从Resources加载贴图 82 | /// 83 | private void LoadFromResources(RawImage image, string file) 84 | { 85 | // 同步加载贴图 86 | var texture = Resources.Load(file); 87 | 88 | // 将贴图打包到图集,并应用到RawImage控件 89 | image.PackTexture(texture); 90 | } 91 | 92 | /// 93 | /// 从外部文件加载贴图 94 | /// 95 | private IEnumerator LoadFromFile(RawImage image, string file) 96 | { 97 | // 异步加载贴图 98 | using(UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(file)) 99 | { 100 | yield return uwr.SendWebRequest(); 101 | 102 | if(!uwr.isNetworkError && !uwr.isHttpError) 103 | { 104 | // 贴图加载完毕 105 | var texture = DownloadHandlerTexture.GetContent(uwr); 106 | 107 | // 将贴图打包到图集,并应用到RawImage控件 108 | image.PackTexture(texture, 109 | () => Destroy(texture)); // 打包成功后卸载原图 110 | } 111 | } 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /Assets/Example/main.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b6ff3b7e4068a4a188aeb25a1fc73f36 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b0c14f13ceb194c4990137ce2158433e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 405f50d23f2c2450880a18be8a6b2745 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Editor/RawImageAgentEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEditor; 3 | 4 | namespace RuntimeTextureAtlas 5 | { 6 | [CustomEditor(typeof(RawImageAgent))] 7 | public class RawImageAgentEditor : Editor 8 | { 9 | public override void OnInspectorGUI() 10 | { 11 | var agent = ((RawImageAgent)target); 12 | 13 | if(agent.textureAtlas == null) 14 | return; 15 | 16 | EditorGUILayout.LabelField("SubTexture Position"); 17 | EditorGUILayout.LabelField(string.Format("{0}, {1}, {2}, {3}", agent.position.x, agent.position.y, agent.position.width, agent.position.height)); 18 | 19 | GUILayout.Space(10); 20 | var textureAtlas = agent.textureAtlas; 21 | var width = textureAtlas.texture.width; 22 | var height = textureAtlas.texture.height; 23 | EditorGUILayout.LabelField(string.Format("Atlas Size: {0} X {1}", width, height)); 24 | EditorGUI.DrawPreviewTexture(GUILayoutUtility.GetAspectRect((float)width / height), textureAtlas.texture); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Editor/RawImageAgentEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 875fc836e3b3743a5ade12af886cb31e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Editor/TextureAtlasManagerEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEditor; 3 | 4 | namespace RuntimeTextureAtlas 5 | { 6 | [CustomEditor(typeof(TextureAtlasManager))] 7 | public class TextureAtlasManagerEditor : Editor 8 | { 9 | public override void OnInspectorGUI() 10 | { 11 | serializedObject.Update(); 12 | 13 | if(EditorApplication.isPlaying) 14 | { 15 | DrawPlayModeGUI(); 16 | } 17 | else 18 | { 19 | DrawDefaultInspector(); 20 | } 21 | 22 | serializedObject.ApplyModifiedProperties(); 23 | } 24 | 25 | private void DrawPlayModeGUI() 26 | { 27 | var textureAtlas = ((TextureAtlasManager)target).textureAtlas; 28 | var width = textureAtlas.texture.width; 29 | var height = textureAtlas.texture.height; 30 | 31 | GUILayout.Space(10); 32 | EditorGUILayout.LabelField(string.Format("Atlas Size: {0} X {1}", width, height)); 33 | EditorGUI.DrawPreviewTexture(GUILayoutUtility.GetAspectRect((float)width / height), textureAtlas.texture); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Editor/TextureAtlasManagerEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c9913c56e252849c085371bd19e834c4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e54872a956d0d4b2a9682e897ae757d4 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Resources/DrawTexture.shader: -------------------------------------------------------------------------------- 1 | Shader "Hidden/RuntimeTextureAtlas/DrawTexture" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | } 7 | 8 | SubShader 9 | { 10 | Cull Off ZWrite Off ZTest Always 11 | 12 | Pass 13 | { 14 | CGPROGRAM 15 | #pragma vertex vert 16 | #pragma fragment frag 17 | 18 | #include "UnityCG.cginc" 19 | 20 | sampler2D _MainTex; 21 | float4x4 _ImageMVP; 22 | 23 | v2f_img vert (appdata_img v) 24 | { 25 | v2f_img o; 26 | o.pos = mul(_ImageMVP, v.vertex); 27 | o.uv = v.texcoord; 28 | 29 | return o; 30 | } 31 | 32 | fixed4 frag (v2f_img i) : SV_Target 33 | { 34 | return tex2D(_MainTex, i.uv); 35 | } 36 | ENDCG 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Resources/DrawTexture.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d962d16354ce24eaf8af0b076c4baecf 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4cc040fb01abe4b30b1fe0fcbe6bfe12 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/Packer.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9b8c4132b55634fafad2b292600b4eaf 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/Packer/Column.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | namespace RuntimeTextureAtlas 6 | { 7 | /// 8 | /// 宽度固定的矩形(列) 9 | /// 10 | public class Column : Rectangle 11 | { 12 | /// 13 | /// 子行 14 | /// 15 | private List rows; 16 | 17 | /// 18 | /// 剩余可分配高度 19 | /// 20 | private int heightAvailable 21 | { 22 | get 23 | { 24 | if(used) 25 | return 0; 26 | 27 | if(rows == null) 28 | return position.height; 29 | 30 | int height = position.height; 31 | foreach(var row in rows) 32 | height -= row.position.height; 33 | 34 | return height; 35 | } 36 | } 37 | 38 | /// 39 | /// 构造函数 40 | /// 41 | public Column(int x, int y, int w, int h) : base(x, y, w, h) 42 | { 43 | } 44 | 45 | /// 46 | /// 插入矩形 47 | /// 48 | public override Rectangle Insert(int w, int h) 49 | { 50 | // 已被占用,无法分配 51 | if(used) 52 | return null; 53 | 54 | // 宽度不足,无法分配 55 | if(w > position.width) 56 | return null; 57 | 58 | // 尺寸完全匹配,改为占用状态 59 | if(rows == null && position.width == w && position.height == h) 60 | { 61 | used = true; 62 | return this; 63 | } 64 | 65 | if(rows == null) 66 | rows = new List(); 67 | 68 | // 尝试从已有子行中分配 69 | foreach(var row in rows) 70 | { 71 | var rect = row.Insert(w, h); 72 | if(rect != null) 73 | return rect; 74 | } 75 | 76 | // 高度超过可用高度,分配失败 77 | if (h > heightAvailable) 78 | return null; 79 | 80 | // 生成新行 81 | var newRow = new Row(position.x, position.y + position.height - heightAvailable, position.width, h); 82 | rows.Add(newRow); 83 | rows.Sort((lhs, rhs) => { return lhs.position.height.CompareTo(rhs.position.height); }); 84 | 85 | // 从新行中分配 86 | return newRow.Insert(w, h); 87 | } 88 | 89 | /// 90 | /// 移除矩形 91 | /// 92 | public override bool Remove(RectInt rect) 93 | { 94 | if(!Contains(rect)) 95 | return false; 96 | 97 | if (used && position.Equals(rect)) 98 | { 99 | used = false; 100 | return true; 101 | } 102 | 103 | if (rows != null) 104 | { 105 | foreach(var row in rows) 106 | { 107 | if(row.Remove(rect)) 108 | return true; 109 | } 110 | } 111 | 112 | return false; 113 | } 114 | 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/Packer/Column.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cfe6bab14f21c4670ac726094aa4ed15 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/Packer/GreedyPacker.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace RuntimeTextureAtlas 4 | { 5 | /// 6 | /// 使用贪婪算法的二维打包器 7 | /// 8 | public class GreedyPacker : IBinaryPacker 9 | { 10 | /// 11 | /// 矩形空间 12 | /// 13 | private Rectangle root; 14 | 15 | /// 16 | /// 构造函数 17 | /// 18 | public GreedyPacker(int w, int h) 19 | { 20 | root = new Column(0, 0, w, h); 21 | } 22 | 23 | /// 24 | /// 插入矩形 25 | /// 26 | public RectInt Insert(int w, int h) 27 | { 28 | var rect = root.Insert(w, h); 29 | if(rect == null) 30 | return new RectInt(-1, -1, -1, -1); 31 | 32 | return rect.position; 33 | } 34 | 35 | /// 36 | /// 移除矩形 37 | /// 38 | public void Remove(RectInt pos) 39 | { 40 | root.Remove(pos); 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/Packer/GreedyPacker.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d36d6fb739e604e15b5236f5e94944c7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/Packer/IBinaryPacker.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace RuntimeTextureAtlas 4 | { 5 | /// 6 | /// 二维打包器接口 7 | /// 8 | public interface IBinaryPacker 9 | { 10 | /// 11 | /// 插入矩形 12 | /// 13 | RectInt Insert(int w, int h); 14 | 15 | /// 16 | /// 移除矩形 17 | /// 18 | void Remove(RectInt pos); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/Packer/IBinaryPacker.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bf7acee27ad2443adbfb60d9a36dc129 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/Packer/Rectangle.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | namespace RuntimeTextureAtlas 6 | { 7 | /// 8 | /// 矩形 9 | /// 10 | public abstract class Rectangle 11 | { 12 | /// 13 | /// 矩形坐标 14 | /// 15 | public RectInt position; 16 | 17 | /// 18 | /// 是否已经被占用 19 | /// 20 | public bool used; 21 | 22 | /// 23 | /// 构造函数 24 | /// 25 | public Rectangle(int x, int y, int w, int h) 26 | { 27 | position = new RectInt(x, y, w, h); 28 | } 29 | 30 | /// 31 | /// 判断矩形是否包含 32 | /// 33 | public bool Contains(RectInt rect) 34 | { 35 | return (position.x <= rect.x && position.y <= rect.y && position.xMax >= rect.xMax && position.yMax >= rect.yMax); 36 | } 37 | 38 | /// 39 | /// 插入矩形 40 | /// 41 | public abstract Rectangle Insert(int w, int h); 42 | 43 | /// 44 | /// 移除矩形 45 | /// 46 | public abstract bool Remove(RectInt rect); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/Packer/Rectangle.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5ec8e9edb411f4eda85f0436da5d9366 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/Packer/Row.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | namespace RuntimeTextureAtlas 6 | { 7 | /// 8 | /// 高度固定的矩形(行) 9 | /// 10 | public class Row : Rectangle 11 | { 12 | private List columns; 13 | 14 | /// 15 | /// 剩余可分配宽度 16 | /// 17 | private int widthAvailable 18 | { 19 | get 20 | { 21 | if(used) 22 | return 0; 23 | 24 | if(columns == null) 25 | return position.width; 26 | 27 | int width = position.width; 28 | foreach(var column in columns) 29 | width -= column.position.width; 30 | 31 | return width; 32 | } 33 | } 34 | 35 | /// 36 | /// 构造函数 37 | /// 38 | public Row(int x, int y, int w, int h) : base(x, y, w, h) 39 | { 40 | } 41 | 42 | /// 43 | /// 插入矩形 44 | /// 45 | public override Rectangle Insert(int w, int h) 46 | { 47 | // 已被占用,无法分配 48 | if(used) 49 | return null; 50 | 51 | // 高度不足,无法分配 52 | if(h > position.height) 53 | return null; 54 | 55 | // 尺寸完全匹配,改为占用状态 56 | if(columns == null && w == position.width && h == position.height) 57 | { 58 | used = true; 59 | return this; 60 | } 61 | 62 | if(columns == null) 63 | columns = new List(); 64 | 65 | // 尝试从已有子列中分配 66 | foreach(var column in columns) 67 | { 68 | var rect = column.Insert(w, h); 69 | if(rect != null) 70 | return rect; 71 | } 72 | 73 | // 宽度超过可用宽度,分配失败 74 | if(h > widthAvailable) 75 | return null; 76 | 77 | // 生成新列 78 | var newColumn = new Column(position.x + position.width - widthAvailable, position.y, w, position.height); 79 | columns.Add(newColumn); 80 | 81 | // 从新列中分配 82 | return newColumn.Insert(w, h); 83 | } 84 | 85 | /// 86 | /// 移除矩形 87 | /// 88 | public override bool Remove(RectInt rect) 89 | { 90 | if(!Contains(rect)) 91 | return false; 92 | 93 | if(used && position.Equals(rect)) 94 | { 95 | used = false; 96 | return true; 97 | } 98 | 99 | if(columns != null) 100 | { 101 | foreach(var column in columns) 102 | { 103 | if(column.Remove(rect)) 104 | return true; 105 | } 106 | } 107 | 108 | return false; 109 | } 110 | 111 | } 112 | } -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/Packer/Row.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8c0ca5af8ea6a4c01af7d0669ac90d9d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/TextureAtlas.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f19f2003bc5fc4cba990ddd6d7c046a2 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/TextureAtlas/SubTextureAgent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | 6 | namespace RuntimeTextureAtlas 7 | { 8 | /// 9 | /// 图集子贴图代理 10 | /// 11 | public abstract class SubTextureAgent : MonoBehaviour 12 | { 13 | /// 14 | /// 所属图集对象 15 | /// 16 | public TextureAtlas textureAtlas { get; private set; } 17 | 18 | /// 19 | /// 子贴图坐标数据 20 | /// 21 | public RectInt position { get; private set; } 22 | 23 | /// 24 | /// 获取子贴图期望尺寸 25 | /// 26 | protected abstract Vector2Int GetSize(); 27 | 28 | /// 29 | /// 打包前的回调函数 30 | /// 31 | protected virtual void BeforePackTexture(Texture texture) { } 32 | 33 | /// 34 | /// 打包后的回调函数 35 | /// 36 | protected virtual void AfterPackTexture(Texture texture) { } 37 | 38 | /// 39 | /// 将贴图打包进图集. 40 | /// 41 | public void PackTexture(Texture texture, Action onSuccess = null) 42 | { 43 | // 当texture为空,则销毁子贴图代理 44 | if(texture == null) 45 | { 46 | Destroy(this); 47 | return; 48 | } 49 | 50 | BeforePackTexture(texture); 51 | 52 | // 取期望宽高与贴图实际宽高中的较小值作为最终宽高 53 | var size = GetSize(); 54 | var width = Mathf.Min(size.x, texture.width); 55 | var height = Mathf.Min(size.y, texture.height); 56 | 57 | // 子贴图已存在,但与新贴图尺寸不一致,需要销毁旧贴图 58 | if(textureAtlas != null && (position.width != width || position.height != height)) 59 | { 60 | OnDestroy(); 61 | } 62 | 63 | if(textureAtlas != null) 64 | { 65 | // 更新子贴图内容 66 | textureAtlas.UpdateSubTexture(this, texture, () => 67 | { 68 | AfterPackTexture(texture); 69 | onSuccess?.Invoke(); 70 | }); 71 | } 72 | else 73 | { 74 | // 生成新的子贴图 75 | TextureAtlasManager.instance.NewSubTexture(this, texture, width, height, (atlas, pos) => 76 | { 77 | textureAtlas = atlas; 78 | position = pos; 79 | 80 | AfterPackTexture(texture); 81 | onSuccess?.Invoke(); 82 | }); 83 | } 84 | } 85 | 86 | private void OnDestroy() 87 | { 88 | textureAtlas?.ReleaseSubTexture(this); 89 | textureAtlas = null; 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/TextureAtlas/SubTextureAgent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3722b4fccfb4340dda13d76c50930d57 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/TextureAtlas/TextureAtlas.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | 4 | namespace RuntimeTextureAtlas 5 | { 6 | /// 7 | /// 图集. 8 | /// 9 | public class TextureAtlas 10 | { 11 | /// 12 | /// 打包器 13 | /// 14 | private IBinaryPacker packer; 15 | 16 | /// 17 | /// 图集贴图. 18 | /// 19 | public RenderTexture texture { get; private set; } 20 | 21 | /// 22 | /// 构造函数 23 | /// 24 | public TextureAtlas(int size, RenderTextureFormat format) 25 | { 26 | // 贴图尺寸限制在2048内 27 | size = Mathf.Min(size, 2048); 28 | 29 | // 贴图格式校验 30 | if(!SystemInfo.SupportsRenderTextureFormat(format)) 31 | format = RenderTextureFormat.Default; 32 | 33 | // 目前图集不支持mipmap,也不支持除Point外的采样模式 34 | texture = new RenderTexture(size, size, 0, format); 35 | texture.filterMode = FilterMode.Point; 36 | texture.useMipMap = false; 37 | 38 | // 贪婪打包器 39 | packer = new GreedyPacker(size, size); 40 | } 41 | 42 | /// 43 | /// 销毁贴图数据 44 | /// 45 | public void Destroy() 46 | { 47 | UnityEngine.Object.Destroy(texture); 48 | } 49 | 50 | /// 51 | /// 生成新的子贴图. 52 | /// 53 | public void NewSubTexture(SubTextureAgent agent, Texture subtexture, int width, int height, Action onSuccess) 54 | { 55 | if(agent == null || subtexture == null) 56 | { 57 | Debug.LogWarning("NewSubTexture参数错误!"); 58 | return; 59 | } 60 | 61 | // 分配空间 62 | var rect = packer.Insert(width, height); 63 | if(rect.x < 0) 64 | return; 65 | 66 | // 将子贴图内容复制到图集贴图 67 | TextureUtil.DrawTexture(subtexture, texture, rect); 68 | 69 | // 回调 70 | onSuccess?.Invoke(this, rect); 71 | } 72 | 73 | /// 74 | /// 更新子贴图内容. 75 | /// 76 | public void UpdateSubTexture(SubTextureAgent agent, Texture subTexture, Action onSuccess) 77 | { 78 | if(agent == null || agent.textureAtlas != this) 79 | { 80 | Debug.LogWarning("UpdateSubTexture参数错误!"); 81 | return; 82 | } 83 | 84 | TextureUtil.DrawTexture(subTexture, texture, agent.position); 85 | onSuccess?.Invoke(); 86 | } 87 | 88 | /// 89 | /// 销毁子贴图 90 | /// 91 | public void ReleaseSubTexture(SubTextureAgent agent) 92 | { 93 | packer.Remove(agent.position); 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/TextureAtlas/TextureAtlas.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a18df1d62f1bf46f4977a03a9a505ee6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/TextureAtlas/TextureAtlasManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | namespace RuntimeTextureAtlas 6 | { 7 | /// 8 | /// 图集管理器. 9 | /// 用于维护图集对象. 10 | /// 11 | public class TextureAtlasManager : MonoBehaviour 12 | { 13 | /// 14 | /// 默认图集贴图尺寸 15 | /// 16 | [SerializeField] 17 | private int atlasSize = 1024; 18 | 19 | /// 20 | /// 默认图集贴图格式 21 | /// 22 | [SerializeField] 23 | private RenderTextureFormat textureFormat = RenderTextureFormat.Default; 24 | 25 | // 图集对象,目前只支持一个,如需要可以改成多个 26 | private TextureAtlas _textureAtlas; 27 | 28 | /// 29 | /// 获取图集对象 30 | /// 31 | public TextureAtlas textureAtlas 32 | { 33 | get 34 | { 35 | if (_textureAtlas == null) 36 | { 37 | _textureAtlas = new TextureAtlas(atlasSize, textureFormat); 38 | } 39 | 40 | return _textureAtlas; 41 | } 42 | } 43 | 44 | /// 45 | /// 图集管理器单例对象 46 | /// 47 | private static TextureAtlasManager _instance; 48 | 49 | /// 50 | /// 获取图集管理器单例对象 51 | /// 52 | public static TextureAtlasManager instance 53 | { 54 | get 55 | { 56 | if (_instance == null) 57 | { 58 | _instance = FindObjectOfType(); 59 | if(_instance == null) 60 | { 61 | var name = "TextureAtlasManager"; 62 | var go = GameObject.Find(name); 63 | if (go == null) 64 | go = new GameObject(name); 65 | 66 | _instance = go.AddComponent(); 67 | } 68 | } 69 | return _instance; 70 | } 71 | } 72 | 73 | private void Awake() 74 | { 75 | // 只允许有一个对象 76 | if(_instance != null && _instance != this) 77 | { 78 | Debug.LogWarning("TextureAtlasManager已存在,请勿重复创建!"); 79 | Destroy(this); 80 | return; 81 | } 82 | 83 | _instance = this; 84 | } 85 | 86 | private void OnDestroy() 87 | { 88 | _textureAtlas?.Destroy(); 89 | _textureAtlas = null; 90 | 91 | if(_instance == this) 92 | _instance = null; 93 | } 94 | 95 | /// 96 | /// 为图集生成新的子贴图. 97 | /// 98 | public void NewSubTexture(SubTextureAgent agent, Texture texture, int width, int height, Action onSuccess) 99 | { 100 | textureAtlas.NewSubTexture(agent, texture, width, height, onSuccess); 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/TextureAtlas/TextureAtlasManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 15e305208b3cf4acdb46c476ebcd8a46 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/TextureAtlas/TextureUtil.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | namespace RuntimeTextureAtlas 6 | { 7 | /// 8 | /// 贴图工具类 9 | /// 10 | public static class TextureUtil 11 | { 12 | // 贴图绘制材质 13 | private static Material uploadMateral; 14 | 15 | /// 16 | /// 将source贴图绘制到target贴图的指定区域position中 17 | /// 18 | public static void DrawTexture(Texture source, RenderTexture target, RectInt position) 19 | { 20 | if(source == null || target == null) 21 | return; 22 | 23 | // 初始化绘制材质 24 | if(uploadMateral == null) 25 | { 26 | var shader = Shader.Find("Hidden/RuntimeTextureAtlas/DrawTexture"); 27 | if(shader == null) 28 | return; 29 | uploadMateral = new Material(shader); 30 | } 31 | 32 | // 构建变换矩阵 33 | float l = position.x * 2.0f / target.width - 1; 34 | float r = (position.x + position.width) * 2.0f / target.width - 1; 35 | float b = position.y * 2.0f / target.height - 1; 36 | float t = (position.y + position.height) * 2.0f / target.height - 1; 37 | var mat = new Matrix4x4(); 38 | mat.m00 = r - l; 39 | mat.m03 = l; 40 | mat.m11 = t - b; 41 | mat.m13 = b; 42 | mat.m23 = -1; 43 | mat.m33 = 1; 44 | 45 | // 绘制贴图 46 | uploadMateral.SetMatrix(Shader.PropertyToID("_ImageMVP"), GL.GetGPUProjectionMatrix(mat, true)); 47 | Graphics.Blit(source, target, uploadMateral); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/TextureAtlas/TextureUtil.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6273933d982924212b8220cc49bcb435 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/UIExtention.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5ef081623c51443a9a4e56fca2ea5d3f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/UIExtention/RawImageAgent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | using UnityEngine.UI; 4 | 5 | namespace RuntimeTextureAtlas 6 | { 7 | /// 8 | /// RawImage图集代理. 9 | /// 10 | public class RawImageAgent : SubTextureAgent 11 | { 12 | protected override Vector2Int GetSize() 13 | { 14 | var image = GetComponent(); 15 | if(image == null) 16 | return Vector2Int.zero; 17 | 18 | RectTransform rt = image.rectTransform; 19 | var width = (int)(rt.sizeDelta.x * rt.localScale.x); 20 | var height = (int)(rt.sizeDelta.y * rt.localScale.y); 21 | 22 | return new Vector2Int(width, height); 23 | } 24 | 25 | protected override void BeforePackTexture(Texture texture) 26 | { 27 | var image = GetComponent(); 28 | if(image == null) 29 | return; 30 | 31 | // 在图集打包完成之前,先使用原贴图. 32 | image.texture = texture; 33 | image.uvRect = new Rect(0, 0, 1, 1); 34 | } 35 | 36 | protected override void AfterPackTexture(Texture texture) 37 | { 38 | var image = GetComponent(); 39 | if(image == null) 40 | return; 41 | 42 | // 改用图集贴图并设置对应子贴图uv 43 | image.texture = textureAtlas.texture; 44 | image.uvRect = new Rect((float)position.x / (float)textureAtlas.texture.width, 45 | (float)position.y / (float)textureAtlas.texture.height, 46 | (float)position.width / (float)textureAtlas.texture.width, 47 | (float)position.height / (float)textureAtlas.texture.height); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/UIExtention/RawImageAgent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a68221f8306d741198808a7a99513824 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/UIExtention/RawImageExtension.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | using UnityEngine.UI; 4 | 5 | namespace RuntimeTextureAtlas 6 | { 7 | /// 8 | /// RawImage方法扩展. 9 | /// 10 | public static class RawImageExtension 11 | { 12 | /// 13 | /// 将贴图打包到图集,并应用到RawImage控件 14 | /// 15 | public static void PackTexture(this RawImage image, Texture texture, Action onSuccess = null) 16 | { 17 | // 由RawImageAgent完成实际功能 18 | var agent = image.GetComponent() ?? image.gameObject.AddComponent(); 19 | agent.PackTexture(texture, onSuccess); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/Script/UIExtention/RawImageExtension.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c71c019a021024fd5818a52391755d19 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/TextureAtlasManager.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &1863515564360413319 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 4644032042117537212} 12 | - component: {fileID: 9124245032816102111} 13 | m_Layer: 0 14 | m_Name: TextureAtlasManager 15 | m_TagString: Untagged 16 | m_Icon: {fileID: 0} 17 | m_NavMeshLayer: 0 18 | m_StaticEditorFlags: 0 19 | m_IsActive: 1 20 | --- !u!4 &4644032042117537212 21 | Transform: 22 | m_ObjectHideFlags: 0 23 | m_CorrespondingSourceObject: {fileID: 0} 24 | m_PrefabInstance: {fileID: 0} 25 | m_PrefabAsset: {fileID: 0} 26 | m_GameObject: {fileID: 1863515564360413319} 27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 28 | m_LocalPosition: {x: 0, y: 0, z: 0} 29 | m_LocalScale: {x: 1, y: 1, z: 1} 30 | m_Children: [] 31 | m_Father: {fileID: 0} 32 | m_RootOrder: 0 33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 34 | --- !u!114 &9124245032816102111 35 | MonoBehaviour: 36 | m_ObjectHideFlags: 0 37 | m_CorrespondingSourceObject: {fileID: 0} 38 | m_PrefabInstance: {fileID: 0} 39 | m_PrefabAsset: {fileID: 0} 40 | m_GameObject: {fileID: 1863515564360413319} 41 | m_Enabled: 1 42 | m_EditorHideFlags: 0 43 | m_Script: {fileID: 11500000, guid: 15e305208b3cf4acdb46c476ebcd8a46, type: 3} 44 | m_Name: 45 | m_EditorClassIdentifier: 46 | defaultTextureSize: 1024 47 | layouts: [] 48 | atlasList: [] 49 | -------------------------------------------------------------------------------- /Assets/RuntimeTextureAtlas/TextureAtlasManager.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2fe0778f918d1415aa8cd819ef47042c 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Image/drawcall-with.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Image/drawcall-with.png -------------------------------------------------------------------------------- /Image/drawcall-without.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Image/drawcall-without.png -------------------------------------------------------------------------------- /Image/rendertexture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Image/rendertexture.png -------------------------------------------------------------------------------- /Image/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jintiao/RuntimeTextureAtlas/1d9526b2022b7b02c74f4834d75b9d8a55b42269/Image/screenshot.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.ads": "2.0.8", 4 | "com.unity.analytics": "3.2.2", 5 | "com.unity.collab-proxy": "1.2.15", 6 | "com.unity.package-manager-ui": "2.0.7", 7 | "com.unity.purchasing": "2.0.3", 8 | "com.unity.textmeshpro": "1.3.0", 9 | "com.unity.modules.ai": "1.0.0", 10 | "com.unity.modules.animation": "1.0.0", 11 | "com.unity.modules.assetbundle": "1.0.0", 12 | "com.unity.modules.audio": "1.0.0", 13 | "com.unity.modules.cloth": "1.0.0", 14 | "com.unity.modules.director": "1.0.0", 15 | "com.unity.modules.imageconversion": "1.0.0", 16 | "com.unity.modules.imgui": "1.0.0", 17 | "com.unity.modules.jsonserialize": "1.0.0", 18 | "com.unity.modules.particlesystem": "1.0.0", 19 | "com.unity.modules.physics": "1.0.0", 20 | "com.unity.modules.physics2d": "1.0.0", 21 | "com.unity.modules.screencapture": "1.0.0", 22 | "com.unity.modules.terrain": "1.0.0", 23 | "com.unity.modules.terrainphysics": "1.0.0", 24 | "com.unity.modules.tilemap": "1.0.0", 25 | "com.unity.modules.ui": "1.0.0", 26 | "com.unity.modules.uielements": "1.0.0", 27 | "com.unity.modules.umbra": "1.0.0", 28 | "com.unity.modules.unityanalytics": "1.0.0", 29 | "com.unity.modules.unitywebrequest": "1.0.0", 30 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 31 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 32 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 33 | "com.unity.modules.unitywebrequestwww": "1.0.0", 34 | "com.unity.modules.vehicles": "1.0.0", 35 | "com.unity.modules.video": "1.0.0", 36 | "com.unity.modules.vr": "1.0.0", 37 | "com.unity.modules.wind": "1.0.0", 38 | "com.unity.modules.xr": "1.0.0" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | m_Volume: 1 7 | Rolloff Scale: 1 8 | Doppler Factor: 1 9 | Default Speaker Mode: 2 10 | m_SampleRate: 0 11 | m_DSPBufferSize: 1024 12 | m_VirtualVoiceCount: 512 13 | m_RealVoiceCount: 32 14 | m_SpatializerPlugin: 15 | m_AmbisonicDecoderPlugin: 16 | m_DisableAudio: 0 17 | m_VirtualizeEffects: 1 18 | -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 8 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ContactPairsMode: 0 26 | m_BroadphaseType: 0 27 | m_WorldBounds: 28 | m_Center: {x: 0, y: 0, z: 0} 29 | m_Extent: {x: 250, y: 250, z: 250} 30 | m_WorldSubdivisions: 8 31 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: [] 8 | m_configObjects: {} 9 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 7 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 2 10 | m_DefaultBehaviorMode: 0 11 | m_SpritePackerMode: 0 12 | m_SpritePackerPaddingPower: 1 13 | m_EtcTextureCompressorBehavior: 1 14 | m_EtcTextureFastCompressor: 1 15 | m_EtcTextureNormalCompressor: 2 16 | m_EtcTextureBestCompressor: 4 17 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd 18 | m_ProjectGenerationRootNamespace: 19 | m_UserGeneratedProjectSuffix: 20 | m_CollabEditorSettings: 21 | inProgressEnabled: 1 22 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 12 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} 39 | - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} 40 | - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} 41 | m_PreloadedShaders: [] 42 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 43 | type: 0} 44 | m_CustomRenderPipeline: {fileID: 0} 45 | m_TransparencySortMode: 0 46 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 47 | m_DefaultRenderingPath: 1 48 | m_DefaultMobileRenderingPath: 1 49 | m_TierSettings: [] 50 | m_LightmapStripping: 0 51 | m_FogStripping: 0 52 | m_InstancingStripping: 0 53 | m_LightmapKeepPlain: 1 54 | m_LightmapKeepDirCombined: 1 55 | m_LightmapKeepDynamicPlain: 1 56 | m_LightmapKeepDynamicDirCombined: 1 57 | m_LightmapKeepShadowMask: 1 58 | m_LightmapKeepSubtractive: 1 59 | m_FogKeepLinear: 1 60 | m_FogKeepExp: 1 61 | m_FogKeepExp2: 1 62 | m_AlbedoSwatchInfos: [] 63 | m_LightsUseLinearIntensity: 0 64 | m_LightsUseColorTemperature: 0 65 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!149 &1 4 | NetworkManager: 5 | m_ObjectHideFlags: 0 6 | m_DebugLevel: 0 7 | m_Sendrate: 15 8 | m_AssetToPrefab: {} 9 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_AutoSimulation: 1 23 | m_QueriesHitTriggers: 1 24 | m_QueriesStartInColliders: 1 25 | m_ChangeStopsCallbacks: 0 26 | m_CallbacksOnDisable: 1 27 | m_ReuseCollisionCallbacks: 1 28 | m_AutoSyncTransforms: 0 29 | m_AlwaysShowColliders: 0 30 | m_ShowColliderSleep: 1 31 | m_ShowColliderContacts: 0 32 | m_ShowColliderAABB: 0 33 | m_ContactArrowScale: 0.2 34 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 35 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 36 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 37 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 38 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 39 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | m_DefaultList: 7 | - type: 8 | m_NativeTypeID: 108 9 | m_ManagedTypePPtr: {fileID: 0} 10 | m_ManagedTypeFallback: 11 | defaultPresets: 12 | - m_Preset: {fileID: 2655988077585873504, guid: c1cf8506f04ef2c4a88b64b6c4202eea, 13 | type: 2} 14 | - type: 15 | m_NativeTypeID: 1020 16 | m_ManagedTypePPtr: {fileID: 0} 17 | m_ManagedTypeFallback: 18 | defaultPresets: 19 | - m_Preset: {fileID: 2655988077585873504, guid: 0cd792cc87e492d43b4e95b205fc5cc6, 20 | type: 2} 21 | - type: 22 | m_NativeTypeID: 1006 23 | m_ManagedTypePPtr: {fileID: 0} 24 | m_ManagedTypeFallback: 25 | defaultPresets: 26 | - m_Preset: {fileID: 2655988077585873504, guid: 7a99f8aa944efe94cb9bd74562b7d5f9, 27 | type: 2} 28 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 15 7 | productGUID: 600003eecc46c4443961d4b1ca56b09a 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: RuntimeSpriteAtlas 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 53 | iosShowActivityIndicatorOnLoading: -1 54 | androidShowActivityIndicatorOnLoading: -1 55 | iosAppInBackgroundBehavior: 0 56 | displayResolutionDialog: 1 57 | iosAllowHTTPDownload: 1 58 | allowedAutorotateToPortrait: 1 59 | allowedAutorotateToPortraitUpsideDown: 1 60 | allowedAutorotateToLandscapeRight: 1 61 | allowedAutorotateToLandscapeLeft: 1 62 | useOSAutorotation: 1 63 | use32BitDisplayBuffer: 1 64 | preserveFramebufferAlpha: 0 65 | disableDepthAndStencilBuffers: 0 66 | androidStartInFullscreen: 1 67 | androidRenderOutsideSafeArea: 0 68 | androidBlitType: 0 69 | defaultIsNativeResolution: 1 70 | macRetinaSupport: 1 71 | runInBackground: 1 72 | captureSingleScreen: 0 73 | muteOtherAudioSources: 0 74 | Prepare IOS For Recording: 0 75 | Force IOS Speakers When Recording: 0 76 | deferSystemGesturesMode: 0 77 | hideHomeButton: 0 78 | submitAnalytics: 1 79 | usePlayerLog: 1 80 | bakeCollisionMeshes: 0 81 | forceSingleInstance: 0 82 | resizableWindow: 0 83 | useMacAppStoreValidation: 0 84 | macAppStoreCategory: public.app-category.games 85 | gpuSkinning: 1 86 | graphicsJobs: 0 87 | xboxPIXTextureCapture: 0 88 | xboxEnableAvatar: 0 89 | xboxEnableKinect: 0 90 | xboxEnableKinectAutoTracking: 0 91 | xboxEnableFitness: 0 92 | visibleInBackground: 1 93 | allowFullscreenSwitch: 1 94 | graphicsJobMode: 0 95 | fullscreenMode: 1 96 | xboxSpeechDB: 0 97 | xboxEnableHeadOrientation: 0 98 | xboxEnableGuest: 0 99 | xboxEnablePIXSampling: 0 100 | metalFramebufferOnly: 0 101 | xboxOneResolution: 0 102 | xboxOneSResolution: 0 103 | xboxOneXResolution: 3 104 | xboxOneMonoLoggingLevel: 0 105 | xboxOneLoggingLevel: 1 106 | xboxOneDisableEsram: 0 107 | xboxOnePresentImmediateThreshold: 0 108 | switchQueueCommandMemory: 0 109 | switchQueueControlMemory: 16384 110 | switchQueueComputeMemory: 262144 111 | switchNVNShaderPoolsGranularity: 33554432 112 | switchNVNDefaultPoolsGranularity: 16777216 113 | switchNVNOtherPoolsGranularity: 16777216 114 | vulkanEnableSetSRGBWrite: 0 115 | m_SupportedAspectRatios: 116 | 4:3: 1 117 | 5:4: 1 118 | 16:10: 1 119 | 16:9: 1 120 | Others: 1 121 | bundleVersion: 0.1 122 | preloadedAssets: [] 123 | metroInputSource: 0 124 | wsaTransparentSwapchain: 0 125 | m_HolographicPauseOnTrackingLoss: 1 126 | xboxOneDisableKinectGpuReservation: 1 127 | xboxOneEnable7thCore: 1 128 | isWsaHolographicRemotingEnabled: 0 129 | vrSettings: 130 | cardboard: 131 | depthFormat: 0 132 | enableTransitionView: 0 133 | daydream: 134 | depthFormat: 0 135 | useSustainedPerformanceMode: 0 136 | enableVideoLayer: 0 137 | useProtectedVideoMemory: 0 138 | minimumSupportedHeadTracking: 0 139 | maximumSupportedHeadTracking: 1 140 | hololens: 141 | depthFormat: 1 142 | depthBufferSharingEnabled: 1 143 | oculus: 144 | sharedDepthBuffer: 1 145 | dashSupport: 1 146 | enable360StereoCapture: 0 147 | protectGraphicsMemory: 0 148 | enableFrameTimingStats: 0 149 | useHDRDisplay: 0 150 | m_ColorGamuts: 00000000 151 | targetPixelDensity: 30 152 | resolutionScalingMode: 0 153 | androidSupportedAspectRatio: 1 154 | androidMaxAspectRatio: 2.1 155 | applicationIdentifier: {} 156 | buildNumber: {} 157 | AndroidBundleVersionCode: 1 158 | AndroidMinSdkVersion: 16 159 | AndroidTargetSdkVersion: 0 160 | AndroidPreferredInstallLocation: 1 161 | aotOptions: 162 | stripEngineCode: 1 163 | iPhoneStrippingLevel: 0 164 | iPhoneScriptCallOptimization: 0 165 | ForceInternetPermission: 0 166 | ForceSDCardPermission: 0 167 | CreateWallpaper: 0 168 | APKExpansionFiles: 0 169 | keepLoadedShadersAlive: 0 170 | StripUnusedMeshComponents: 1 171 | VertexChannelCompressionMask: 4054 172 | iPhoneSdkVersion: 988 173 | iOSTargetOSVersionString: 9.0 174 | tvOSSdkVersion: 0 175 | tvOSRequireExtendedGameController: 0 176 | tvOSTargetOSVersionString: 9.0 177 | uIPrerenderedIcon: 0 178 | uIRequiresPersistentWiFi: 0 179 | uIRequiresFullScreen: 1 180 | uIStatusBarHidden: 1 181 | uIExitOnSuspend: 0 182 | uIStatusBarStyle: 0 183 | iPhoneSplashScreen: {fileID: 0} 184 | iPhoneHighResSplashScreen: {fileID: 0} 185 | iPhoneTallHighResSplashScreen: {fileID: 0} 186 | iPhone47inSplashScreen: {fileID: 0} 187 | iPhone55inPortraitSplashScreen: {fileID: 0} 188 | iPhone55inLandscapeSplashScreen: {fileID: 0} 189 | iPhone58inPortraitSplashScreen: {fileID: 0} 190 | iPhone58inLandscapeSplashScreen: {fileID: 0} 191 | iPadPortraitSplashScreen: {fileID: 0} 192 | iPadHighResPortraitSplashScreen: {fileID: 0} 193 | iPadLandscapeSplashScreen: {fileID: 0} 194 | iPadHighResLandscapeSplashScreen: {fileID: 0} 195 | appleTVSplashScreen: {fileID: 0} 196 | appleTVSplashScreen2x: {fileID: 0} 197 | tvOSSmallIconLayers: [] 198 | tvOSSmallIconLayers2x: [] 199 | tvOSLargeIconLayers: [] 200 | tvOSLargeIconLayers2x: [] 201 | tvOSTopShelfImageLayers: [] 202 | tvOSTopShelfImageLayers2x: [] 203 | tvOSTopShelfImageWideLayers: [] 204 | tvOSTopShelfImageWideLayers2x: [] 205 | iOSLaunchScreenType: 0 206 | iOSLaunchScreenPortrait: {fileID: 0} 207 | iOSLaunchScreenLandscape: {fileID: 0} 208 | iOSLaunchScreenBackgroundColor: 209 | serializedVersion: 2 210 | rgba: 0 211 | iOSLaunchScreenFillPct: 100 212 | iOSLaunchScreenSize: 100 213 | iOSLaunchScreenCustomXibPath: 214 | iOSLaunchScreeniPadType: 0 215 | iOSLaunchScreeniPadImage: {fileID: 0} 216 | iOSLaunchScreeniPadBackgroundColor: 217 | serializedVersion: 2 218 | rgba: 0 219 | iOSLaunchScreeniPadFillPct: 100 220 | iOSLaunchScreeniPadSize: 100 221 | iOSLaunchScreeniPadCustomXibPath: 222 | iOSUseLaunchScreenStoryboard: 0 223 | iOSLaunchScreenCustomStoryboardPath: 224 | iOSDeviceRequirements: [] 225 | iOSURLSchemes: [] 226 | iOSBackgroundModes: 0 227 | iOSMetalForceHardShadows: 0 228 | metalEditorSupport: 1 229 | metalAPIValidation: 1 230 | iOSRenderExtraFrameOnPause: 0 231 | appleDeveloperTeamID: 232 | iOSManualSigningProvisioningProfileID: 233 | tvOSManualSigningProvisioningProfileID: 234 | iOSManualSigningProvisioningProfileType: 0 235 | tvOSManualSigningProvisioningProfileType: 0 236 | appleEnableAutomaticSigning: 0 237 | iOSRequireARKit: 0 238 | iOSAutomaticallyDetectAndAddCapabilities: 1 239 | appleEnableProMotion: 0 240 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 241 | templatePackageId: com.unity.template.3d@1.3.0 242 | templateDefaultScene: Assets/Scenes/SampleScene.unity 243 | AndroidTargetArchitectures: 5 244 | AndroidSplashScreenScale: 0 245 | androidSplashScreen: {fileID: 0} 246 | AndroidKeystoreName: 247 | AndroidKeyaliasName: 248 | AndroidBuildApkPerCpuArchitecture: 0 249 | AndroidTVCompatibility: 1 250 | AndroidIsGame: 1 251 | AndroidEnableTango: 0 252 | androidEnableBanner: 1 253 | androidUseLowAccuracyLocation: 0 254 | m_AndroidBanners: 255 | - width: 320 256 | height: 180 257 | banner: {fileID: 0} 258 | androidGamepadSupportLevel: 0 259 | resolutionDialogBanner: {fileID: 0} 260 | m_BuildTargetIcons: [] 261 | m_BuildTargetPlatformIcons: [] 262 | m_BuildTargetBatching: 263 | - m_BuildTarget: Standalone 264 | m_StaticBatching: 1 265 | m_DynamicBatching: 0 266 | - m_BuildTarget: tvOS 267 | m_StaticBatching: 1 268 | m_DynamicBatching: 0 269 | - m_BuildTarget: Android 270 | m_StaticBatching: 1 271 | m_DynamicBatching: 0 272 | - m_BuildTarget: iPhone 273 | m_StaticBatching: 1 274 | m_DynamicBatching: 0 275 | - m_BuildTarget: WebGL 276 | m_StaticBatching: 0 277 | m_DynamicBatching: 0 278 | m_BuildTargetGraphicsAPIs: 279 | - m_BuildTarget: AndroidPlayer 280 | m_APIs: 0b00000008000000 281 | m_Automatic: 1 282 | - m_BuildTarget: iOSSupport 283 | m_APIs: 10000000 284 | m_Automatic: 1 285 | - m_BuildTarget: AppleTVSupport 286 | m_APIs: 10000000 287 | m_Automatic: 0 288 | - m_BuildTarget: WebGLSupport 289 | m_APIs: 0b000000 290 | m_Automatic: 1 291 | m_BuildTargetVRSettings: 292 | - m_BuildTarget: Standalone 293 | m_Enabled: 0 294 | m_Devices: 295 | - Oculus 296 | - OpenVR 297 | m_BuildTargetEnableVuforiaSettings: [] 298 | openGLRequireES31: 0 299 | openGLRequireES31AEP: 0 300 | m_TemplateCustomTags: {} 301 | mobileMTRendering: 302 | Android: 1 303 | iPhone: 1 304 | tvOS: 1 305 | m_BuildTargetGroupLightmapEncodingQuality: [] 306 | m_BuildTargetGroupLightmapSettings: [] 307 | playModeTestRunnerEnabled: 0 308 | runPlayModeTestAsEditModeTest: 0 309 | actionOnDotNetUnhandledException: 1 310 | enableInternalProfiler: 0 311 | logObjCUncaughtExceptions: 1 312 | enableCrashReportAPI: 0 313 | cameraUsageDescription: 314 | locationUsageDescription: 315 | microphoneUsageDescription: 316 | switchNetLibKey: 317 | switchSocketMemoryPoolSize: 6144 318 | switchSocketAllocatorPoolSize: 128 319 | switchSocketConcurrencyLimit: 14 320 | switchScreenResolutionBehavior: 2 321 | switchUseCPUProfiler: 0 322 | switchApplicationID: 0x01004b9000490000 323 | switchNSODependencies: 324 | switchTitleNames_0: 325 | switchTitleNames_1: 326 | switchTitleNames_2: 327 | switchTitleNames_3: 328 | switchTitleNames_4: 329 | switchTitleNames_5: 330 | switchTitleNames_6: 331 | switchTitleNames_7: 332 | switchTitleNames_8: 333 | switchTitleNames_9: 334 | switchTitleNames_10: 335 | switchTitleNames_11: 336 | switchTitleNames_12: 337 | switchTitleNames_13: 338 | switchTitleNames_14: 339 | switchPublisherNames_0: 340 | switchPublisherNames_1: 341 | switchPublisherNames_2: 342 | switchPublisherNames_3: 343 | switchPublisherNames_4: 344 | switchPublisherNames_5: 345 | switchPublisherNames_6: 346 | switchPublisherNames_7: 347 | switchPublisherNames_8: 348 | switchPublisherNames_9: 349 | switchPublisherNames_10: 350 | switchPublisherNames_11: 351 | switchPublisherNames_12: 352 | switchPublisherNames_13: 353 | switchPublisherNames_14: 354 | switchIcons_0: {fileID: 0} 355 | switchIcons_1: {fileID: 0} 356 | switchIcons_2: {fileID: 0} 357 | switchIcons_3: {fileID: 0} 358 | switchIcons_4: {fileID: 0} 359 | switchIcons_5: {fileID: 0} 360 | switchIcons_6: {fileID: 0} 361 | switchIcons_7: {fileID: 0} 362 | switchIcons_8: {fileID: 0} 363 | switchIcons_9: {fileID: 0} 364 | switchIcons_10: {fileID: 0} 365 | switchIcons_11: {fileID: 0} 366 | switchIcons_12: {fileID: 0} 367 | switchIcons_13: {fileID: 0} 368 | switchIcons_14: {fileID: 0} 369 | switchSmallIcons_0: {fileID: 0} 370 | switchSmallIcons_1: {fileID: 0} 371 | switchSmallIcons_2: {fileID: 0} 372 | switchSmallIcons_3: {fileID: 0} 373 | switchSmallIcons_4: {fileID: 0} 374 | switchSmallIcons_5: {fileID: 0} 375 | switchSmallIcons_6: {fileID: 0} 376 | switchSmallIcons_7: {fileID: 0} 377 | switchSmallIcons_8: {fileID: 0} 378 | switchSmallIcons_9: {fileID: 0} 379 | switchSmallIcons_10: {fileID: 0} 380 | switchSmallIcons_11: {fileID: 0} 381 | switchSmallIcons_12: {fileID: 0} 382 | switchSmallIcons_13: {fileID: 0} 383 | switchSmallIcons_14: {fileID: 0} 384 | switchManualHTML: 385 | switchAccessibleURLs: 386 | switchLegalInformation: 387 | switchMainThreadStackSize: 1048576 388 | switchPresenceGroupId: 389 | switchLogoHandling: 0 390 | switchReleaseVersion: 0 391 | switchDisplayVersion: 1.0.0 392 | switchStartupUserAccount: 0 393 | switchTouchScreenUsage: 0 394 | switchSupportedLanguagesMask: 0 395 | switchLogoType: 0 396 | switchApplicationErrorCodeCategory: 397 | switchUserAccountSaveDataSize: 0 398 | switchUserAccountSaveDataJournalSize: 0 399 | switchApplicationAttribute: 0 400 | switchCardSpecSize: -1 401 | switchCardSpecClock: -1 402 | switchRatingsMask: 0 403 | switchRatingsInt_0: 0 404 | switchRatingsInt_1: 0 405 | switchRatingsInt_2: 0 406 | switchRatingsInt_3: 0 407 | switchRatingsInt_4: 0 408 | switchRatingsInt_5: 0 409 | switchRatingsInt_6: 0 410 | switchRatingsInt_7: 0 411 | switchRatingsInt_8: 0 412 | switchRatingsInt_9: 0 413 | switchRatingsInt_10: 0 414 | switchRatingsInt_11: 0 415 | switchLocalCommunicationIds_0: 416 | switchLocalCommunicationIds_1: 417 | switchLocalCommunicationIds_2: 418 | switchLocalCommunicationIds_3: 419 | switchLocalCommunicationIds_4: 420 | switchLocalCommunicationIds_5: 421 | switchLocalCommunicationIds_6: 422 | switchLocalCommunicationIds_7: 423 | switchParentalControl: 0 424 | switchAllowsScreenshot: 1 425 | switchAllowsVideoCapturing: 1 426 | switchAllowsRuntimeAddOnContentInstall: 0 427 | switchDataLossConfirmation: 0 428 | switchUserAccountLockEnabled: 0 429 | switchSystemResourceMemory: 16777216 430 | switchSupportedNpadStyles: 3 431 | switchNativeFsCacheSize: 32 432 | switchIsHoldTypeHorizontal: 0 433 | switchSupportedNpadCount: 8 434 | switchSocketConfigEnabled: 0 435 | switchTcpInitialSendBufferSize: 32 436 | switchTcpInitialReceiveBufferSize: 64 437 | switchTcpAutoSendBufferSizeMax: 256 438 | switchTcpAutoReceiveBufferSizeMax: 256 439 | switchUdpSendBufferSize: 9 440 | switchUdpReceiveBufferSize: 42 441 | switchSocketBufferEfficiency: 4 442 | switchSocketInitializeEnabled: 1 443 | switchNetworkInterfaceManagerInitializeEnabled: 1 444 | switchPlayerConnectionEnabled: 1 445 | ps4NPAgeRating: 12 446 | ps4NPTitleSecret: 447 | ps4NPTrophyPackPath: 448 | ps4ParentalLevel: 11 449 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 450 | ps4Category: 0 451 | ps4MasterVersion: 01.00 452 | ps4AppVersion: 01.00 453 | ps4AppType: 0 454 | ps4ParamSfxPath: 455 | ps4VideoOutPixelFormat: 0 456 | ps4VideoOutInitialWidth: 1920 457 | ps4VideoOutBaseModeInitialWidth: 1920 458 | ps4VideoOutReprojectionRate: 60 459 | ps4PronunciationXMLPath: 460 | ps4PronunciationSIGPath: 461 | ps4BackgroundImagePath: 462 | ps4StartupImagePath: 463 | ps4StartupImagesFolder: 464 | ps4IconImagesFolder: 465 | ps4SaveDataImagePath: 466 | ps4SdkOverride: 467 | ps4BGMPath: 468 | ps4ShareFilePath: 469 | ps4ShareOverlayImagePath: 470 | ps4PrivacyGuardImagePath: 471 | ps4NPtitleDatPath: 472 | ps4RemotePlayKeyAssignment: -1 473 | ps4RemotePlayKeyMappingDir: 474 | ps4PlayTogetherPlayerCount: 0 475 | ps4EnterButtonAssignment: 1 476 | ps4ApplicationParam1: 0 477 | ps4ApplicationParam2: 0 478 | ps4ApplicationParam3: 0 479 | ps4ApplicationParam4: 0 480 | ps4DownloadDataSize: 0 481 | ps4GarlicHeapSize: 2048 482 | ps4ProGarlicHeapSize: 2560 483 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 484 | ps4pnSessions: 1 485 | ps4pnPresence: 1 486 | ps4pnFriends: 1 487 | ps4pnGameCustomData: 1 488 | playerPrefsSupport: 0 489 | enableApplicationExit: 0 490 | resetTempFolder: 1 491 | restrictedAudioUsageRights: 0 492 | ps4UseResolutionFallback: 0 493 | ps4ReprojectionSupport: 0 494 | ps4UseAudio3dBackend: 0 495 | ps4SocialScreenEnabled: 0 496 | ps4ScriptOptimizationLevel: 0 497 | ps4Audio3dVirtualSpeakerCount: 14 498 | ps4attribCpuUsage: 0 499 | ps4PatchPkgPath: 500 | ps4PatchLatestPkgPath: 501 | ps4PatchChangeinfoPath: 502 | ps4PatchDayOne: 0 503 | ps4attribUserManagement: 0 504 | ps4attribMoveSupport: 0 505 | ps4attrib3DSupport: 0 506 | ps4attribShareSupport: 0 507 | ps4attribExclusiveVR: 0 508 | ps4disableAutoHideSplash: 0 509 | ps4videoRecordingFeaturesUsed: 0 510 | ps4contentSearchFeaturesUsed: 0 511 | ps4attribEyeToEyeDistanceSettingVR: 0 512 | ps4IncludedModules: [] 513 | monoEnv: 514 | splashScreenBackgroundSourceLandscape: {fileID: 0} 515 | splashScreenBackgroundSourcePortrait: {fileID: 0} 516 | spritePackerPolicy: 517 | webGLMemorySize: 256 518 | webGLExceptionSupport: 1 519 | webGLNameFilesAsHashes: 0 520 | webGLDataCaching: 1 521 | webGLDebugSymbols: 0 522 | webGLEmscriptenArgs: 523 | webGLModulesDirectory: 524 | webGLTemplate: APPLICATION:Default 525 | webGLAnalyzeBuildSize: 0 526 | webGLUseEmbeddedResources: 0 527 | webGLCompressionFormat: 1 528 | webGLLinkerTarget: 1 529 | webGLThreadsSupport: 0 530 | scriptingDefineSymbols: {} 531 | platformArchitecture: {} 532 | scriptingBackend: {} 533 | il2cppCompilerConfiguration: {} 534 | managedStrippingLevel: {} 535 | incrementalIl2cppBuild: {} 536 | allowUnsafeCode: 0 537 | additionalIl2CppArgs: 538 | scriptingRuntimeVersion: 1 539 | apiCompatibilityLevelPerPlatform: 540 | Standalone: 3 541 | m_RenderingPath: 1 542 | m_MobileRenderingPath: 1 543 | metroPackageName: Template_3D 544 | metroPackageVersion: 545 | metroCertificatePath: 546 | metroCertificatePassword: 547 | metroCertificateSubject: 548 | metroCertificateIssuer: 549 | metroCertificateNotAfter: 0000000000000000 550 | metroApplicationDescription: Template_3D 551 | wsaImages: {} 552 | metroTileShortName: 553 | metroTileShowName: 0 554 | metroMediumTileShowName: 0 555 | metroLargeTileShowName: 0 556 | metroWideTileShowName: 0 557 | metroSupportStreamingInstall: 0 558 | metroLastRequiredScene: 0 559 | metroDefaultTileSize: 1 560 | metroTileForegroundText: 2 561 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 562 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 563 | a: 1} 564 | metroSplashScreenUseBackgroundColor: 0 565 | platformCapabilities: {} 566 | metroTargetDeviceFamilies: {} 567 | metroFTAName: 568 | metroFTAFileTypes: [] 569 | metroProtocolName: 570 | metroCompilationOverrides: 1 571 | XboxOneProductId: 572 | XboxOneUpdateKey: 573 | XboxOneSandboxId: 574 | XboxOneContentId: 575 | XboxOneTitleId: 576 | XboxOneSCId: 577 | XboxOneGameOsOverridePath: 578 | XboxOnePackagingOverridePath: 579 | XboxOneAppManifestOverridePath: 580 | XboxOneVersion: 1.0.0.0 581 | XboxOnePackageEncryption: 0 582 | XboxOnePackageUpdateGranularity: 2 583 | XboxOneDescription: 584 | XboxOneLanguage: 585 | - enus 586 | XboxOneCapability: [] 587 | XboxOneGameRating: {} 588 | XboxOneIsContentPackage: 0 589 | XboxOneEnableGPUVariability: 1 590 | XboxOneSockets: {} 591 | XboxOneSplashScreen: {fileID: 0} 592 | XboxOneAllowedProductIds: [] 593 | XboxOnePersistentLocalStorageSize: 0 594 | XboxOneXTitleMemory: 8 595 | xboxOneScriptCompiler: 1 596 | XboxOneOverrideIdentityName: 597 | vrEditorSettings: 598 | daydream: 599 | daydreamIconForeground: {fileID: 0} 600 | daydreamIconBackground: {fileID: 0} 601 | cloudServicesEnabled: 602 | UNet: 1 603 | luminIcon: 604 | m_Name: 605 | m_ModelFolderPath: 606 | m_PortalFolderPath: 607 | luminCert: 608 | m_CertPath: 609 | m_PrivateKeyPath: 610 | luminIsChannelApp: 0 611 | luminVersion: 612 | m_VersionCode: 1 613 | m_VersionName: 614 | facebookSdkVersion: 7.9.4 615 | facebookAppId: 616 | facebookCookies: 1 617 | facebookLogging: 1 618 | facebookStatus: 1 619 | facebookXfbml: 0 620 | facebookFrictionlessRequests: 1 621 | apiCompatibilityLevel: 6 622 | cloudProjectId: 623 | framebufferDepthMemorylessMode: 0 624 | projectName: 625 | organizationId: 626 | cloudEnabled: 0 627 | enableNativePlatformBackendsForNewInputSystem: 0 628 | disableOldInputManagerSupport: 0 629 | legacyClampBlendShapeWeights: 0 630 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2018.4.0f1 2 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 4 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | streamingMipmapsActive: 0 33 | streamingMipmapsAddAllCameras: 1 34 | streamingMipmapsMemoryBudget: 512 35 | streamingMipmapsRenderersPerFrame: 512 36 | streamingMipmapsMaxLevelReduction: 2 37 | streamingMipmapsMaxFileIORequests: 1024 38 | particleRaycastBudget: 4 39 | asyncUploadTimeSlice: 2 40 | asyncUploadBufferSize: 16 41 | asyncUploadPersistentBuffer: 1 42 | resolutionScalingFixedDPIFactor: 1 43 | excludedTargetPlatforms: [] 44 | - serializedVersion: 2 45 | name: Low 46 | pixelLightCount: 0 47 | shadows: 0 48 | shadowResolution: 0 49 | shadowProjection: 1 50 | shadowCascades: 1 51 | shadowDistance: 20 52 | shadowNearPlaneOffset: 3 53 | shadowCascade2Split: 0.33333334 54 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 55 | shadowmaskMode: 0 56 | blendWeights: 2 57 | textureQuality: 0 58 | anisotropicTextures: 0 59 | antiAliasing: 0 60 | softParticles: 0 61 | softVegetation: 0 62 | realtimeReflectionProbes: 0 63 | billboardsFaceCameraPosition: 0 64 | vSyncCount: 0 65 | lodBias: 0.4 66 | maximumLODLevel: 0 67 | streamingMipmapsActive: 0 68 | streamingMipmapsAddAllCameras: 1 69 | streamingMipmapsMemoryBudget: 512 70 | streamingMipmapsRenderersPerFrame: 512 71 | streamingMipmapsMaxLevelReduction: 2 72 | streamingMipmapsMaxFileIORequests: 1024 73 | particleRaycastBudget: 16 74 | asyncUploadTimeSlice: 2 75 | asyncUploadBufferSize: 16 76 | asyncUploadPersistentBuffer: 1 77 | resolutionScalingFixedDPIFactor: 1 78 | excludedTargetPlatforms: [] 79 | - serializedVersion: 2 80 | name: Medium 81 | pixelLightCount: 1 82 | shadows: 1 83 | shadowResolution: 0 84 | shadowProjection: 1 85 | shadowCascades: 1 86 | shadowDistance: 20 87 | shadowNearPlaneOffset: 3 88 | shadowCascade2Split: 0.33333334 89 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 90 | shadowmaskMode: 0 91 | blendWeights: 2 92 | textureQuality: 0 93 | anisotropicTextures: 1 94 | antiAliasing: 0 95 | softParticles: 0 96 | softVegetation: 0 97 | realtimeReflectionProbes: 0 98 | billboardsFaceCameraPosition: 0 99 | vSyncCount: 1 100 | lodBias: 0.7 101 | maximumLODLevel: 0 102 | streamingMipmapsActive: 0 103 | streamingMipmapsAddAllCameras: 1 104 | streamingMipmapsMemoryBudget: 512 105 | streamingMipmapsRenderersPerFrame: 512 106 | streamingMipmapsMaxLevelReduction: 2 107 | streamingMipmapsMaxFileIORequests: 1024 108 | particleRaycastBudget: 64 109 | asyncUploadTimeSlice: 2 110 | asyncUploadBufferSize: 16 111 | asyncUploadPersistentBuffer: 1 112 | resolutionScalingFixedDPIFactor: 1 113 | excludedTargetPlatforms: [] 114 | - serializedVersion: 2 115 | name: High 116 | pixelLightCount: 2 117 | shadows: 2 118 | shadowResolution: 1 119 | shadowProjection: 1 120 | shadowCascades: 2 121 | shadowDistance: 40 122 | shadowNearPlaneOffset: 3 123 | shadowCascade2Split: 0.33333334 124 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 125 | shadowmaskMode: 1 126 | blendWeights: 2 127 | textureQuality: 0 128 | anisotropicTextures: 1 129 | antiAliasing: 2 130 | softParticles: 0 131 | softVegetation: 1 132 | realtimeReflectionProbes: 1 133 | billboardsFaceCameraPosition: 1 134 | vSyncCount: 1 135 | lodBias: 1 136 | maximumLODLevel: 0 137 | streamingMipmapsActive: 0 138 | streamingMipmapsAddAllCameras: 1 139 | streamingMipmapsMemoryBudget: 512 140 | streamingMipmapsRenderersPerFrame: 512 141 | streamingMipmapsMaxLevelReduction: 2 142 | streamingMipmapsMaxFileIORequests: 1024 143 | particleRaycastBudget: 256 144 | asyncUploadTimeSlice: 2 145 | asyncUploadBufferSize: 16 146 | asyncUploadPersistentBuffer: 1 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Very High 151 | pixelLightCount: 3 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 2 156 | shadowDistance: 40 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 1 164 | antiAliasing: 4 165 | softParticles: 1 166 | softVegetation: 1 167 | realtimeReflectionProbes: 1 168 | billboardsFaceCameraPosition: 1 169 | vSyncCount: 1 170 | lodBias: 1.5 171 | maximumLODLevel: 0 172 | streamingMipmapsActive: 0 173 | streamingMipmapsAddAllCameras: 1 174 | streamingMipmapsMemoryBudget: 512 175 | streamingMipmapsRenderersPerFrame: 512 176 | streamingMipmapsMaxLevelReduction: 2 177 | streamingMipmapsMaxFileIORequests: 1024 178 | particleRaycastBudget: 1024 179 | asyncUploadTimeSlice: 2 180 | asyncUploadBufferSize: 16 181 | asyncUploadPersistentBuffer: 1 182 | resolutionScalingFixedDPIFactor: 1 183 | excludedTargetPlatforms: [] 184 | - serializedVersion: 2 185 | name: Ultra 186 | pixelLightCount: 4 187 | shadows: 2 188 | shadowResolution: 2 189 | shadowProjection: 1 190 | shadowCascades: 4 191 | shadowDistance: 150 192 | shadowNearPlaneOffset: 3 193 | shadowCascade2Split: 0.33333334 194 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 195 | shadowmaskMode: 1 196 | blendWeights: 4 197 | textureQuality: 0 198 | anisotropicTextures: 1 199 | antiAliasing: 4 200 | softParticles: 1 201 | softVegetation: 1 202 | realtimeReflectionProbes: 1 203 | billboardsFaceCameraPosition: 1 204 | vSyncCount: 1 205 | lodBias: 2 206 | maximumLODLevel: 0 207 | streamingMipmapsActive: 0 208 | streamingMipmapsAddAllCameras: 1 209 | streamingMipmapsMemoryBudget: 512 210 | streamingMipmapsRenderersPerFrame: 512 211 | streamingMipmapsMaxLevelReduction: 2 212 | streamingMipmapsMaxFileIORequests: 1024 213 | particleRaycastBudget: 4096 214 | asyncUploadTimeSlice: 2 215 | asyncUploadBufferSize: 16 216 | asyncUploadPersistentBuffer: 1 217 | resolutionScalingFixedDPIFactor: 1 218 | excludedTargetPlatforms: [] 219 | m_PerPlatformDefaultQuality: {} 220 | -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - PostProcessing 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.1 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 1 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_TestInitMode: 0 13 | CrashReportingSettings: 14 | m_EventUrl: https://perf-events.cloud.unity3d.com 15 | m_Enabled: 0 16 | m_LogBufferSize: 10 17 | m_CaptureEditorExceptions: 1 18 | UnityPurchasingSettings: 19 | m_Enabled: 0 20 | m_TestMode: 0 21 | UnityAnalyticsSettings: 22 | m_Enabled: 0 23 | m_TestMode: 0 24 | m_InitializeOnStartup: 1 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_RenderPipeSettingsPath: 10 | m_FixedTimeStep: 0.016666668 11 | m_MaxDeltaTime: 0.05 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RuntimeTextureAtlas 2 | 3 | Pack multiple textures into one rendertexture at runtime. 4 | 5 | ## How To Use 6 | ```c# 7 | RawImage image; 8 | Texture texture; 9 | ... 10 | image.PackTexture(texture); 11 | ``` 12 | 13 | ## Usecase 14 | 15 | for a UI Scene which have 5 RawImage controls: 16 | ![screenshot](/Image/screenshot.png) 17 | 18 | RTA pack all five texture into a rendertexture: 19 | ![rendertexture](/Image/rendertexture.png) 20 | 21 | 4 drawcall saved. 22 | 23 | | without RTA | with RTA | 24 | | ------------------------------------------- | -------------------------------------------| 25 | | ![without RTA](/Image/drawcall-without.png) | ![with RTA](/Image/drawcall-with.png) | 26 | 27 | --------------------------------------------------------------------------------