diff --git a/Assets/_Project/Art/Defense25DPreview.meta b/Assets/_Project/Art/Defense25DPreview.meta new file mode 100644 index 0000000..bc709c7 --- /dev/null +++ b/Assets/_Project/Art/Defense25DPreview.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6db8650146b84fe8a739cf530c793dc4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Back.png b/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Back.png new file mode 100644 index 0000000..30c00dd Binary files /dev/null and b/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Back.png differ diff --git a/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Back.png.meta b/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Back.png.meta new file mode 100644 index 0000000..242dadf --- /dev/null +++ b/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Back.png.meta @@ -0,0 +1,344 @@ +fileFormatVersion: 2 +guid: 8a7f8851d1537f94691b2d683181108a +TextureImporter: + internalIDToNameTable: + - first: + 213: 2625864492423660488 + second: Support-T3-Aura-Back_0 + - first: + 213: 6957596673234890184 + second: Support-T3-Aura-Back_1 + - first: + 213: -8136641146929216757 + second: Support-T3-Aura-Back_2 + - first: + 213: 553678122676677230 + second: Support-T3-Aura-Back_3 + - first: + 213: -582951979803005718 + second: Support-T3-Aura-Back_4 + - first: + 213: -1934172877856188993 + second: Support-T3-Aura-Back_5 + - first: + 213: 8294411990845620297 + second: Support-T3-Aura-Back_6 + - first: + 213: 5340386719859757897 + second: Support-T3-Aura-Back_7 + - first: + 213: 6215070279158843903 + second: Support-T3-Aura-Back_8 + - first: + 213: -1823641742342381116 + second: Support-T3-Aura-Back_9 + - first: + 213: 6824543295865738920 + second: Support-T3-Aura-Back_10 + - first: + 213: 4055028723368550688 + second: Support-T3-Aura-Back_11 + - first: + 213: -3686020541665534114 + second: Support-T3-Aura-Back_12 + - first: + 213: -138832120568249401 + second: Support-T3-Aura-Back_13 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 32 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Support-T3-Aura-Back_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 8c3493be7d1f07420800000000000000 + internalID: 2625864492423660488 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Support-T3-Aura-Back_1 + rect: + serializedVersion: 2 + x: 100 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 8cdea96bf495e8060800000000000000 + internalID: 6957596673234890184 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Support-T3-Aura-Back_2 + rect: + serializedVersion: 2 + x: 200 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b0305749cf7d41f80800000000000000 + internalID: -8136641146929216757 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Support-T3-Aura-Back_3 + rect: + serializedVersion: 2 + x: 300 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e6a6c0ea15f0fa700800000000000000 + internalID: 553678122676677230 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Support-T3-Aura-Back_4 + rect: + serializedVersion: 2 + x: 400 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: aec2bb25340f8e7f0800000000000000 + internalID: -582951979803005718 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Support-T3-Aura-Back_5 + rect: + serializedVersion: 2 + x: 500 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: fb5df29e3007825e0800000000000000 + internalID: -1934172877856188993 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + Support-T3-Aura-Back_0: 2625864492423660488 + Support-T3-Aura-Back_1: 6957596673234890184 + Support-T3-Aura-Back_10: 6824543295865738920 + Support-T3-Aura-Back_11: 4055028723368550688 + Support-T3-Aura-Back_12: -3686020541665534114 + Support-T3-Aura-Back_13: -138832120568249401 + Support-T3-Aura-Back_2: -8136641146929216757 + Support-T3-Aura-Back_3: 553678122676677230 + Support-T3-Aura-Back_4: -582951979803005718 + Support-T3-Aura-Back_5: -1934172877856188993 + Support-T3-Aura-Back_6: 8294411990845620297 + Support-T3-Aura-Back_7: 5340386719859757897 + Support-T3-Aura-Back_8: 6215070279158843903 + Support-T3-Aura-Back_9: -1823641742342381116 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Front.png b/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Front.png new file mode 100644 index 0000000..7accd2e Binary files /dev/null and b/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Front.png differ diff --git a/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Front.png.meta b/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Front.png.meta new file mode 100644 index 0000000..6245068 --- /dev/null +++ b/Assets/_Project/Art/Defense25DPreview/Support-T3-Aura-Front.png.meta @@ -0,0 +1,312 @@ +fileFormatVersion: 2 +guid: 9927ec2f1ae7c0646a2b063acbe79cb7 +TextureImporter: + internalIDToNameTable: + - first: + 213: 6439581754918904443 + second: Support-T3-Aura-Front_0 + - first: + 213: -1848515012116618896 + second: Support-T3-Aura-Front_1 + - first: + 213: 5535982278147187572 + second: Support-T3-Aura-Front_2 + - first: + 213: 1899910092312089176 + second: Support-T3-Aura-Front_3 + - first: + 213: 5371754599361447530 + second: Support-T3-Aura-Front_4 + - first: + 213: 1078346611947342504 + second: Support-T3-Aura-Front_5 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 32 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Support-T3-Aura-Front_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b72270cdc7dfd5950800000000000000 + internalID: 6439581754918904443 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Support-T3-Aura-Front_1 + rect: + serializedVersion: 2 + x: 100 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 071efcce361c856e0800000000000000 + internalID: -1848515012116618896 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Support-T3-Aura-Front_2 + rect: + serializedVersion: 2 + x: 200 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 47322d31d82c3dc40800000000000000 + internalID: 5535982278147187572 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Support-T3-Aura-Front_3 + rect: + serializedVersion: 2 + x: 300 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 852117da926dd5a10800000000000000 + internalID: 1899910092312089176 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Support-T3-Aura-Front_4 + rect: + serializedVersion: 2 + x: 400 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a66828be85e4c8a40800000000000000 + internalID: 5371754599361447530 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Support-T3-Aura-Front_5 + rect: + serializedVersion: 2 + x: 500 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.4} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 8aa0eddb78e07fe00800000000000000 + internalID: 1078346611947342504 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + Support-T3-Aura-Front_0: 6439581754918904443 + Support-T3-Aura-Front_1: -1848515012116618896 + Support-T3-Aura-Front_2: 5535982278147187572 + Support-T3-Aura-Front_3: 1899910092312089176 + Support-T3-Aura-Front_4: 5371754599361447530 + Support-T3-Aura-Front_5: 1078346611947342504 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/DefenseTowers-v1.meta b/Assets/_Project/Art/DefenseTowers-v1.meta new file mode 100644 index 0000000..74ef2d0 --- /dev/null +++ b/Assets/_Project/Art/DefenseTowers-v1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 81e88d2605cfe7c458d6eb5e6023a4e8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources.meta b/Assets/_Project/Art/DefenseTowers-v1/Resources.meta new file mode 100644 index 0000000..5bfc761 --- /dev/null +++ b/Assets/_Project/Art/DefenseTowers-v1/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24b439cf0401bb84998c20d509828e96 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1.meta b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1.meta new file mode 100644 index 0000000..5293f37 --- /dev/null +++ b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6eaa6e4ebf9270048852cdf96a94a877 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies.meta b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies.meta new file mode 100644 index 0000000..9e7b286 --- /dev/null +++ b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fccc02f3fdc427143acc8e77b677f860 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies/Fire.meta b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies/Fire.meta new file mode 100644 index 0000000..1f0c20a --- /dev/null +++ b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies/Fire.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7b3ab3cb3cad9944b934ec12b64fe3c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies/Fire/T3-Idle.png b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies/Fire/T3-Idle.png new file mode 100644 index 0000000..cfd5a14 Binary files /dev/null and b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies/Fire/T3-Idle.png differ diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies/Fire/T3-Idle.png.meta b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies/Fire/T3-Idle.png.meta new file mode 100644 index 0000000..79aefb5 --- /dev/null +++ b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Bodies/Fire/T3-Idle.png.meta @@ -0,0 +1,273 @@ +fileFormatVersion: 2 +guid: 07d9fe61cdf757d8a7f62ad5377aa0c6 +TextureImporter: + internalIDToNameTable: + - first: + 213: 418052971404361916 + second: T3-Idle_0 + - first: + 213: 147307647049000706 + second: T3-Idle_1 + - first: + 213: 190781876624806256 + second: T3-Idle_2 + - first: + 213: 247170850925480392 + second: T3-Idle_3 + - first: + 213: 704588256227899568 + second: T3-Idle_4 + - first: + 213: 42177436562795895 + second: T3-Idle_5 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 32 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: T3-Idle_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: d1faddc65d4356fd87a182395bf1239e + internalID: 418052971404361916 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: T3-Idle_1 + rect: + serializedVersion: 2 + x: 100 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 1c058990cc9656fc87901ed66b73339c + internalID: 147307647049000706 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: T3-Idle_2 + rect: + serializedVersion: 2 + x: 200 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 7387e6034a3b5768b9e1b6ee3e2de681 + internalID: 190781876624806256 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: T3-Idle_3 + rect: + serializedVersion: 2 + x: 300 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 9b52ebeecbef5aa3b99a91a958e2adc4 + internalID: 247170850925480392 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: T3-Idle_4 + rect: + serializedVersion: 2 + x: 400 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: ba3a4ebc7d875a9b940f4985bfcde317 + internalID: 704588256227899568 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: T3-Idle_5 + rect: + serializedVersion: 2 + x: 500 + y: 0 + width: 100 + height: 100 + alignment: 9 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 71acec0392e7591eb3858b9f2a0f5ca4 + internalID: 42177436562795895 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: e12650af62c654f7b6c29498aae9b7fc + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + T3-Idle_0: 418052971404361916 + T3-Idle_1: 147307647049000706 + T3-Idle_2: 190781876624806256 + T3-Idle_3: 247170850925480392 + T3-Idle_4: 704588256227899568 + T3-Idle_5: 42177436562795895 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects.meta b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects.meta new file mode 100644 index 0000000..eaa909b --- /dev/null +++ b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f62b6b1eeada89543935a786413f4df0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire.meta b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire.meta new file mode 100644 index 0000000..56900da --- /dev/null +++ b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 93ffa82ea1b751e45a096928b7ae8e50 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Flight.png b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Flight.png new file mode 100644 index 0000000..bebf517 Binary files /dev/null and b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Flight.png differ diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Flight.png.meta b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Flight.png.meta new file mode 100644 index 0000000..f1c5eef --- /dev/null +++ b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Flight.png.meta @@ -0,0 +1,221 @@ +fileFormatVersion: 2 +guid: fef49a593d0d5109a5c725d9181cf675 +TextureImporter: + internalIDToNameTable: + - first: + 213: 707903350941097808 + second: Meteor-Flight_0 + - first: + 213: 1016458043408432884 + second: Meteor-Flight_1 + - first: + 213: 339375107007095758 + second: Meteor-Flight_2 + - first: + 213: 1057848838617313511 + second: Meteor-Flight_3 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 32 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Meteor-Flight_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 19a7afb8c8ca5d9d9abef095b1344ad1 + internalID: 707903350941097808 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Meteor-Flight_1 + rect: + serializedVersion: 2 + x: 128 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: af835bc4c2b15ffc93a5d964d58310e3 + internalID: 1016458043408432884 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Meteor-Flight_2 + rect: + serializedVersion: 2 + x: 256 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 649ae40c1b7857b78bc7cdace3333f88 + internalID: 339375107007095758 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Meteor-Flight_3 + rect: + serializedVersion: 2 + x: 384 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 3e6d12c32d145e459064b6467a000079 + internalID: 1057848838617313511 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: d37364d123875da1a879125bdbe32abb + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + Meteor-Flight_0: 707903350941097808 + Meteor-Flight_1: 1016458043408432884 + Meteor-Flight_2: 339375107007095758 + Meteor-Flight_3: 1057848838617313511 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Impact.png b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Impact.png new file mode 100644 index 0000000..58b973b Binary files /dev/null and b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Impact.png differ diff --git a/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Impact.png.meta b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Impact.png.meta new file mode 100644 index 0000000..c14f7e2 --- /dev/null +++ b/Assets/_Project/Art/DefenseTowers-v1/Resources/DefenseTowers-v1/Effects/Fire/Meteor-Impact.png.meta @@ -0,0 +1,325 @@ +fileFormatVersion: 2 +guid: ef8d3178f579511c8a1b837e97797cd9 +TextureImporter: + internalIDToNameTable: + - first: + 213: 664242861021171994 + second: Meteor-Impact_0 + - first: + 213: 936303696135754994 + second: Meteor-Impact_1 + - first: + 213: 580702379162046464 + second: Meteor-Impact_2 + - first: + 213: 1146539445324708633 + second: Meteor-Impact_3 + - first: + 213: 1022198997503769769 + second: Meteor-Impact_4 + - first: + 213: 1122202433558453644 + second: Meteor-Impact_5 + - first: + 213: 652166684566318900 + second: Meteor-Impact_6 + - first: + 213: 477737314020747539 + second: Meteor-Impact_7 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 32 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Meteor-Impact_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 5ad3006efc545255b6d3bf1b8912bf3d + internalID: 664242861021171994 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Meteor-Impact_1 + rect: + serializedVersion: 2 + x: 128 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 81bd919d161d58149ec3dafd1bf8c6ec + internalID: 936303696135754994 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Meteor-Impact_2 + rect: + serializedVersion: 2 + x: 256 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: d7ef973247c55129b64732d1c7e1f32d + internalID: 580702379162046464 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Meteor-Impact_3 + rect: + serializedVersion: 2 + x: 384 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 2e70dfb61d1f52bc96336be4f098b2cb + internalID: 1146539445324708633 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Meteor-Impact_4 + rect: + serializedVersion: 2 + x: 512 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 97ac35a5cf6f5527b29f80dcbf951be5 + internalID: 1022198997503769769 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Meteor-Impact_5 + rect: + serializedVersion: 2 + x: 640 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: e3c812d8db1a589ba148ab51afb61220 + internalID: 1122202433558453644 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Meteor-Impact_6 + rect: + serializedVersion: 2 + x: 768 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 1f6e6a1f428f5e35949cb2ec30f35a4b + internalID: 652166684566318900 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Meteor-Impact_7 + rect: + serializedVersion: 2 + x: 896 + y: 0 + width: 128 + height: 128 + alignment: 9 + pivot: {x: 0.625, y: 0.375} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 38278b9b46a25f3da166c68fa3e10fab + internalID: 477737314020747539 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: fea8a05582d45f6ea64551f566fb7192 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + Meteor-Impact_0: 664242861021171994 + Meteor-Impact_1: 936303696135754994 + Meteor-Impact_2: 580702379162046464 + Meteor-Impact_3: 1146539445324708633 + Meteor-Impact_4: 1022198997503769769 + Meteor-Impact_5: 1122202433558453644 + Meteor-Impact_6: 652166684566318900 + Meteor-Impact_7: 477737314020747539 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scenes/Defense25DPreview.unity b/Assets/_Project/Scenes/Defense25DPreview.unity new file mode 100644 index 0000000..49e6c7d --- /dev/null +++ b/Assets/_Project/Scenes/Defense25DPreview.unity @@ -0,0 +1,728 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 2 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &183060275 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 183060277} + - component: {fileID: 183060276} + m_Layer: 0 + m_Name: Fixed Orthographic Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &183060276 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 183060275} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.08, g: 0.1, b: 0.14, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 2.8125 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &183060277 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 183060275} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.3, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &235306843 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 235306844} + m_Layer: 0 + m_Name: Target Ground Anchor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &235306844 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235306843} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1008159579} + - {fileID: 782960877} + - {fileID: 1157104251} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &782960876 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 782960877} + m_Layer: 0 + m_Name: Character Visual (cell center above foot anchor) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &782960877 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 782960876} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.28125, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1202749428} + m_Father: {fileID: 235306844} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1008159578 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1008159579} + - component: {fileID: 1008159580} + m_Layer: 0 + m_Name: Aura Back + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1008159579 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1008159578} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.8, y: 0.8, z: 0.8} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 235306844} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &1008159580 +SpriteRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1008159578} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 10 + m_MaskInteraction: 0 + m_Sprite: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 0 + m_SpriteSortPoint: 0 +--- !u!1 &1157104250 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1157104251} + - component: {fileID: 1157104252} + m_Layer: 0 + m_Name: Aura Front + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1157104251 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157104250} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.8, y: 0.8, z: 0.8} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 235306844} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &1157104252 +SpriteRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1157104250} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 40 + m_MaskInteraction: 0 + m_Sprite: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 0 + m_SpriteSortPoint: 0 +--- !u!1 &1202749427 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1202749428} + - component: {fileID: 1202749429} + m_Layer: 0 + m_Name: Fire T3 Character (effect target) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1202749428 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1202749427} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 782960877} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &1202749429 +SpriteRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1202749427} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 30 + m_MaskInteraction: 0 + m_Sprite: {fileID: 418052971404361916, guid: 07d9fe61cdf757d8a7f62ad5377aa0c6, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 3.125, y: 3.125} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_SpriteSortPoint: 0 +--- !u!1 &1491340921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1491340923} + - component: {fileID: 1491340922} + m_Layer: 0 + m_Name: Defense 2.5D Preview + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1491340922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1491340921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c00de25d48634556853f7a2df8445f18, type: 3} + m_Name: + m_EditorClassIdentifier: BumpCombat.Runtime::BumpCombat.Defense.Defense25DPreview + body: {fileID: 1202749429} + auraBack: {fileID: 1008159580} + auraFront: {fileID: 1157104252} + meteor: {fileID: 2023552205} + auraBackFrames: + - {fileID: 2625864492423660488, guid: 8a7f8851d1537f94691b2d683181108a, type: 3} + - {fileID: 6957596673234890184, guid: 8a7f8851d1537f94691b2d683181108a, type: 3} + - {fileID: -8136641146929216757, guid: 8a7f8851d1537f94691b2d683181108a, type: 3} + - {fileID: 553678122676677230, guid: 8a7f8851d1537f94691b2d683181108a, type: 3} + - {fileID: -582951979803005718, guid: 8a7f8851d1537f94691b2d683181108a, type: 3} + - {fileID: -1934172877856188993, guid: 8a7f8851d1537f94691b2d683181108a, type: 3} + auraFrontFrames: + - {fileID: 6439581754918904443, guid: 9927ec2f1ae7c0646a2b063acbe79cb7, type: 3} + - {fileID: -1848515012116618896, guid: 9927ec2f1ae7c0646a2b063acbe79cb7, type: 3} + - {fileID: 5535982278147187572, guid: 9927ec2f1ae7c0646a2b063acbe79cb7, type: 3} + - {fileID: 1899910092312089176, guid: 9927ec2f1ae7c0646a2b063acbe79cb7, type: 3} + - {fileID: 5371754599361447530, guid: 9927ec2f1ae7c0646a2b063acbe79cb7, type: 3} + - {fileID: 1078346611947342504, guid: 9927ec2f1ae7c0646a2b063acbe79cb7, type: 3} + meteorFlightFrames: + - {fileID: 707903350941097808, guid: fef49a593d0d5109a5c725d9181cf675, type: 3} + - {fileID: 1016458043408432884, guid: fef49a593d0d5109a5c725d9181cf675, type: 3} + - {fileID: 339375107007095758, guid: fef49a593d0d5109a5c725d9181cf675, type: 3} + - {fileID: 1057848838617313511, guid: fef49a593d0d5109a5c725d9181cf675, type: 3} + meteorImpactFrames: + - {fileID: 664242861021171994, guid: ef8d3178f579511c8a1b837e97797cd9, type: 3} + - {fileID: 936303696135754994, guid: ef8d3178f579511c8a1b837e97797cd9, type: 3} + - {fileID: 580702379162046464, guid: ef8d3178f579511c8a1b837e97797cd9, type: 3} + - {fileID: 1146539445324708633, guid: ef8d3178f579511c8a1b837e97797cd9, type: 3} + - {fileID: 1022198997503769769, guid: ef8d3178f579511c8a1b837e97797cd9, type: 3} + - {fileID: 1122202433558453644, guid: ef8d3178f579511c8a1b837e97797cd9, type: 3} + - {fileID: 652166684566318900, guid: ef8d3178f579511c8a1b837e97797cd9, type: 3} + - {fileID: 477737314020747539, guid: ef8d3178f579511c8a1b837e97797cd9, type: 3} + bodyFrames: + - {fileID: 418052971404361916, guid: 07d9fe61cdf757d8a7f62ad5377aa0c6, type: 3} + - {fileID: 147307647049000706, guid: 07d9fe61cdf757d8a7f62ad5377aa0c6, type: 3} + - {fileID: 190781876624806256, guid: 07d9fe61cdf757d8a7f62ad5377aa0c6, type: 3} + - {fileID: 247170850925480392, guid: 07d9fe61cdf757d8a7f62ad5377aa0c6, type: 3} + - {fileID: 704588256227899568, guid: 07d9fe61cdf757d8a7f62ad5377aa0c6, type: 3} + - {fileID: 42177436562795895, guid: 07d9fe61cdf757d8a7f62ad5377aa0c6, type: 3} + groundAnchor: {fileID: 235306844} + bodyVisual: {fileID: 782960877} + flightHeight: 1.7 +--- !u!4 &1491340923 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1491340921} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2023552204 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2023552206} + - component: {fileID: 2023552205} + m_Layer: 0 + m_Name: Meteor (ground position + height projection) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &2023552205 +SpriteRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2023552204} + m_Enabled: 0 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 50 + m_MaskInteraction: 0 + m_Sprite: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 0 + m_SpriteSortPoint: 0 +--- !u!4 &2023552206 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2023552204} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 183060277} + - {fileID: 235306844} + - {fileID: 2023552206} + - {fileID: 1491340923} diff --git a/Assets/_Project/Scenes/Defense25DPreview.unity.meta b/Assets/_Project/Scenes/Defense25DPreview.unity.meta new file mode 100644 index 0000000..3f3a5fb --- /dev/null +++ b/Assets/_Project/Scenes/Defense25DPreview.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b5543b710e1081342899044362ee74ca +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Constants/DefenseTowerArtDurations.cs b/Assets/_Project/Scripts/Constants/DefenseTowerArtDurations.cs new file mode 100644 index 0000000..0facc09 --- /dev/null +++ b/Assets/_Project/Scripts/Constants/DefenseTowerArtDurations.cs @@ -0,0 +1,159 @@ +using System.Collections.Generic; +namespace BumpCombat.Defense +{ + internal static class DefenseTowerArtDurations + { + private static readonly Dictionary Values = new() + { + ["Bodies/Fire/T1-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/T2-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/T3-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/Base-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/T4-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/T1-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/T2-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/T3-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/Base-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/T4-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/T1-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/T2-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/T3-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/Base-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Fire/T4-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T1-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T2-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T3-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/Base-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T4-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T1-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T2-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T3-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/Base-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T4-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T1-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T2-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T3-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/Base-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Lightning/T4-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T1-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T2-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T3-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/Base-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T4-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T1-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T2-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T3-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/Base-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T4-Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T1-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T2-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T3-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/Base-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Ice/T4-Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T1-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T2-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T3-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/Base-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T4-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T1-Attack"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T2-Attack"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T3-Attack"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/Base-Attack"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T4-Attack"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T1-Heal"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T2-Heal"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T3-Heal"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/Base-Heal"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Control/T4-Heal"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T1-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T2-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T3-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/Base-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T4-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T1-Attack"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T2-Attack"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T3-Attack"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/Base-Attack"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T4-Attack"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T1-Heal"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T2-Heal"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T3-Heal"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/Base-Heal"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Support/T4-Heal"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Summon/T1-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Summon/T2-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Summon/T3-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Summon/Base-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Bodies/Summon/T4-Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Effects/Fire/T1-Fireball"] = new[] { 90, 90, 90, 90 }, + ["Effects/Fire/T2-Fireball"] = new[] { 90, 90, 90, 90 }, + ["Effects/Fire/T3-Fireball"] = new[] { 90, 90, 90, 90 }, + ["Effects/Fire/Impact"] = new[] { 45, 55, 60, 50 }, + ["Effects/Fire/Meteor-Flight"] = new[] { 80, 80, 80, 80 }, + ["Effects/Fire/Meteor-Impact"] = new[] { 40, 50, 60, 70, 60, 60, 60, 80 }, + ["Sources/BlackKnight-NoSkull"] = new[] { 125, 125, 125, 125, 125, 125, 125 }, + ["Effects/Fire/Flamethrower"] = new[] { 80, 80, 80, 70, 65, 65, 70 }, + ["Effects/Lightning/T1-Bolt"] = new[] { 30, 40, 30, 30, 40, 40, 40, 50 }, + ["Effects/Lightning/T2-Bolt"] = new[] { 30, 40, 30, 30, 40, 40, 40, 50 }, + ["Effects/Lightning/T3-Bolt"] = new[] { 30, 40, 30, 30, 40, 40, 40, 50 }, + ["Effects/Lightning/Arc"] = new[] { 30, 40, 30, 30, 40, 40, 40, 50 }, + ["Effects/Lightning/ImpactWave"] = new[] { 40, 40, 50, 50, 60, 60 }, + ["Effects/Lightning/LightningStorm"] = new[] { 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 }, + ["Effects/Ice/T1-Volley"] = new[] { 125 }, + ["Effects/Ice/T2-Volley"] = new[] { 125 }, + ["Effects/Ice/T3-Volley"] = new[] { 125 }, + ["Effects/Ice/Shard"] = new[] { 125 }, + ["Effects/Ice/Freezebolt"] = new[] { 85, 85, 85, 85 }, + ["Effects/Ice/Impact"] = new[] { 40, 50, 60, 70 }, + ["Effects/Ice/GlacialCage-Front"] = new[] { 65, 65, 90, 140, 140, 140, 70, 70 }, + ["Effects/Ice/GlacialCage-Back"] = new[] { 65, 65, 90, 140, 140, 140, 70, 70 }, + ["Effects/Control/T1-Aura"] = new[] { 140, 140, 140, 140, 140, 140 }, + ["Effects/Control/T2-Aura"] = new[] { 140, 140, 140, 140, 140, 140 }, + ["Effects/Control/T3-Aura"] = new[] { 140, 140, 140, 140, 140, 140 }, + ["Effects/Support/T1-Aura"] = new[] { 140, 140, 140, 140, 140, 140 }, + ["Effects/Support/T2-Aura"] = new[] { 140, 140, 140, 140, 140, 140 }, + ["Effects/Support/T3-Aura"] = new[] { 140, 140, 140, 140, 140, 140 }, + ["Effects/Control/StoneGaze"] = new[] { 90, 90, 90, 90, 90, 90, 90, 90 }, + ["Effects/Control/Temporal"] = new[] { 170, 170, 170, 170, 170, 170, 170, 170 }, + ["Effects/Support/Imbuing"] = new[] { 130, 130, 130, 130, 130, 130, 130, 130 }, + ["Effects/Support/Smothering"] = new[] { 150, 150, 150, 150, 150, 150, 150, 150 }, + ["Summons/Slime/Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Summons/GiantSlime/Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Summons/Slime/Walk"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Summons/GiantSlime/Walk"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Summons/Slime/Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Summons/GiantSlime/Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Summons/Slime/Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Summons/GiantSlime/Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Summons/Slime/Hurt"] = new[] { 125, 125, 125, 125 }, + ["Summons/GiantSlime/Hurt"] = new[] { 125, 125, 125, 125 }, + ["Summons/Slime/Death"] = new[] { 125, 125, 125, 125 }, + ["Summons/GiantSlime/Death"] = new[] { 125, 125, 125, 125 }, + ["Summons/LavaSlime/Idle"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Summons/LavaSlime/Walk"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Summons/LavaSlime/Attack01"] = new[] { 125, 125, 125, 125, 125, 125 }, + ["Summons/LavaSlime/Attack02"] = new[] { 125, 125, 125, 125, 125, 125, 125, 125, 125 }, + ["Summons/LavaSlime/Hurt"] = new[] { 125, 125, 125, 125 }, + ["Summons/LavaSlime/Death"] = new[] { 125, 125, 125, 125 }, + ["Summons/LavaSlime/GroundSpike-Segment"] = new[] { 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 }, + ["Summons/LavaSlime/GroundSpike-Wave"] = new[] { 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 }, + }; + + public static ICollection Keys => Values.Keys; + + public static int FrameCount(string key) + { + return Values.TryGetValue(key, out int[] values) ? values.Length : 0; + } + + public static float Seconds(string key, int frame) + { + if (!Values.TryGetValue(key, out int[] values) || values.Length == 0) + { + return 0.125f; + } + int safeFrame = frame < 0 ? 0 : frame >= values.Length ? values.Length - 1 : frame; + return values[safeFrame] / 1000f; + } + } +} diff --git a/Assets/_Project/Scripts/Constants/DefenseTowerArtDurations.cs.meta b/Assets/_Project/Scripts/Constants/DefenseTowerArtDurations.cs.meta new file mode 100644 index 0000000..a42367f --- /dev/null +++ b/Assets/_Project/Scripts/Constants/DefenseTowerArtDurations.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fe0c687a555c4bc291e278b2e7dabc04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: + diff --git a/Assets/_Project/Scripts/Defense/Defense25DPreview.cs b/Assets/_Project/Scripts/Defense/Defense25DPreview.cs new file mode 100644 index 0000000..703f643 --- /dev/null +++ b/Assets/_Project/Scripts/Defense/Defense25DPreview.cs @@ -0,0 +1,123 @@ +using System.Collections; +using UnityEngine; + +namespace BumpCombat.Defense +{ + public sealed class Defense25DPreview : MonoBehaviour + { + private const string BodyKey = "Bodies/Fire/T3-Idle"; + private const string FlightKey = "Effects/Fire/Meteor-Flight"; + private const string ImpactKey = "Effects/Fire/Meteor-Impact"; + private const float AuraFrameSeconds = 0.14f; + + [SerializeField] private SpriteRenderer body, auraBack, auraFront, meteor; + [SerializeField] private Sprite[] auraBackFrames, auraFrontFrames, meteorFlightFrames, meteorImpactFrames, bodyFrames; + [SerializeField] private Transform groundAnchor, bodyVisual; + [SerializeField] private float flightHeight = 1.7f; + + public SpriteRenderer Body => body; + public SpriteRenderer AuraBack => auraBack; + public SpriteRenderer AuraFront => auraFront; + public SpriteRenderer Meteor => meteor; + public Sprite[] AuraBackFrames => auraBackFrames; + public Sprite[] AuraFrontFrames => auraFrontFrames; + public Sprite[] MeteorFlightFrames => meteorFlightFrames; + public Sprite[] MeteorImpactFrames => meteorImpactFrames; + public Sprite[] BodyFrames => bodyFrames; + public Transform GroundAnchor => groundAnchor; + public Transform BodyVisual => bodyVisual; + public float CurrentMeteorHeight { get; private set; } + public Vector2 CurrentMeteorGround { get; private set; } + + public void Configure(Sprite[] back, Sprite[] front, Sprite[] flight, Sprite[] impact, Sprite[] character) + { + auraBackFrames = back; auraFrontFrames = front; meteorFlightFrames = flight; + meteorImpactFrames = impact; bodyFrames = character; + } + + public static Vector3 ProjectGroundAndHeight(Vector2 groundPosition, float height) => + new Vector3(groundPosition.x - height, groundPosition.y + height, 0f); + + private IEnumerator Start() + { + StartCoroutine(AnimateAura()); + StartCoroutine(AnimateBody()); + StartCoroutine(MoveTarget()); + while (true) + { + yield return new WaitForSeconds(0.25f); + yield return PlayMeteor(); + yield return new WaitForSeconds(0.55f); + } + } + + private IEnumerator MoveTarget() + { + while (true) + { + Vector3 p = groundAnchor.position; + p.x = Mathf.Sin(Time.time * 0.7f) * 0.65f; + groundAnchor.position = p; + yield return null; + } + } + + private IEnumerator AnimateAura() + { + int frame = 0; + while (true) + { + auraBack.sprite = auraBackFrames[frame]; + auraFront.sprite = auraFrontFrames[frame]; + frame = (frame + 1) % auraBackFrames.Length; + yield return new WaitForSeconds(AuraFrameSeconds); + } + } + + private IEnumerator AnimateBody() + { + int frame = 0; + while (true) + { + body.sprite = bodyFrames[frame]; + frame = (frame + 1) % bodyFrames.Length; + yield return new WaitForSeconds(DefenseTowerArt.FrameSeconds(BodyKey, frame == 0 ? bodyFrames.Length - 1 : frame - 1)); + } + } + + private IEnumerator PlayMeteor() + { + CurrentMeteorGround = groundAnchor.position; + meteor.enabled = true; + CurrentMeteorHeight = flightHeight; + float flightDuration = 0f; + for (int i = 0; i < meteorFlightFrames.Length; i++) flightDuration += DefenseTowerArt.FrameSeconds(FlightKey, i); + + float elapsed = 0f; + for (int i = 0; i < meteorFlightFrames.Length; i++) + { + meteor.sprite = meteorFlightFrames[i]; + float frameSeconds = DefenseTowerArt.FrameSeconds(FlightKey, i); + float frameElapsed = 0f; + while (frameElapsed < frameSeconds) + { + CurrentMeteorHeight = flightHeight * (1f - elapsed / flightDuration); + meteor.transform.position = ProjectGroundAndHeight(CurrentMeteorGround, CurrentMeteorHeight); + float dt = Mathf.Min(Time.deltaTime, frameSeconds - frameElapsed); + frameElapsed += dt; + elapsed += dt; + yield return null; + } + } + + CurrentMeteorHeight = 0f; + meteor.transform.position = ProjectGroundAndHeight(CurrentMeteorGround, 0f); + for (int i = 0; i < meteorImpactFrames.Length; i++) + { + meteor.sprite = meteorImpactFrames[i]; + yield return new WaitForSeconds(DefenseTowerArt.FrameSeconds(ImpactKey, i)); + } + meteor.enabled = false; + } + } +} diff --git a/Assets/_Project/Scripts/Defense/Defense25DPreview.cs.meta b/Assets/_Project/Scripts/Defense/Defense25DPreview.cs.meta new file mode 100644 index 0000000..b13c341 --- /dev/null +++ b/Assets/_Project/Scripts/Defense/Defense25DPreview.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c00de25d48634556853f7a2df8445f18 diff --git a/Assets/_Project/Scripts/Defense/DefenseTowerArt.cs b/Assets/_Project/Scripts/Defense/DefenseTowerArt.cs new file mode 100644 index 0000000..f4cd6c5 --- /dev/null +++ b/Assets/_Project/Scripts/Defense/DefenseTowerArt.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace BumpCombat.Defense +{ + public static class DefenseTowerArt + { + private const string ResourceRoot = "DefenseTowers-v1/"; + private static readonly Dictionary Frames = new(); + + public static ICollection Keys => DefenseTowerArtDurations.Keys; + + public static int ExpectedFrameCount(string key) + { + return DefenseTowerArtDurations.FrameCount(key); + } + + public static Sprite[] Load(string key) + { + if (string.IsNullOrEmpty(key)) + { + return Array.Empty(); + } + + if (!Frames.TryGetValue(key, out Sprite[] sprites)) + { + sprites = Resources.LoadAll(ResourceRoot + key); + Array.Sort(sprites, CompareFrameNames); + Frames.Add(key, sprites); + } + return sprites; + } + + public static float FrameSeconds(string key, int frame) + { + return DefenseTowerArtDurations.Seconds(key, frame); + } + + public static string BodyKey(DefenseTowerKind kind, int tier, string motion) + { + string family = kind switch + { + DefenseTowerKind.Direct => "Fire", + DefenseTowerKind.Summon => "Summon", + DefenseTowerKind.Lightning => "Lightning", + DefenseTowerKind.Cold => "Ice", + DefenseTowerKind.Seismic => "Control", + _ => "Support", + }; + return $"Bodies/{family}/T{tier}-{motion}"; + } + + private static int CompareFrameNames(Sprite left, Sprite right) + { + return FrameIndex(left.name).CompareTo(FrameIndex(right.name)); + } + + private static int FrameIndex(string name) + { + int separator = name.LastIndexOf('_'); + return separator >= 0 && int.TryParse(name.Substring(separator + 1), out int index) + ? index : 0; + } + } +} diff --git a/Assets/_Project/Scripts/Defense/DefenseTowerArt.cs.meta b/Assets/_Project/Scripts/Defense/DefenseTowerArt.cs.meta new file mode 100644 index 0000000..bb4cc80 --- /dev/null +++ b/Assets/_Project/Scripts/Defense/DefenseTowerArt.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3608a711d7f74976b57e54ef7981c28a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: + diff --git a/Assets/_Project/Scripts/Editor/Defense25DPreviewSetup.cs b/Assets/_Project/Scripts/Editor/Defense25DPreviewSetup.cs new file mode 100644 index 0000000..f5ae413 --- /dev/null +++ b/Assets/_Project/Scripts/Editor/Defense25DPreviewSetup.cs @@ -0,0 +1,127 @@ +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.SceneManagement; +using BumpCombat.Defense; + +namespace BumpCombat.Editor +{ + public static class Defense25DPreviewSetup + { + private const string ScenePath = "Assets/_Project/Scenes/Defense25DPreview.unity"; + private const string PreviewArt = "Assets/_Project/Art/Defense25DPreview"; + private const string BackName = "Support-T3-Aura-Back"; + private const string FrontName = "Support-T3-Aura-Front"; + + [MenuItem("BumpCombat/Defense 2.5D/Build and Open Preview Scene")] + public static void BuildAndOpen() { + if (!Application.isBatchMode && !EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) return; + ImportParentAuraArt(); + AssetDatabase.Refresh(); + Scene scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); + var cameraObject = new GameObject("Fixed Orthographic Camera"); + var camera = cameraObject.AddComponent(); + camera.orthographic = true; + camera.orthographicSize = 2.8125f; + camera.clearFlags = CameraClearFlags.SolidColor; + camera.backgroundColor = new Color(0.08f, 0.1f, 0.14f); + camera.transform.position = new Vector3(0f, 0.3f, -10f); + camera.tag = "MainCamera"; + + var anchor = new GameObject("Target Ground Anchor").transform; + var back = CreateSprite("Aura Back", anchor, 10); + back.transform.localScale = Vector3.one * 0.8f; + var bodyVisual = new GameObject("Character Visual (cell center above foot anchor)").transform; + bodyVisual.SetParent(anchor, false); + bodyVisual.localPosition = new Vector3(0f, 9f / 32f, 0f); + var body = CreateSprite("Fire T3 Character (effect target)", bodyVisual, 30); + Sprite[] bodyFrames = DefenseTowerArt.Load("Bodies/Fire/T3-Idle"); + body.sprite = bodyFrames.FirstOrDefault(); + var front = CreateSprite("Aura Front", anchor, 40); + front.transform.localScale = back.transform.localScale; + + var meteor = CreateSprite("Meteor (ground position + height projection)", null, 50); + meteor.enabled = false; + var root = new GameObject("Defense 2.5D Preview"); + var preview = root.AddComponent(); + var so = new SerializedObject(preview); + so.FindProperty("flightHeight").floatValue = 1.7f; + so.FindProperty("body").objectReferenceValue = body; + so.FindProperty("auraBack").objectReferenceValue = back; + so.FindProperty("auraFront").objectReferenceValue = front; + so.FindProperty("meteor").objectReferenceValue = meteor; + so.FindProperty("groundAnchor").objectReferenceValue = anchor; + so.FindProperty("bodyVisual").objectReferenceValue = bodyVisual; + so.ApplyModifiedPropertiesWithoutUndo(); + preview.Configure(LoadPreviewFrames(BackName), LoadPreviewFrames(FrontName), + DefenseTowerArt.Load("Effects/Fire/Meteor-Flight"), DefenseTowerArt.Load("Effects/Fire/Meteor-Impact"), bodyFrames); + EditorUtility.SetDirty(preview); + EditorSceneManager.SaveScene(scene, ScenePath); + Selection.activeGameObject = root; + EditorGUIUtility.PingObject(AssetDatabase.LoadAssetAtPath(ScenePath)); + Debug.Log($"Defense 2.5D preview saved: {ScenePath}; aura={preview.AuraBackFrames.Length}/{preview.AuraFrontFrames.Length}; body=Fire T3 Idle."); + } + + private static void ImportParentAuraArt() + { + string directory = Path.GetFullPath(Path.Combine(Application.dataPath, "_Project/Art/Defense25DPreview")); + Directory.CreateDirectory(directory); + string backTarget = Path.Combine(directory, BackName + ".png"); + string frontTarget = Path.Combine(directory, FrontName + ".png"); + string sourceRoot = File.Exists(backTarget) && File.Exists(frontTarget) ? null : FindParentOutputRoot(); + ImportAura(sourceRoot == null ? null : Path.Combine(sourceRoot, BackName + ".png"), backTarget, $"{PreviewArt}/{BackName}.png"); + ImportAura(sourceRoot == null ? null : Path.Combine(sourceRoot, FrontName + ".png"), frontTarget, $"{PreviewArt}/{FrontName}.png"); + } + + private static string FindParentOutputRoot() + { + for (DirectoryInfo folder = new DirectoryInfo(Application.dataPath); folder != null; folder = folder.Parent) + { + string candidate = Path.Combine(folder.FullName, "output/tower-25d-v1/assets"); + if (File.Exists(Path.Combine(candidate, BackName + ".png")) && File.Exists(Path.Combine(candidate, FrontName + ".png"))) return candidate; + } + throw new FileNotFoundException("Could not find output/tower-25d-v1/assets with both parent aura sheets."); + } + + private static void ImportAura(string source, string target, string assetPath) + { + if (!File.Exists(target)) File.Copy(source, target); + AssetDatabase.ImportAsset(assetPath, ImportAssetOptions.ForceUpdate); + var importer = (TextureImporter)AssetImporter.GetAtPath(assetPath); + importer.textureType = TextureImporterType.Sprite; + importer.spriteImportMode = SpriteImportMode.Multiple; + importer.spritePixelsPerUnit = 32; + importer.filterMode = FilterMode.Point; + importer.mipmapEnabled = false; + importer.textureCompression = TextureImporterCompression.Uncompressed; + foreach (string platform in new[] { "DefaultTexturePlatform", "Standalone", "WebGL", "Android", "iPhone" }) + { + TextureImporterPlatformSettings settings = importer.GetPlatformTextureSettings(platform); + settings.name = platform; + settings.overridden = true; + settings.textureCompression = TextureImporterCompression.Uncompressed; + importer.SetPlatformTextureSettings(settings); + } + var metas = new SpriteMetaData[6]; + for (int i = 0; i < metas.Length; i++) + metas[i] = new SpriteMetaData { name = Path.GetFileNameWithoutExtension(target) + "_" + i, + rect = new Rect(i * 100, 0, 100, 100), alignment = (int)SpriteAlignment.Custom, pivot = new Vector2(0.5f, 0.4f) }; + importer.spritesheet = metas; + importer.SaveAndReimport(); + } + + private static Sprite[] LoadPreviewFrames(string name) => + AssetDatabase.LoadAllAssetsAtPath($"{PreviewArt}/{name}.png").OfType().OrderBy(s => s.name).ToArray(); + + private static SpriteRenderer CreateSprite(string name, Transform parent, int order) + { + var go = new GameObject(name); + if (parent != null) go.transform.SetParent(parent, false); + var renderer = go.AddComponent(); + renderer.sortingOrder = order; + return renderer; + } + } +} diff --git a/Assets/_Project/Scripts/Editor/Defense25DPreviewSetup.cs.meta b/Assets/_Project/Scripts/Editor/Defense25DPreviewSetup.cs.meta new file mode 100644 index 0000000..2d04ae7 --- /dev/null +++ b/Assets/_Project/Scripts/Editor/Defense25DPreviewSetup.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a3d92f18b0aa45df9a6f1d2a9fd12ac7 diff --git a/Assets/_Project/Tests/PlayMode/Defense25DPreviewTests.cs b/Assets/_Project/Tests/PlayMode/Defense25DPreviewTests.cs new file mode 100644 index 0000000..8e4bb92 --- /dev/null +++ b/Assets/_Project/Tests/PlayMode/Defense25DPreviewTests.cs @@ -0,0 +1,121 @@ +using System.Collections; +using System.IO; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestTools; +#if UNITY_EDITOR +using UnityEditor.SceneManagement; +#endif +using BumpCombat.Defense; + +namespace BumpCombat.PlayModeTests +{ + public sealed class Defense25DPreviewTests + { + private float previousTimeScale; + + [UnitySetUp] + public IEnumerator SetNormalTimeScale() + { + previousTimeScale = Time.timeScale; + Time.timeScale = 1f; + yield return null; + } + + [UnityTearDown] + public IEnumerator RestoreTimeScale() + { + Time.timeScale = previousTimeScale; + yield return null; + } + + [UnityTest] + public IEnumerator FireTargetAuraAndMeteor_KeepGroundHeightLayersAndCaptureRuntimeFrames() + { +#if UNITY_EDITOR + EditorSceneManager.LoadSceneInPlayMode("Assets/_Project/Scenes/Defense25DPreview.unity", new LoadSceneParameters(LoadSceneMode.Single)); +#else + SceneManager.LoadScene("Defense25DPreview"); +#endif + yield return null; + var preview = Object.FindFirstObjectByType(); + Assert.That(preview, Is.Not.Null); + Assert.That(preview.AuraBackFrames.Length, Is.EqualTo(6)); + Assert.That(preview.AuraFrontFrames.Length, Is.EqualTo(6)); + Assert.That(preview.BodyFrames.Length, Is.EqualTo(6)); + Assert.That(preview.MeteorFlightFrames.Length, Is.EqualTo(4)); + Assert.That(preview.MeteorImpactFrames.Length, Is.EqualTo(8)); + Assert.That(preview.Body.sprite.name, Does.StartWith("T3-Idle_")); + Assert.That(preview.Body.transform.parent.GetComponentsInChildren().Length, Is.EqualTo(1)); + Assert.That(preview.AuraBack.sortingOrder, Is.LessThan(preview.Body.sortingOrder)); + Assert.That(preview.Body.sortingOrder, Is.LessThan(preview.AuraFront.sortingOrder)); + Assert.That(preview.AuraBack.transform.position, Is.EqualTo(preview.AuraFront.transform.position)); + Assert.That(preview.AuraBackFrames[0].pivot / preview.AuraBackFrames[0].rect.size, Is.EqualTo(new Vector2(0.5f, 0.4f))); + Assert.That(Camera.main.orthographicSize, Is.EqualTo(2.8125f)); + Assert.That(preview.AuraBack.transform.localScale, Is.EqualTo(preview.AuraFront.transform.localScale)); + Assert.That(preview.BodyVisual.localPosition.y, Is.EqualTo(9f / 32f).Within(0.0001f)); + Assert.That(Defense25DPreview.ProjectGroundAndHeight(new Vector2(3f, 4f), 2f), Is.EqualTo(new Vector3(1f, 6f, 0f))); + + string output = FindOutputDirectory(); + float deadline = Time.realtimeSinceStartup + 5f; + while (!preview.Meteor.enabled && Time.realtimeSinceStartup < deadline) yield return null; + Assert.That(preview.Meteor.enabled, Is.True, "Meteor did not start within five realtime seconds."); + Capture(Camera.main, Path.Combine(output, "runtime-01-meteor-early.png")); + Vector3 earlyViewport = Camera.main.WorldToViewportPoint(preview.Meteor.transform.position); + Assert.That(earlyViewport.y, Is.InRange(0f, 1f), "Early meteor must stay within the camera frame."); + + float initialHeight = preview.CurrentMeteorHeight; + deadline = Time.realtimeSinceStartup + 5f; + while (!(preview.CurrentMeteorHeight > 0f && preview.CurrentMeteorHeight <= initialHeight * 0.6f) && + Time.realtimeSinceStartup < deadline) yield return null; + Assert.That(preview.CurrentMeteorHeight, Is.GreaterThan(0f).And.LessThanOrEqualTo(initialHeight * 0.6f), + "Midflight capture did not reach the height threshold within five realtime seconds."); + Capture(Camera.main, Path.Combine(output, "runtime-02-meteor-midflight.png")); + Assert.That(preview.Meteor.transform.position, Is.Not.EqualTo(preview.GroundAnchor.position)); + Assert.That(preview.CurrentMeteorGround, Is.Not.EqualTo((Vector2)preview.GroundAnchor.position)); + + deadline = Time.realtimeSinceStartup + 5f; + while (!(preview.Meteor.enabled && preview.CurrentMeteorHeight <= 0f) && + Time.realtimeSinceStartup < deadline) yield return null; + Assert.That(preview.Meteor.enabled && preview.CurrentMeteorHeight <= 0f, Is.True, + "Meteor did not reach ground height within five realtime seconds."); + Capture(Camera.main, Path.Combine(output, "runtime-03-meteor-impact.png")); + deadline = Time.realtimeSinceStartup + 5f; + while (preview.Meteor.enabled && Time.realtimeSinceStartup < deadline) yield return null; + Assert.That(preview.Meteor.enabled, Is.False, "Meteor impact sequence did not finish within five realtime seconds."); + Assert.That(preview.AuraBack.transform.position.x, Is.EqualTo(preview.GroundAnchor.position.x).Within(0.0001f)); + } + + private static void Capture(Camera camera, string path) + { + const int width = 1280, height = 720; + var texture = new RenderTexture(width, height, 24, RenderTextureFormat.ARGB32); + var image = new Texture2D(width, height, TextureFormat.RGB24, false); + camera.targetTexture = texture; + camera.Render(); + RenderTexture previous = RenderTexture.active; + RenderTexture.active = texture; + image.ReadPixels(new Rect(0, 0, width, height), 0, 0); + image.Apply(); + File.WriteAllBytes(path, image.EncodeToPNG()); + camera.targetTexture = null; + RenderTexture.active = previous; + Object.Destroy(texture); + Object.Destroy(image); + } + + private static string FindOutputDirectory() + { + for (DirectoryInfo folder = new DirectoryInfo(Application.dataPath); folder != null; folder = folder.Parent) + { + string output = Path.Combine(folder.FullName, "output/tower-25d-v1"); + if (Directory.Exists(output)) return output; + } + + string projectOutput = Path.GetFullPath(Path.Combine(Application.dataPath, "../output/tower-25d-v1")); + Directory.CreateDirectory(projectOutput); + return projectOutput; + } + } +} diff --git a/Assets/_Project/Tests/PlayMode/Defense25DPreviewTests.cs.meta b/Assets/_Project/Tests/PlayMode/Defense25DPreviewTests.cs.meta new file mode 100644 index 0000000..db9595b --- /dev/null +++ b/Assets/_Project/Tests/PlayMode/Defense25DPreviewTests.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 417f0ae0e37f4cc38c234a7e89c06472 diff --git a/Documentation/Defense25DPreview.md b/Documentation/Defense25DPreview.md new file mode 100644 index 0000000..ee4285a --- /dev/null +++ b/Documentation/Defense25DPreview.md @@ -0,0 +1,23 @@ +# 고정 카메라 이펙트 검증 장면 + +## 실행 + +Unity 6000.3.19f1에서 `Assets/_Project/Scenes/Defense25DPreview.unity`를 열고 Play한다. Fire Wizard 대상이 좌우로 이동하고, 발밑 오라와 메테오 낙하·착탄을 반복한다. 재구성 메뉴는 `BumpCombat/Defense 2.5D/Build and Open Preview Scene`이다. 미저장 씬 확인에서 취소하면 기존 씬을 유지한다. + +## 현행 규칙 + +- 고정 직교 카메라, 크기 2.8125, 32 PPU와 Point 필터를 사용한다. 2D XY 지면 좌표와 표현 높이를 분리한 시제품이다. +- 승인된 Fire T3 Idle과 Flame Golem 기반 Meteor Flight/Impact를 재사용한다. 원본 회색 테두리를 유지한다. +- 오라는 기존 Support T3 시트에서 위쪽(y<58)을 Back, 아래쪽(y>=58)을 Front로 나눈 것이다. 두 레이어를 합성하면 원본 픽셀과 동일하다. 각 100×100 셀 6개, 피벗(0.5,0.4), 140ms, 배율 0.8을 사용한다. +- 표시 순서는 Back(10) → 캐릭터(30) → Front(40)다. 두 오라는 같은 대상 지면 위치와 프레임을 사용한다. 캐릭터 셀 중심은 발 기준 +9/32 유닛이다. +- 메테오는 시작 시 대상 지면 위치를 고정한다. 높이 h를 1.7에서 0으로 낮추며 `(ground.x-h, ground.y+h)`에 표시하고, 높이 0에서 착탄 프레임을 재생한다. +- 메인 전투 씬, Build Settings, 전투 판정, 냉기 발사 규칙 변경은 포함하지 않는다. 전체 게임의 3D 렌더링·물리 전환도 포함하지 않는다. + +## 검증 + +PlayMode의 `Defense25DPreviewTests.FireTargetAuraAndMeteor_KeepGroundHeightLayersAndCaptureRuntimeFrames`를 실행한다. 프레임 수, 피벗, 표시 순서, 발 위치, 지면·높이 투영과 낙하 종료를 검사하고 세 장의 실제 렌더 캡처를 저장한다. 대기에 realtime 5초 제한을 두고, 테스트 시간 배율은 종료 시 복구한다. 캡처는 상위 작업 폴더의 기존 `output/tower-25d-v1`을 사용하고, 없으면 Unity 프로젝트 안에 같은 경로를 자동 생성한다. + +## 변경 이력 + +- 2026-09-24: 독립 검증 장면과 기존 이미지의 앞뒤 분리본 추가. 격리 Unity에서 PlayMode 1/1 통과, 실제 낙하 시작·중간·착탄 화면을 검토했다. 외부 작업 폴더의 기능 문서(00·01·08·09)도 함께 갱신했다. 이 문서는 Git 저장소 안에 실행 방법과 해당 작업의 규칙을 보존한다. +- `dotnet build BumpCombat.slnx --no-restore` 통과. 당시 자동 생성 csproj에는 새 검증 파일이 포함되지 않아 새 파일의 컴파일 근거는 실제 Unity PlayMode 실행이다.