From a1bfa4c8b87f35d4d4f8b3d9088a95a4d2d427c8 Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Fri, 10 Jul 2026 22:32:38 +0800 Subject: [PATCH 01/10] =?UTF-8?q?art:=20=E6=B7=BB=E5=8A=A0=E9=A3=8E?= =?UTF-8?q?=E7=AD=9D=E5=88=86=E5=B1=82=E5=BA=95=E5=9B=BE=E4=B8=8E=E9=A3=8E?= =?UTF-8?q?=E7=AD=9D=E5=B1=82=E7=B4=A0=E6=9D=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../Art/梦境素材/梦境图片/D2S轱辘_底图.png | 3 + .../梦境素材/梦境图片/D2S轱辘_底图.png.meta | 153 ++++++++++++++++++ .../Art/梦境素材/梦境图片/D2S轱辘_风筝层.png | 3 + .../梦境素材/梦境图片/D2S轱辘_风筝层.png.meta | 153 ++++++++++++++++++ .../Art/梦境素材/梦境图片/D2S风筝1_底图.png | 3 + .../梦境素材/梦境图片/D2S风筝1_底图.png.meta | 153 ++++++++++++++++++ .../Art/梦境素材/梦境图片/D2S风筝1_风筝层.png | 3 + .../梦境图片/D2S风筝1_风筝层.png.meta | 153 ++++++++++++++++++ .../Art/梦境素材/梦境图片/D2S风筝2_底图.png | 3 + .../梦境素材/梦境图片/D2S风筝2_底图.png.meta | 153 ++++++++++++++++++ .../Art/梦境素材/梦境图片/D2S风筝2_风筝层.png | 3 + .../梦境图片/D2S风筝2_风筝层.png.meta | 153 ++++++++++++++++++ .../Art/梦境素材/梦境图片/D2S风筝3_底图.png | 3 + .../梦境素材/梦境图片/D2S风筝3_底图.png.meta | 153 ++++++++++++++++++ .../Art/梦境素材/梦境图片/D2S风筝3_风筝层.png | 3 + .../梦境图片/D2S风筝3_风筝层.png.meta | 153 ++++++++++++++++++ .../Art/梦境素材/梦境图片/D2S风筝4_底图.png | 3 + .../梦境素材/梦境图片/D2S风筝4_底图.png.meta | 153 ++++++++++++++++++ .../Art/梦境素材/梦境图片/D2S风筝4_风筝层.png | 3 + .../梦境图片/D2S风筝4_风筝层.png.meta | 153 ++++++++++++++++++ .../Art/梦境素材/梦境图片/D2S风筝5_底图.png | 3 + .../梦境素材/梦境图片/D2S风筝5_底图.png.meta | 153 ++++++++++++++++++ .../Art/梦境素材/梦境图片/D2S风筝5_风筝层.png | 3 + .../梦境图片/D2S风筝5_风筝层.png.meta | 153 ++++++++++++++++++ 24 files changed, 1872 insertions(+) create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_底图.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_底图.png.meta create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_风筝层.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_风筝层.png.meta create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_底图.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_底图.png.meta create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_风筝层.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_风筝层.png.meta create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_底图.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_底图.png.meta create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_风筝层.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_风筝层.png.meta create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_底图.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_底图.png.meta create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_风筝层.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_风筝层.png.meta create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_底图.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_底图.png.meta create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_风筝层.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_风筝层.png.meta create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_底图.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_底图.png.meta create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_风筝层.png create mode 100644 Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_风筝层.png.meta diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_底图.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_底图.png new file mode 100644 index 000000000..d20d85877 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_底图.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91591a8b41f5616c4381676194c5e225ece284862881d0660d0872390bcbb44c +size 1201 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_底图.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_底图.png.meta new file mode 100644 index 000000000..e2ac15aac --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_底图.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 092acdb85d0c47e28e9c49f030be3135 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_风筝层.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_风筝层.png new file mode 100644 index 000000000..eda94b8c9 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_风筝层.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf0c3496909ec1613d3681f512f5160ea06fd9c9a44a90cd24496050717ce1e0 +size 23541 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_风筝层.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_风筝层.png.meta new file mode 100644 index 000000000..a20a92c2f --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S轱辘_风筝层.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: aba4ab500f264e2e84eb58a699c01f67 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_底图.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_底图.png new file mode 100644 index 000000000..52ae6b8b2 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_底图.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9ed563fb5f77fcfc34959fb86d098340ff482d253a1aa8a03097dade40b7963 +size 843 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_底图.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_底图.png.meta new file mode 100644 index 000000000..d81214edc --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_底图.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 50642e42d3b44ad6a30f9ba57f0d079f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_风筝层.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_风筝层.png new file mode 100644 index 000000000..ea7b0a8cc --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_风筝层.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfd7d74611ac2f105b2e8e8c9b76c5028f591797217e078c63d77e9daf7f680d +size 18825 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_风筝层.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_风筝层.png.meta new file mode 100644 index 000000000..8db338a32 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝1_风筝层.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: c99d7ea9ef174a91ac39b4edcb4022bc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_底图.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_底图.png new file mode 100644 index 000000000..52ae6b8b2 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_底图.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9ed563fb5f77fcfc34959fb86d098340ff482d253a1aa8a03097dade40b7963 +size 843 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_底图.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_底图.png.meta new file mode 100644 index 000000000..621717ccb --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_底图.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 5a95e01c21ff4ca5ac4935f3d389d154 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_风筝层.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_风筝层.png new file mode 100644 index 000000000..00480e752 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_风筝层.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da1b7286141f7046060ce6394c596003b2daa6f4d1b4bc9f7ea990bcedcbe54b +size 9860 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_风筝层.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_风筝层.png.meta new file mode 100644 index 000000000..c7a0cfa7d --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝2_风筝层.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: a49931b5b369446a8f10eb18c909d045 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_底图.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_底图.png new file mode 100644 index 000000000..52ae6b8b2 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_底图.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9ed563fb5f77fcfc34959fb86d098340ff482d253a1aa8a03097dade40b7963 +size 843 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_底图.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_底图.png.meta new file mode 100644 index 000000000..6b15f97d8 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_底图.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 5143563b9aa149dd95fb22e0cdb217f0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_风筝层.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_风筝层.png new file mode 100644 index 000000000..d4e21b098 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_风筝层.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea955cc7b5ff17c9e1ee2bb6dda97131d0f6057f13ba5318d96ac58be66eb10f +size 1748 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_风筝层.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_风筝层.png.meta new file mode 100644 index 000000000..d2d77d936 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝3_风筝层.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: a8328da1309d4245805369101ec469ec +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_底图.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_底图.png new file mode 100644 index 000000000..52ae6b8b2 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_底图.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9ed563fb5f77fcfc34959fb86d098340ff482d253a1aa8a03097dade40b7963 +size 843 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_底图.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_底图.png.meta new file mode 100644 index 000000000..82270a3d9 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_底图.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 3e85a09942fc46ab834adc9e001496fc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_风筝层.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_风筝层.png new file mode 100644 index 000000000..846d95efb --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_风筝层.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04c391f301c671ab2200a6ebcb6d854cc1b0c0b0702c30684dec013bebc553f9 +size 680 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_风筝层.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_风筝层.png.meta new file mode 100644 index 000000000..407dbfd0b --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝4_风筝层.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 315c4cc7b8124891bf25888819219c3f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_底图.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_底图.png new file mode 100644 index 000000000..52ae6b8b2 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_底图.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9ed563fb5f77fcfc34959fb86d098340ff482d253a1aa8a03097dade40b7963 +size 843 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_底图.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_底图.png.meta new file mode 100644 index 000000000..8127f7c29 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_底图.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 317a2f7d9ab942a7814fb93917398ce7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_风筝层.png b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_风筝层.png new file mode 100644 index 000000000..cb601c0c2 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_风筝层.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bd155252beb00c2c06546a49ea4851394c2c1579ca5f5d29fb6cd3f4ec24025 +size 472 diff --git a/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_风筝层.png.meta b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_风筝层.png.meta new file mode 100644 index 000000000..2f5dca334 --- /dev/null +++ b/Assets/RawResources/Art/梦境素材/梦境图片/D2S风筝5_风筝层.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: d01c57d9b2d64bf6992635225eb1fc48 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 40 + 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: 3 + 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: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: From 18d6d970f9e4bd8d21807ff772ee90db67bc40ec Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Fri, 10 Jul 2026 22:32:52 +0800 Subject: [PATCH 02/10] =?UTF-8?q?feat(scene-mgmt):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E9=A3=8E=E7=AD=9D=E7=B2=BE=E7=81=B5=E5=88=86=E5=B1=82=E5=8A=A8?= =?UTF-8?q?=E6=95=88=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../Scripts/SceneManagement/SpriteShowcase.cs | 368 +++++++++++++++++- 1 file changed, 365 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/SceneManagement/SpriteShowcase.cs b/Assets/Scripts/SceneManagement/SpriteShowcase.cs index c444291c8..e13fb24c1 100644 --- a/Assets/Scripts/SceneManagement/SpriteShowcase.cs +++ b/Assets/Scripts/SceneManagement/SpriteShowcase.cs @@ -13,17 +13,30 @@ namespace AibisDream { /// Addressable Key 模板,与 Scene_Dream 中梦境图 Address 一致。 private const string DreamSpritePath = "Sprite/梦境/{0}.png"; + private const string KiteBaseSuffix = "_底图"; + private const string KiteMotionSuffix = "_风筝层"; [SerializeField] private SpriteRenderer _spriteRenderer; [SerializeField] private SpriteRenderer _backgroundSpriteRenderer; [SerializeField] private SpriteRenderer _largeSpriteRenderer; + private SpriteRenderer _smallMotionRenderer; + private SpriteMask _smallMotionMask; + private DG.Tweening.Sequence _smallMotionSequence; + private Vector3 _smallBaseLocalPosition; + private Quaternion _smallBaseLocalRotation; + private Vector3 _smallBaseLocalScale; + private Vector3 _smallMotionBaseOffset; + private string _currentSmallPicName; + // 通过 activeSelf 判断当前状态 private bool IsSmallShowing => _spriteRenderer.gameObject.activeSelf; private bool IsLargeShowing => _largeSpriteRenderer != null && _largeSpriteRenderer.gameObject.activeSelf; public override void OnSingletonInit() { + CaptureSmallBaseTransform(); + // 初始状态:隐藏 _spriteRenderer.gameObject.SetActive(false); _spriteRenderer.SetAlpha(0); @@ -36,6 +49,16 @@ namespace AibisDream } } + private void CaptureSmallBaseTransform() + { + if (_spriteRenderer == null) return; + + var tr = _spriteRenderer.transform; + _smallBaseLocalPosition = tr.localPosition; + _smallBaseLocalRotation = tr.localRotation; + _smallBaseLocalScale = tr.localScale; + } + private static string NormalizeDreamPicName(string picName) { if (string.IsNullOrEmpty(picName)) return picName; @@ -55,6 +78,246 @@ namespace AibisDream Debug.LogError($"[SpriteShowcase] Failed to load sprite: {key}"); } + private void EnsureSmallMotionRenderer() + { + if (_smallMotionRenderer != null || _spriteRenderer == null) return; + + var motionObject = new GameObject($"{_spriteRenderer.name} Motion"); + motionObject.transform.SetParent(_spriteRenderer.transform.parent); + _smallMotionRenderer = motionObject.AddComponent(); + CopySmallRendererSettings(_smallMotionRenderer, 1, SpriteMaskInteraction.VisibleInsideMask); + _smallMotionRenderer.gameObject.SetActive(false); + _smallMotionRenderer.SetAlpha(0); + } + + private void CopySmallRendererSettings(SpriteRenderer target, int sortingOrderOffset, SpriteMaskInteraction maskInteraction) + { + if (target == null || _spriteRenderer == null) return; + + target.sharedMaterial = _spriteRenderer.sharedMaterial; + target.sortingLayerID = _spriteRenderer.sortingLayerID; + target.sortingOrder = _spriteRenderer.sortingOrder + sortingOrderOffset; + target.drawMode = _spriteRenderer.drawMode; + target.size = _spriteRenderer.size; + target.flipX = _spriteRenderer.flipX; + target.flipY = _spriteRenderer.flipY; + target.maskInteraction = maskInteraction; + } + + private void EnsureSmallMotionMask() + { + if (_smallMotionMask != null || _spriteRenderer == null) return; + + var maskObject = new GameObject($"{_spriteRenderer.name} Motion Mask"); + maskObject.transform.SetParent(_spriteRenderer.transform.parent); + _smallMotionMask = maskObject.AddComponent(); + _smallMotionMask.alphaCutoff = 0.01f; + _smallMotionMask.isCustomRangeActive = true; + _smallMotionMask.enabled = false; + } + + private void ConfigureSmallMotionMask() + { + EnsureSmallMotionMask(); + if (_smallMotionMask == null) return; + + _smallMotionMask.sprite = _spriteRenderer.sprite; + _smallMotionMask.frontSortingLayerID = _spriteRenderer.sortingLayerID; + _smallMotionMask.backSortingLayerID = _spriteRenderer.sortingLayerID; + _smallMotionMask.frontSortingOrder = _spriteRenderer.sortingOrder + 2; + _smallMotionMask.backSortingOrder = _spriteRenderer.sortingOrder; + + var maskTr = _smallMotionMask.transform; + maskTr.localPosition = _smallBaseLocalPosition; + maskTr.localRotation = _smallBaseLocalRotation; + maskTr.localScale = _smallBaseLocalScale; + _smallMotionMask.enabled = true; + } + + private void KillSmallTweenState() + { + _smallMotionSequence?.Kill(); + _smallMotionSequence = null; + } + + private void ResetSmallTransform(bool resetMotionLayer = true) + { + if (_spriteRenderer == null) return; + + var tr = _spriteRenderer.transform; + tr.localPosition = _smallBaseLocalPosition; + tr.localRotation = _smallBaseLocalRotation; + tr.localScale = _smallBaseLocalScale; + + if (!resetMotionLayer || _smallMotionRenderer == null) return; + + var motionTr = _smallMotionRenderer.transform; + motionTr.localPosition = _smallBaseLocalPosition + _smallMotionBaseOffset; + motionTr.localRotation = _smallBaseLocalRotation; + motionTr.localScale = _smallBaseLocalScale; + } + + private static string NormalizeMotionProfile(string motionProfile) + { + return string.IsNullOrEmpty(motionProfile) + ? string.Empty + : motionProfile.Trim().ToLowerInvariant(); + } + + private Vector3 BaseOffset(float x, float y) + { + return _smallBaseLocalPosition + _smallMotionBaseOffset + new Vector3(x, y, 0f); + } + + private static bool TryGetSplitMotionPicNames(string picName, out string basePicName, out string motionPicName) + { + var normalized = NormalizeDreamPicName(picName); + var isSplitMotionPic = !string.IsNullOrEmpty(normalized) + && (normalized.StartsWith("D2S风筝", StringComparison.Ordinal) + || normalized == "D2S轱辘") + && !normalized.EndsWith(KiteBaseSuffix, StringComparison.Ordinal) + && !normalized.EndsWith(KiteMotionSuffix, StringComparison.Ordinal); + + if (isSplitMotionPic) + { + basePicName = $"{normalized}{KiteBaseSuffix}"; + motionPicName = $"{normalized}{KiteMotionSuffix}"; + return true; + } + + basePicName = picName; + motionPicName = null; + return false; + } + + private void PlaySmallMotion(string motionProfile) + { + _smallMotionSequence?.Kill(); + _smallMotionSequence = null; + + var profile = NormalizeMotionProfile(motionProfile); + if (string.IsNullOrEmpty(profile) || profile == "none") return; + + var target = _smallMotionRenderer != null && _smallMotionRenderer.gameObject.activeSelf + ? _smallMotionRenderer + : _spriteRenderer; + var tr = target.transform; + var seq = DOTween.Sequence(); + + switch (profile) + { + // 近景微风:位移/倾角更明显,多段不对称节奏模拟阵风 + case "kite_low_breeze": + seq.Append(tr.DOLocalMove(BaseOffset(0.32f, 0.21f), 2.8f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 6.4f), 2.8f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(-0.13f, 0.06f), 1.35f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -3.6f), 1.35f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.25f, 0.17f), 2.45f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4.8f), 2.45f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.06f, 0.12f), 0.95f).SetEase(Ease.OutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 1.2f), 0.95f).SetEase(Ease.OutSine)); + seq.SetLoops(-1, LoopType.Yoyo); + break; + + case "kite_mid_breeze": + seq.Append(tr.DOLocalMove(BaseOffset(0.3f, 0.19f), 2.35f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 6f), 2.35f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(-0.14f, 0.07f), 1.18f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -3.5f), 1.18f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.27f, 0.16f), 2.05f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4.8f), 2.05f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.02f, 0.1f), 0.82f).SetEase(Ease.OutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -0.8f), 0.82f).SetEase(Ease.OutSine)); + seq.SetLoops(-1, LoopType.Yoyo); + break; + + case "kite_far_breeze": + seq.Append(tr.DOLocalMove(BaseOffset(0.2f, 0.12f), 3.2f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4f), 3.2f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(-0.08f, 0.04f), 2.2f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2.2f), 2.2f).SetEase(Ease.InOutSine)); + seq.SetLoops(-1, LoopType.Yoyo); + break; + + case "kite_tension": + seq.Append(tr.DOLocalMove(BaseOffset(0.48f, 0.15f), 0.92f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -9f), 0.92f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.1f, -0.13f), 0.58f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4.2f), 0.58f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.39f, 0.11f), 0.9f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -6.6f), 0.9f).SetEase(Ease.InOutSine)); + seq.SetLoops(-1, LoopType.Yoyo); + break; + + case "kite_drop": + seq.Append(tr.DOLocalMove(BaseOffset(0.1f, -0.34f), 1.55f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -5.5f), 1.55f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(-0.08f, -0.18f), 1.2f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 2.8f), 1.2f).SetEase(Ease.InOutSine)); + seq.SetLoops(-1, LoopType.Yoyo); + break; + + case "kite_breakaway": + seq.Append(tr.DOLocalMove(BaseOffset(0.58f, 0.2f), 0.58f).SetEase(Ease.OutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -12f), 0.58f).SetEase(Ease.OutSine)); + seq.Append(tr.DOShakePosition(0.28f, new Vector3(0.075f, 0.035f, 0f), 10, 78f, false, false) + .SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.14f, -0.16f), 0.46f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 5.8f), 0.46f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.5f, 0.16f), 0.66f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -9f), 0.66f).SetEase(Ease.InOutSine)); + seq.SetLoops(-1, LoopType.Yoyo); + break; + + case "reel_tension": + seq.Append(tr.DOLocalMove(BaseOffset(0.14f, -0.18f), 0.5f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -3.8f), 0.5f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOShakePosition(0.22f, new Vector3(0.04f, 0.02f, 0f), 8, 82f, false, false) + .SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(-0.06f, -0.06f), 0.7f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 1.6f), 0.7f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.08f, -0.14f), 0.92f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2.2f), 0.92f).SetEase(Ease.InOutSine)); + seq.SetLoops(-1, LoopType.Yoyo); + break; + + case "kite_lift": + seq.Append(tr.DOLocalMove(BaseOffset(0.28f, 0.34f), 0.68f).SetEase(Ease.OutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -6.4f), 0.68f).SetEase(Ease.OutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.16f, 0.22f), 0.78f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -3.2f), 0.78f).SetEase(Ease.InOutSine)); + break; + + case "kite_sink": + seq.Append(tr.DOLocalMove(BaseOffset(-0.14f, -0.34f), 0.76f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 5.2f), 0.76f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(-0.06f, -0.22f), 0.62f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 2.4f), 0.62f).SetEase(Ease.InOutSine)); + break; + + case "kite_taut": + seq.Append(tr.DOLocalMove(BaseOffset(0.4f, 0.08f), 0.42f).SetEase(Ease.OutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -8f), 0.42f).SetEase(Ease.OutSine)); + seq.Append(tr.DOShakePosition(0.24f, new Vector3(0.06f, 0.025f, 0f), 8, 76f, false, false) + .SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.24f, 0.03f), 0.62f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -4.2f), 0.62f).SetEase(Ease.InOutSine)); + break; + + default: + seq.Kill(); + return; + } + + _smallMotionSequence = seq; + } + + public void PlayCurrentMotion(string motionProfile) + { + if (_spriteRenderer == null || !IsSmallShowing) return; + PlaySmallMotion(motionProfile); + } + /// /// 显示物体(小图) /// @@ -69,13 +332,82 @@ namespace AibisDream yield return HideLargeObj(duration); } + KillSmallTweenState(); + ResetSmallTransform(); + + if (_smallMotionRenderer != null) + { + _smallMotionRenderer.gameObject.SetActive(false); + _smallMotionRenderer.SetAlpha(0); + _smallMotionRenderer.maskInteraction = SpriteMaskInteraction.None; + } + + if (_smallMotionMask != null) + { + _smallMotionMask.enabled = false; + } + _spriteRenderer.gameObject.SetActive(true); yield return LoadDreamSpriteInto(_spriteRenderer, picName); + _currentSmallPicName = NormalizeDreamPicName(picName); yield return _spriteRenderer.DOFade(1, duration).WaitForCompletion(); } + public IEnumerator ShowObjWithMotion(string picName, string motionProfile, float duration) + { + // 互斥:如果大图正在显示,先隐藏 + if (IsLargeShowing) + { + yield return HideLargeObj(duration); + } + + var normalizedName = NormalizeDreamPicName(picName); + var useSplitMotion = TryGetSplitMotionPicNames(picName, out var basePicName, out var motionPicName); + var isSamePic = string.Equals(_currentSmallPicName, normalizedName, StringComparison.OrdinalIgnoreCase); + _smallMotionBaseOffset = normalizedName == "D2S轱辘" ? new Vector3(0f, -0.32f, 0f) : Vector3.zero; + + KillSmallTweenState(); + + ResetSmallTransform(resetMotionLayer: !isSamePic); + _spriteRenderer.gameObject.SetActive(true); + + if (!isSamePic || _spriteRenderer.sprite == null) + { + yield return LoadDreamSpriteInto(_spriteRenderer, useSplitMotion ? basePicName : picName); + _currentSmallPicName = normalizedName; + } + _spriteRenderer.SetAlpha(1f); + + if (useSplitMotion) + { + EnsureSmallMotionRenderer(); + _smallMotionRenderer.gameObject.SetActive(true); + CopySmallRendererSettings(_smallMotionRenderer, 1, SpriteMaskInteraction.VisibleInsideMask); + ConfigureSmallMotionMask(); + ResetSmallTransform(resetMotionLayer: !isSamePic); + if (!isSamePic || _smallMotionRenderer.sprite == null) + { + yield return LoadDreamSpriteInto(_smallMotionRenderer, motionPicName); + } + _smallMotionRenderer.SetAlpha(1f); + } + else if (_smallMotionRenderer != null) + { + _smallMotionRenderer.gameObject.SetActive(false); + _smallMotionRenderer.SetAlpha(0); + _smallMotionRenderer.maskInteraction = SpriteMaskInteraction.None; + + if (_smallMotionMask != null) + { + _smallMotionMask.enabled = false; + } + } + + PlaySmallMotion(motionProfile); + } + /// /// 显示大图 /// @@ -84,10 +416,10 @@ namespace AibisDream /// 协程 public IEnumerator ShowLargeObj(string picName, float duration = 1) { - // 互斥:如果小图正在显示,先隐藏 + // 互斥:小图立刻关掉,避免风筝层与底图不同步淡出造成的怪 fade if (IsSmallShowing) { - yield return HideObj(duration); + yield return HideObj(0f); } if (_largeSpriteRenderer == null) yield break; @@ -120,8 +452,38 @@ namespace AibisDream // force=false 时检查状态,未显示则直接返回 if (!force && !IsSmallShowing) yield break; - yield return _spriteRenderer.DOFade(0, duration).WaitForCompletion(); + KillSmallTweenState(); + ResetSmallTransform(); + + var motionActive = _smallMotionRenderer != null && _smallMotionRenderer.gameObject.activeSelf; + if (duration <= 0f) + { + _spriteRenderer.SetAlpha(0); + if (motionActive) + _smallMotionRenderer.SetAlpha(0); + } + else + { + var fade = _spriteRenderer.DOFade(0, duration); + if (motionActive) + _smallMotionRenderer.DOFade(0, duration); + yield return fade.WaitForCompletion(); + } + _spriteRenderer.gameObject.SetActive(false); + _currentSmallPicName = null; + + if (_smallMotionRenderer != null) + { + _smallMotionRenderer.gameObject.SetActive(false); + _smallMotionRenderer.SetAlpha(0); + _smallMotionRenderer.maskInteraction = SpriteMaskInteraction.None; + } + + if (_smallMotionMask != null) + { + _smallMotionMask.enabled = false; + } } /// From 8d1f072d55dcb5de7479374f8cf8f8a7cb0adc23 Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Fri, 10 Jul 2026 22:33:05 +0800 Subject: [PATCH 03/10] =?UTF-8?q?feat(dialog):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=B2=BE=E7=81=B5=E5=8A=A8=E6=95=88=20Yarn=20=E5=91=BD?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../Scripts/Dialog System/BaseYarnCommand.cs | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Dialog System/BaseYarnCommand.cs b/Assets/Scripts/Dialog System/BaseYarnCommand.cs index 64785e84e..3ea567548 100644 --- a/Assets/Scripts/Dialog System/BaseYarnCommand.cs +++ b/Assets/Scripts/Dialog System/BaseYarnCommand.cs @@ -92,6 +92,27 @@ namespace AibisDream yield return SpriteShowcase.Instance.ShowObj(picName, duration); } + [YarnCommand("show_sprite_motion")] + public static IEnumerator ShowSpriteMotion(string picName, string motionProfile, float duration = 0.35f) + { + var showcase = SpriteShowcase.Instance; + if (showcase == null) yield break; + yield return showcase.ShowObjWithMotion(picName, motionProfile, duration); + } + + [YarnCommand("sprite_motion")] + public static IEnumerator SpriteMotion(string motionProfile, float leadDuration = 0.18f) + { + var showcase = SpriteShowcase.Instance; + if (showcase == null) yield break; + + showcase.PlayCurrentMotion(motionProfile); + if (leadDuration > 0f) + { + yield return new WaitForSeconds(leadDuration); + } + } + [YarnCommand("hide_sprite")] public static IEnumerator HideSprite(float duration = 1) { @@ -209,4 +230,4 @@ namespace AibisDream #endregion } -} \ No newline at end of file +} From 024eecb404ed879dbf18f2ac99f0f0a7063fbd04 Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Fri, 10 Jul 2026 22:33:17 +0800 Subject: [PATCH 04/10] =?UTF-8?q?yarn:=20=E9=A3=8E=E7=AD=9D=E6=AE=B5?= =?UTF-8?q?=E8=90=BD=E6=8E=A5=E5=85=A5=E7=B2=BE=E7=81=B5=E5=8A=A8=E6=95=88?= =?UTF-8?q?=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn b/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn index bd9565868..3fbb46145 100644 --- a/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn +++ b/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn @@ -285,7 +285,7 @@ position: 642,-24 <> 轱辘在手里猛烈地旋转着,风筝线被一圈圈地放出去。 #line:050df8f <> - <> + <> <> <> girl: 飞起来啦。再高些! #line:0f93679 @@ -293,18 +293,18 @@ position: 642,-24 //girl: 还不够高呢! #line:0c2f2ff me: 该怎么做来着…… #line:0bcfa62 <> - <> + <> 风筝摇摇晃晃地上升着。 #line:0f56000 手里的线仿佛有自己的生命,时而紧,时而松。 #line:013729f girl: 再高些! #line:0051916 me: 跟着风的感觉…好像是这么说的? #line:099f2be <> - <> + <> //me: 跟着风的感觉! #line:0675827 你尝试去感觉风。 #line:064f718 风的气息若有若无地吹过你的脸,杂乱无章。 #line:05ea773 <> - <> + <> 风筝停止了上升,开始往下落。 #line:02c49e6 girl: 要掉啦! #line:0b3c2c8 <> @@ -316,7 +316,7 @@ position: 642,-24 ->放线 #line:0788a12 ->收线 #line:0f26666 ->保持 #line:042d942 -<> +<> <> <> <> @@ -338,16 +338,16 @@ position: 642,197 <> 线轱辘在手里猛烈地旋转着,风筝线被一圈圈地放出去。 #line:05a3328 <> - <> + <> 风筝轻轻摇晃着,飘带随风飘动。 #line:0e0465e <> - <> + <> 风筝飞在高处,像一只自由的小鸟。风筝线垂在空中,轻轻地跳动着。 #line:09505c0 <> - <> + <> 风筝变成了空中的一个小点,几乎看不见了。手上的拉力越来越模糊。 #line:056ef2d <> - <> + <> 轱辘停止了转动。所有的线都被放出去了。你被拽得向前走了两步。 #line:080edb4 <> <> @@ -359,7 +359,7 @@ position: 642,197 <> <> - <> + <> girl: 飞起来啦。再高些! #line:0f8030a girl: 跟着风筝的感觉! #line:09f9f72 线轱辘在手里猛烈地旋转着,风筝线被一圈圈地放出去。 #line:0e787b6 @@ -435,7 +435,7 @@ position: 642,197 你被带着向前又走了两步。 #line:0629fc9 girl: 该放手了!别要了。 #line:05c16f5 风筝线崩成了一条直线。女孩焦躁不安地看看你,又看看高处的风筝。 #line:0f7de8e - <> + <> ->放手 #line:0e492d7 你下定决心,松开了手。 #line:0707e86 轱辘掉在了你的腿上,紧接着是一阵忽如其来的失重感。 #line:056985d @@ -459,45 +459,54 @@ position: 642,197 ->放线 #line:08c3eee <> - <> + <> <> + <> 风把风筝吹得越来越高,越来越远。 #line:001a06f <> <> + <> 风筝在风中轻轻摇晃着。 #line:0b3c4dc <> - <> + <> <> + <> 风筝摇摇晃晃地下落了一段高度。 #line:0c73bc9 <> ->收线 #line:08e99b8 <> - <> + <> <> + <> 风把风筝吹得更远,也更低了。 #line:0382454 <> <> + <> 风筝在风中轻轻摇晃着。 #line:00d85cc <> - <> + <> <> + <> 风筝在空中扑地抖了一下,又向高处爬了一截。 #line:00d73d6 <> ->保持 #line:0e846d1 <> <> + <> 风筝线绷得笔直,像是要断掉。 #line:01334ad <> - <> + <> <> + <> 风筝在风中轻轻摇晃。 #line:03c1cb3 <> - <> + <> <> + <> 风筝线轻轻地垂下来,形成一个更大的弧度。 #line:0d36850 <> -<> +<> <0>> <> <> @@ -526,6 +535,7 @@ cluster: Day2_Ascent position: -2,398 --- <> + <> <> 轻飘飘地... #line:0a6d6a5 <> @@ -660,7 +670,7 @@ position: -4,927 <> 有那么一瞬间,你感觉脑袋里面有什么东西断开了。 #line:0f8991d <> - <> + <> <> 你觉得你在哪见过这些纹路。 #line:0473a22 ->推门 #line:02467b3 @@ -694,7 +704,7 @@ position: -4,927 // <> <> <> - <> + <> <> <> <> @@ -891,4 +901,4 @@ me: … #line:0030ebf 它抬起手,盖下了印章。 #line:027b5ea <> <> -=== \ No newline at end of file +=== From 2792d8fafa499ee56c6773ca03abcde12fc4da5d Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Fri, 10 Jul 2026 22:33:28 +0800 Subject: [PATCH 05/10] =?UTF-8?q?fix(ui):=20=E4=BF=AE=E5=A4=8D=E5=8D=95?= =?UTF-8?q?=E8=A1=8C=E5=AF=B9=E8=AF=9D=E6=A1=86=E6=9C=AA=E6=BF=80=E6=B4=BB?= =?UTF-8?q?=E6=97=B6=E7=A9=BA=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- Assets/Scripts/UI/DialogUI/OnelineBox.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/UI/DialogUI/OnelineBox.cs b/Assets/Scripts/UI/DialogUI/OnelineBox.cs index a85cbd0a1..deb3d9d14 100644 --- a/Assets/Scripts/UI/DialogUI/OnelineBox.cs +++ b/Assets/Scripts/UI/DialogUI/OnelineBox.cs @@ -39,10 +39,13 @@ namespace AibisDream syncToken.SkipTextAnima += () => content.SkipTypewriter(); syncToken.OnAdvance += AfterAdvance; + // TMP ClearMesh 依赖 canvasRenderer;box 未激活时 SetText 会 NRE + if (box != null && !box.activeSelf) + box.SetActive(true); + // 播放文字 content.TextAnimator.SetText(string.Empty); var lineText = GetOneLineText(syncToken.lineInfo); - box.SetActive(true); HandleLayout(lineText); content.ShowText(lineText); syncToken.TextStart(); From 6e939d2a723c45ab56da9dcdb003a1330e22862f Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Sat, 11 Jul 2026 01:07:54 +0800 Subject: [PATCH 06/10] =?UTF-8?q?feat(scene-mgmt):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=A3=8E=E7=AD=9D=E8=BF=9E=E7=BB=AD=E8=A1=A8=E7=8E=B0=E6=8C=87?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/Dialog System/BaseYarnCommand.cs | 50 ++ .../Scripts/SceneManagement/SpriteShowcase.cs | 525 ++++++++++++++---- 2 files changed, 473 insertions(+), 102 deletions(-) diff --git a/Assets/Scripts/Dialog System/BaseYarnCommand.cs b/Assets/Scripts/Dialog System/BaseYarnCommand.cs index 3ea567548..e8cbf2ba4 100644 --- a/Assets/Scripts/Dialog System/BaseYarnCommand.cs +++ b/Assets/Scripts/Dialog System/BaseYarnCommand.cs @@ -113,6 +113,56 @@ namespace AibisDream } } + [YarnCommand("kite_show")] + public static IEnumerator KiteShow(float height = 0, int wind = 0, float duration = 0.35f) + { + var showcase = SpriteShowcase.Instance; + if (showcase == null) yield break; + yield return showcase.ShowKite(height, wind, duration); + } + + [YarnCommand("kite_state")] + public static IEnumerator KiteState(float height, int wind, float duration = 0.9f, float leadDuration = 0.35f) + { + var showcase = SpriteShowcase.Instance; + if (showcase == null) yield break; + + showcase.SetKiteState(height, wind, duration); + if (leadDuration > 0f) + { + yield return new WaitForSeconds(Mathf.Min(leadDuration, duration)); + } + } + + [YarnCommand("kite_wind")] + public static void KiteWind(int wind, float turbulence = -1f) + { + var showcase = SpriteShowcase.Instance; + if (showcase == null) return; + showcase.SetKiteWind(wind, turbulence); + } + + [YarnCommand("kite_accent")] + public static IEnumerator KiteAccent(string profile, float leadDuration = 0.18f) + { + var showcase = SpriteShowcase.Instance; + if (showcase == null) yield break; + + showcase.PlayKiteAccent(profile); + if (leadDuration > 0f) + { + yield return new WaitForSeconds(leadDuration); + } + } + + [YarnCommand("kite_hide")] + public static IEnumerator KiteHide(float duration = 1) + { + var showcase = SpriteShowcase.Instance; + if (showcase == null) yield break; + yield return showcase.HideKite(duration); + } + [YarnCommand("hide_sprite")] public static IEnumerator HideSprite(float duration = 1) { diff --git a/Assets/Scripts/SceneManagement/SpriteShowcase.cs b/Assets/Scripts/SceneManagement/SpriteShowcase.cs index e13fb24c1..c19bc3faa 100644 --- a/Assets/Scripts/SceneManagement/SpriteShowcase.cs +++ b/Assets/Scripts/SceneManagement/SpriteShowcase.cs @@ -172,13 +172,9 @@ namespace AibisDream private static bool TryGetSplitMotionPicNames(string picName, out string basePicName, out string motionPicName) { var normalized = NormalizeDreamPicName(picName); - var isSplitMotionPic = !string.IsNullOrEmpty(normalized) - && (normalized.StartsWith("D2S风筝", StringComparison.Ordinal) - || normalized == "D2S轱辘") - && !normalized.EndsWith(KiteBaseSuffix, StringComparison.Ordinal) - && !normalized.EndsWith(KiteMotionSuffix, StringComparison.Ordinal); - if (isSplitMotionPic) + // 风筝图已改由风筝 Rig(ShowKite 等)连续驱动,分层底图+遮罩通路仅保留给轱辘特写 + if (normalized == "D2S轱辘") { basePicName = $"{normalized}{KiteBaseSuffix}"; motionPicName = $"{normalized}{KiteMotionSuffix}"; @@ -206,102 +202,26 @@ namespace AibisDream switch (profile) { - // 近景微风:位移/倾角更明显,多段不对称节奏模拟阵风 - case "kite_low_breeze": - seq.Append(tr.DOLocalMove(BaseOffset(0.32f, 0.21f), 2.8f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 6.4f), 2.8f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(-0.13f, 0.06f), 1.35f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -3.6f), 1.35f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.25f, 0.17f), 2.45f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4.8f), 2.45f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.06f, 0.12f), 0.95f).SetEase(Ease.OutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 1.2f), 0.95f).SetEase(Ease.OutSine)); - seq.SetLoops(-1, LoopType.Yoyo); - break; - - case "kite_mid_breeze": - seq.Append(tr.DOLocalMove(BaseOffset(0.3f, 0.19f), 2.35f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 6f), 2.35f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(-0.14f, 0.07f), 1.18f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -3.5f), 1.18f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.27f, 0.16f), 2.05f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4.8f), 2.05f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.02f, 0.1f), 0.82f).SetEase(Ease.OutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -0.8f), 0.82f).SetEase(Ease.OutSine)); - seq.SetLoops(-1, LoopType.Yoyo); - break; - - case "kite_far_breeze": - seq.Append(tr.DOLocalMove(BaseOffset(0.2f, 0.12f), 3.2f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4f), 3.2f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(-0.08f, 0.04f), 2.2f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2.2f), 2.2f).SetEase(Ease.InOutSine)); - seq.SetLoops(-1, LoopType.Yoyo); - break; - - case "kite_tension": - seq.Append(tr.DOLocalMove(BaseOffset(0.48f, 0.15f), 0.92f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -9f), 0.92f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.1f, -0.13f), 0.58f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4.2f), 0.58f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.39f, 0.11f), 0.9f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -6.6f), 0.9f).SetEase(Ease.InOutSine)); - seq.SetLoops(-1, LoopType.Yoyo); - break; - - case "kite_drop": - seq.Append(tr.DOLocalMove(BaseOffset(0.1f, -0.34f), 1.55f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -5.5f), 1.55f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(-0.08f, -0.18f), 1.2f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 2.8f), 1.2f).SetEase(Ease.InOutSine)); - seq.SetLoops(-1, LoopType.Yoyo); - break; - - case "kite_breakaway": - seq.Append(tr.DOLocalMove(BaseOffset(0.58f, 0.2f), 0.58f).SetEase(Ease.OutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -12f), 0.58f).SetEase(Ease.OutSine)); - seq.Append(tr.DOShakePosition(0.28f, new Vector3(0.075f, 0.035f, 0f), 10, 78f, false, false) - .SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.14f, -0.16f), 0.46f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 5.8f), 0.46f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.5f, 0.16f), 0.66f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -9f), 0.66f).SetEase(Ease.InOutSine)); - seq.SetLoops(-1, LoopType.Yoyo); - break; - + // 轱辘:持续拉扯里的几次失控顿挫。单向循环,避免 Yoyo 反放造成“被倒带”的怪感。 case "reel_tension": - seq.Append(tr.DOLocalMove(BaseOffset(0.14f, -0.18f), 0.5f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -3.8f), 0.5f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOShakePosition(0.22f, new Vector3(0.04f, 0.02f, 0f), 8, 82f, false, false) - .SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(-0.06f, -0.06f), 0.7f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 1.6f), 0.7f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.08f, -0.14f), 0.92f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2.2f), 0.92f).SetEase(Ease.InOutSine)); - seq.SetLoops(-1, LoopType.Yoyo); - break; - - case "kite_lift": - seq.Append(tr.DOLocalMove(BaseOffset(0.28f, 0.34f), 0.68f).SetEase(Ease.OutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -6.4f), 0.68f).SetEase(Ease.OutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.16f, 0.22f), 0.78f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -3.2f), 0.78f).SetEase(Ease.InOutSine)); - break; - - case "kite_sink": - seq.Append(tr.DOLocalMove(BaseOffset(-0.14f, -0.34f), 0.76f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 5.2f), 0.76f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(-0.06f, -0.22f), 0.62f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 2.4f), 0.62f).SetEase(Ease.InOutSine)); - break; - - case "kite_taut": - seq.Append(tr.DOLocalMove(BaseOffset(0.4f, 0.08f), 0.42f).SetEase(Ease.OutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -8f), 0.42f).SetEase(Ease.OutSine)); - seq.Append(tr.DOShakePosition(0.24f, new Vector3(0.06f, 0.025f, 0f), 8, 76f, false, false) - .SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.24f, 0.03f), 0.62f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -4.2f), 0.62f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.03f, -0.05f), 0.28f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -1.5f), 0.28f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(BaseOffset(0.13f, -0.18f), 0.16f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -4.8f), 0.16f).SetEase(Ease.OutCubic)); + seq.Append(tr.DOLocalMove(BaseOffset(0.08f, -0.11f), 0.48f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2.4f), 0.48f).SetEase(Ease.InOutSine)); + seq.AppendInterval(0.12f); + seq.Append(tr.DOLocalMove(BaseOffset(0.19f, -0.25f), 0.13f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -6.5f), 0.13f).SetEase(Ease.OutCubic)); + seq.Append(tr.DOLocalMove(BaseOffset(0.11f, -0.15f), 0.62f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -3.2f), 0.62f).SetEase(Ease.InOutSine)); + seq.AppendInterval(0.2f); + seq.Append(tr.DOLocalMove(BaseOffset(0.15f, -0.21f), 0.18f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -5.2f), 0.18f).SetEase(Ease.OutCubic)); + seq.Append(tr.DOLocalMove(BaseOffset(0.06f, -0.09f), 0.75f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2f), 0.75f).SetEase(Ease.InOutSine)); + seq.AppendInterval(0.18f); + seq.SetLoops(-1, LoopType.Restart); break; default: @@ -332,6 +252,12 @@ namespace AibisDream yield return HideLargeObj(duration); } + // 互斥:风筝 Rig 正在显示时先隐藏 + if (IsKiteShowing) + { + yield return HideKite(Mathf.Min(duration, 0.25f)); + } + KillSmallTweenState(); ResetSmallTransform(); @@ -363,6 +289,12 @@ namespace AibisDream yield return HideLargeObj(duration); } + // 互斥:风筝 Rig 正在显示时先隐藏 + if (IsKiteShowing) + { + yield return HideKite(Mathf.Min(duration, 0.25f)); + } + var normalizedName = NormalizeDreamPicName(picName); var useSplitMotion = TryGetSplitMotionPicNames(picName, out var basePicName, out var motionPicName); var isSamePic = string.Equals(_currentSmallPicName, normalizedName, StringComparison.OrdinalIgnoreCase); @@ -422,6 +354,11 @@ namespace AibisDream yield return HideObj(0f); } + if (IsKiteShowing) + { + yield return HideKite(0f); + } + if (_largeSpriteRenderer == null) yield break; _largeSpriteRenderer.gameObject.SetActive(true); @@ -449,6 +386,12 @@ namespace AibisDream /// 协程 public IEnumerator HideObj(bool force, float duration = 1) { + // 风筝 Rig 视作小图的一种,hide_sprite 时一并隐藏 + if (IsKiteShowing) + { + yield return HideKite(duration); + } + // force=false 时检查状态,未显示则直接返回 if (!force && !IsSmallShowing) yield break; @@ -507,13 +450,391 @@ namespace AibisDream /// 协程 public IEnumerator HideAll(float duration = 1) { - if (IsSmallShowing) + if (IsSmallShowing || IsKiteShowing) yield return HideObj(duration); if (IsLargeShowing) yield return HideLargeObj(duration); } + #region 风筝 Rig + + // 风筝段落弃用切图(D2S风筝1/2/3),改为单张风筝图 + 三层 Transform 连续驱动: + // Kite Rig(高度补间:缩放+位移)→ Sway(常驻风况循环)→ Accent(一次性顿挫 + Renderer) + // 三层各持有独立 Tween,互不覆盖。白色底图挂在独立的静态 renderer 上,不随高度缩放。 + private const string KiteSpritePicName = "D2S风筝1_风筝层"; + private const string KiteBasePicName = "D2S风筝1_底图"; + private const float KiteMaxHeight = 13f; + /// 每升高 1 点高度,缩放乘以该系数。 + private const float KiteScalePerHeight = 0.84f; + /// 缩放下限:最远处的风筝也不小于该比例。 + private const float KiteMinScaleFactor = 0.12f; + /// 高度最大时风筝相对基准位置的漂移量(向上飘 + 少量横移)。 + private static readonly Vector3 KiteTopDrift = new Vector3(0.5f, 1.2f, 0f); + + private Transform _kiteRootPivot; + private Transform _kiteSwayPivot; + private SpriteRenderer _kiteRenderer; + private SpriteRenderer _kiteBaseRenderer; + private SpriteMask _kiteMask; + private DG.Tweening.Sequence _kiteHeightSequence; + private DG.Tweening.Sequence _kiteSwaySequence; + private DG.Tweening.Sequence _kiteAccentSequence; + private Tween _kiteFadeTween; + private Tween _kiteBaseFadeTween; + private float _kiteHeight; + /// 当前乱度 0~1,由 kite_wind 显式设定;kite_state 沿用上次的值(粘滞)。 + private float _kiteTurbulence; + private bool _kiteSpriteLoaded; + private bool _kiteBaseSpriteLoaded; + + private bool IsKiteShowing => _kiteRootPivot != null && _kiteRootPivot.gameObject.activeSelf; + + private void EnsureKiteRig() + { + if (_kiteRootPivot != null || _spriteRenderer == null) return; + + var root = new GameObject("Kite Rig"); + root.transform.SetParent(_spriteRenderer.transform.parent); + root.transform.localPosition = _smallBaseLocalPosition; + root.transform.localRotation = _smallBaseLocalRotation; + root.transform.localScale = _smallBaseLocalScale; + + var sway = new GameObject("Kite Sway"); + sway.transform.SetParent(root.transform, false); + + var accent = new GameObject("Kite Accent"); + accent.transform.SetParent(sway.transform, false); + + // 白色底图:独立静态节点,不随高度层缩放 + var baseObject = new GameObject("Kite Base"); + baseObject.transform.SetParent(_spriteRenderer.transform.parent); + baseObject.transform.localPosition = _smallBaseLocalPosition; + baseObject.transform.localRotation = _smallBaseLocalRotation; + baseObject.transform.localScale = _smallBaseLocalScale; + + // 遮罩:把风筝层限制在底图(天空)范围内,不会飘出画框 + var maskObject = new GameObject("Kite Mask"); + maskObject.transform.SetParent(_spriteRenderer.transform.parent); + maskObject.transform.localPosition = _smallBaseLocalPosition; + maskObject.transform.localRotation = _smallBaseLocalRotation; + maskObject.transform.localScale = _smallBaseLocalScale; + + _kiteRootPivot = root.transform; + _kiteSwayPivot = sway.transform; + _kiteRenderer = accent.AddComponent(); + CopySmallRendererSettings(_kiteRenderer, 1, SpriteMaskInteraction.VisibleInsideMask); + _kiteBaseRenderer = baseObject.AddComponent(); + CopySmallRendererSettings(_kiteBaseRenderer, 0, SpriteMaskInteraction.None); + _kiteMask = maskObject.AddComponent(); + _kiteMask.alphaCutoff = 0.01f; + _kiteMask.isCustomRangeActive = true; + _kiteMask.enabled = false; + + root.SetActive(false); + baseObject.SetActive(false); + _kiteRenderer.SetAlpha(0); + _kiteBaseRenderer.SetAlpha(0); + } + + private static float KiteScaleFactor(float height) => + Mathf.Max(Mathf.Pow(KiteScalePerHeight, height), KiteMinScaleFactor); + + private Vector3 KitePosition(float height) => + _smallBaseLocalPosition + KiteTopDrift * (height / KiteMaxHeight); + + private Vector3 KiteScale(float height) => _smallBaseLocalScale * KiteScaleFactor(height); + + /// 极高处降低不透明度,配合“几乎看不见”的文本。 + private static float KiteAlpha(float height) => + height <= 8f ? 1f : Mathf.Lerp(1f, 0.75f, (height - 8f) / (KiteMaxHeight - 8f)); + + private void KillKiteTweens() + { + _kiteHeightSequence?.Kill(); + _kiteHeightSequence = null; + _kiteSwaySequence?.Kill(); + _kiteSwaySequence = null; + _kiteAccentSequence?.Kill(); + _kiteAccentSequence = null; + _kiteFadeTween?.Kill(); + _kiteFadeTween = null; + _kiteBaseFadeTween?.Kill(); + _kiteBaseFadeTween = null; + } + + private void ApplyKiteStateImmediate(float height) + { + _kiteRootPivot.localPosition = KitePosition(height); + _kiteRootPivot.localRotation = _smallBaseLocalRotation; + _kiteRootPivot.localScale = KiteScale(height); + _kiteSwayPivot.localPosition = Vector3.zero; + _kiteSwayPivot.localRotation = Quaternion.identity; + _kiteRenderer.transform.localPosition = Vector3.zero; + _kiteRenderer.transform.localRotation = Quaternion.identity; + } + + /// + /// 显示风筝 Rig。已显示时等价于 (幂等)。 + /// + /// 风筝高度(对应 Yarn 变量 $h) + /// 风向(对应 Yarn 变量 $wind:1 强 / 0 无 / -1 弱) + /// 淡入时长 + public IEnumerator ShowKite(float height, int wind, float duration = 0.35f) + { + if (IsLargeShowing) + { + yield return HideLargeObj(duration); + } + + if (IsSmallShowing) + { + yield return HideObj(Mathf.Min(duration, 0.25f)); + } + + EnsureKiteRig(); + if (_kiteRenderer == null) yield break; + + height = Mathf.Clamp(height, 0f, KiteMaxHeight); + + if (IsKiteShowing) + { + SetKiteState(height, wind, duration); + yield break; + } + + KillKiteTweens(); + ApplyKiteStateImmediate(height); + _kiteHeight = height; + _kiteRootPivot.gameObject.SetActive(true); + _kiteBaseRenderer.gameObject.SetActive(true); + + if (!_kiteSpriteLoaded) + { + yield return LoadDreamSpriteInto(_kiteRenderer, KiteSpritePicName); + _kiteSpriteLoaded = _kiteRenderer.sprite != null; + } + + if (!_kiteBaseSpriteLoaded) + { + yield return LoadDreamSpriteInto(_kiteBaseRenderer, KiteBasePicName); + _kiteBaseSpriteLoaded = _kiteBaseRenderer.sprite != null; + } + + if (_kiteBaseSpriteLoaded) + { + _kiteMask.sprite = _kiteBaseRenderer.sprite; + _kiteMask.frontSortingLayerID = _kiteRenderer.sortingLayerID; + _kiteMask.backSortingLayerID = _kiteRenderer.sortingLayerID; + _kiteMask.frontSortingOrder = _spriteRenderer.sortingOrder + 2; + _kiteMask.backSortingOrder = _spriteRenderer.sortingOrder; + _kiteMask.enabled = true; + } + + _kiteTurbulence = 0f; + PlayKiteSway(wind); + _kiteBaseFadeTween = _kiteBaseRenderer.DOFade(1f, duration); + _kiteFadeTween = _kiteRenderer.DOFade(KiteAlpha(height), duration); + yield return _kiteFadeTween.WaitForCompletion(); + } + + /// + /// 高度补间(每次选择的主反馈)+ 切换风况循环。 + /// + public void SetKiteState(float height, int wind, float duration = 0.9f) + { + if (!IsKiteShowing) return; + + height = Mathf.Clamp(height, 0f, KiteMaxHeight); + _kiteHeight = height; + + _kiteHeightSequence?.Kill(); + var seq = DOTween.Sequence(); + seq.Append(_kiteRootPivot.DOLocalMove(KitePosition(height), duration).SetEase(Ease.InOutSine)); + seq.Join(_kiteRootPivot.DOScale(KiteScale(height), duration).SetEase(Ease.InOutSine)); + _kiteHeightSequence = seq; + + _kiteFadeTween?.Kill(); + _kiteFadeTween = _kiteRenderer.DOFade(KiteAlpha(height), duration); + + PlayKiteSway(wind); + } + + /// 仅切换风况循环(选择前 telegraph 风向)。 + /// 风向:1 强 / 0 无 / -1 弱 + /// 乱度 0~1;负数或省略表示平稳。设定后粘滞,kite_state 沿用。 + public void SetKiteWind(int wind, float turbulence = -1f) + { + if (!IsKiteShowing) return; + _kiteTurbulence = turbulence >= 0f ? Mathf.Clamp01(turbulence) : 0f; + PlayKiteSway(wind); + } + + /// + /// 常驻风况循环。位移在高度层的子空间里会随缩放变小,用 comp 做部分补偿保证远处仍有可读的移动。 + /// 平稳(乱度 0):大而缓的漫游位移,自由自在地飘,绝不抖。 + /// 乱流(乱度 >0):一阵一阵——静一下,猛地被拽走一截(位移+旋转),慢慢荡回来,再来一阵。 + /// + private void PlayKiteSway(int wind) + { + _kiteSwaySequence?.Kill(); + _kiteSwaySequence = null; + + var tr = _kiteSwayPivot; + var storm = _kiteTurbulence; + // 屏幕可读性补偿:高度层缩小时适度放大局部位移(开方衰减),避免远处几乎不动 + var comp = Mathf.Clamp(1f / Mathf.Sqrt(KiteScaleFactor(_kiteHeight)), 1f, 2.2f); + var seq = DOTween.Sequence(); + var loopType = LoopType.Yoyo; + + if (wind > 0 && storm > 0.01f) + { + // 乱流:先被阵风突然带走,再慢慢回撑;间隔不等,让“失控”读出来但不变成抖屏。 + loopType = LoopType.Restart; + var amp = comp * (0.95f + storm * 0.95f); + seq.AppendInterval(Mathf.Lerp(0.35f, 0.12f, storm)); + seq.Append(tr.DOLocalMove(new Vector3(0.46f, 0.08f, 0f) * amp, 0.22f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -13f - storm * 8f), 0.22f).SetEase(Ease.OutCubic)); + seq.Append(tr.DOLocalMove(new Vector3(0.2f, -0.08f, 0f) * amp, 0.95f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 5f + storm * 2f), 0.95f).SetEase(Ease.InOutSine)); + seq.AppendInterval(0.08f); + seq.Append(tr.DOLocalMove(new Vector3(-0.3f, 0.16f, 0f) * amp, 0.18f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 12f + storm * 7f), 0.18f).SetEase(Ease.OutCubic)); + seq.Append(tr.DOLocalMove(new Vector3(-0.04f, 0.02f, 0f) * amp, 0.72f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2f), 0.72f).SetEase(Ease.InOutSine)); + seq.AppendInterval(Mathf.Lerp(0.28f, 0.08f, storm)); + seq.Append(tr.DOLocalMove(new Vector3(0.36f, 0.2f, 0f) * amp, 0.16f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -10f - storm * 5f), 0.16f).SetEase(Ease.OutCubic)); + seq.Append(tr.DOLocalMove(new Vector3(0.1f, 0.04f, 0f) * amp, 1.05f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 2f), 1.05f).SetEase(Ease.InOutSine)); + } + else if (wind > 0) + { + // 稳定的风:顶着风侧倾,大幅度缓慢巡游(位移为主,平稳无抖) + seq.Append(tr.DOLocalMove(new Vector3(0.3f, 0.18f, 0f) * comp, 2.6f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -7f), 2.6f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(new Vector3(0.42f, 0.06f, 0f) * comp, 2.2f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -4f), 2.2f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(new Vector3(0.12f, 0.12f, 0f) * comp, 2.8f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -8.5f), 2.8f).SetEase(Ease.InOutSine)); + } + else if (wind == 0) + { + // 平稳无风:自由自在地漫游,大而缓的位移 + seq.Append(tr.DOLocalMove(new Vector3(0.26f, 0.14f, 0f) * comp, 3.2f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4f), 3.2f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(new Vector3(-0.2f, 0.24f, 0f) * comp, 3.6f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -4.5f), 3.6f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(new Vector3(-0.3f, 0.04f, 0f) * comp, 3f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 3f), 3f).SetEase(Ease.InOutSine)); + } + else + { + // 风弱:缓慢的下坠漂移 + seq.Append(tr.DOLocalMove(new Vector3(0.08f, -0.22f, 0f) * comp, 2.6f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 3.5f), 2.6f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(new Vector3(-0.14f, -0.1f, 0f) * comp, 2.2f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2f), 2.2f).SetEase(Ease.InOutSine)); + } + + seq.SetLoops(-1, loopType); + _kiteSwaySequence = seq; + } + + /// + /// 一次性顿挫动效,叠加在 Accent 层上,结束回到原位,不打断高度/风况补间。 + /// 支持:lift(上冲回落)/ sink(下坠沉降)/ taut(前扯抖动)/ drop(猛地下坠)/ flutter(原地挣扎扑腾)。 + /// + public void PlayKiteAccent(string profile) + { + if (!IsKiteShowing) return; + + _kiteAccentSequence?.Kill(); + _kiteAccentSequence = null; + + var tr = _kiteRenderer.transform; + // 位移在高度层的子空间里,随缩放自动变小,无需额外乘缩放系数 + var seq = DOTween.Sequence(); + + switch (NormalizeMotionProfile(profile)) + { + case "lift": + seq.Append(tr.DOLocalMove(new Vector3(0.14f, 0.3f, 0f), 0.35f).SetEase(Ease.OutQuad)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -6f), 0.35f).SetEase(Ease.OutQuad)); + break; + + case "sink": + seq.Append(tr.DOLocalMove(new Vector3(-0.06f, -0.28f, 0f), 0.4f).SetEase(Ease.OutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 5f), 0.4f).SetEase(Ease.OutSine)); + break; + + // 绷紧:猛地被扯直,然后绷住缓慢微颤(小幅慢速拉锯,不是震动) + case "taut": + seq.Append(tr.DOLocalMove(new Vector3(0.3f, 0.06f, 0f), 0.2f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -9f), 0.2f).SetEase(Ease.OutCubic)); + seq.Append(tr.DOLocalMove(new Vector3(0.26f, 0.03f, 0f), 0.3f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(new Vector3(0.31f, 0.07f, 0f), 0.26f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(new Vector3(0.27f, 0.04f, 0f), 0.3f).SetEase(Ease.InOutSine)); + break; + + case "drop": + seq.Append(tr.DOLocalMove(new Vector3(0.04f, -0.42f, 0f), 0.55f).SetEase(Ease.InQuad)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 7f), 0.55f).SetEase(Ease.InQuad)); + break; + + // 挣扎:左右交替的几下小拉扯,力度递减 + case "flutter": + seq.Append(tr.DOLocalMove(new Vector3(0.1f, 0.14f, 0f), 0.2f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -5f), 0.2f).SetEase(Ease.OutCubic)); + seq.Append(tr.DOLocalMove(new Vector3(-0.08f, 0.06f, 0f), 0.26f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4.5f), 0.26f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(new Vector3(0.06f, 0.1f, 0f), 0.22f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -3.5f), 0.22f).SetEase(Ease.OutCubic)); + break; + + default: + seq.Kill(); + return; + } + + // 回到原位,保证可与高度/风况补间叠加 + seq.Append(tr.DOLocalMove(Vector3.zero, 0.5f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(Vector3.zero, 0.5f).SetEase(Ease.InOutSine)); + _kiteAccentSequence = seq; + } + + /// + /// 隐藏风筝 Rig + /// + /// 淡出时长 + public IEnumerator HideKite(float duration = 1) + { + if (!IsKiteShowing) yield break; + + KillKiteTweens(); + + if (duration <= 0f) + { + _kiteRenderer.SetAlpha(0); + _kiteBaseRenderer.SetAlpha(0); + } + else + { + _kiteBaseFadeTween = _kiteBaseRenderer.DOFade(0, duration); + _kiteFadeTween = _kiteRenderer.DOFade(0, duration); + yield return _kiteFadeTween.WaitForCompletion(); + } + + _kiteRootPivot.gameObject.SetActive(false); + _kiteBaseRenderer.gameObject.SetActive(false); + if (_kiteMask != null) + { + _kiteMask.enabled = false; + } + } + + #endregion + /// /// 淡入(异步协程版本) /// From bc14705fb3adaef316f4961c71fadf32cb373840 Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Sat, 11 Jul 2026 01:08:38 +0800 Subject: [PATCH 07/10] =?UTF-8?q?yarn(dialog):=20=E4=BC=98=E5=8C=96=20D2S?= =?UTF-8?q?=20=E9=A3=8E=E7=AD=9D=E5=A4=B1=E6=8E=A7=E8=A1=A8=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn | 184 ++++++++++-------- 1 file changed, 107 insertions(+), 77 deletions(-) diff --git a/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn b/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn index 3fbb46145..a1718c983 100644 --- a/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn +++ b/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn @@ -283,45 +283,53 @@ position: 642,-24 --- <> - 轱辘在手里猛烈地旋转着,风筝线被一圈圈地放出去。 #line:050df8f + 轱辘在手里猛烈地旋转着,风筝线被一圈圈地放出去。 #line:050df8f <> - <> + <> <> <> - girl: 飞起来啦。再高些! #line:0f93679 - me: 风不够大啊…… #line:0aa1f57 - //girl: 还不够高呢! #line:0c2f2ff - me: 该怎么做来着…… #line:0bcfa62 + girl: 飞起来啦。再高些! #line:0f93679 + me: 风不够大啊…… #line:0aa1f57 + //girl: 还不够高呢! #line:0c2f2ff + me: 该怎么做来着…… #line:0bcfa62 <> - <> - 风筝摇摇晃晃地上升着。 #line:0f56000 - 手里的线仿佛有自己的生命,时而紧,时而松。 #line:013729f - girl: 再高些! #line:0051916 - me: 跟着风的感觉…好像是这么说的? #line:099f2be + <> + 风筝摇摇晃晃地上升着。 #line:0f56000 + 手里的线仿佛有自己的生命,时而紧,时而松。 #line:013729f + girl: 再高些! #line:0051916 + me: 跟着风的感觉…好像是这么说的? #line:099f2be <> - <> - //me: 跟着风的感觉! #line:0675827 - 你尝试去感觉风。 #line:064f718 - 风的气息若有若无地吹过你的脸,杂乱无章。 #line:05ea773 + <> + <> + <> + //me: 跟着风的感觉! #line:0675827 + 你尝试去感觉风。 #line:064f718 + 风的气息若有若无地吹过你的脸,杂乱无章。 #line:05ea773 <> - <> - 风筝停止了上升,开始往下落。 #line:02c49e6 - girl: 要掉啦! #line:0b3c2c8 + <> + <> + 风筝停止了上升,开始往下落。 #line:02c49e6 + girl: 要掉啦! #line:0b3c2c8 <> //================================================================================== //==[回跳内容]展示图片、描述、初始内容 //================================================================================== -->放线 #line:0788a12 -->收线 #line:0f26666 -->保持 #line:042d942 +->放线 #line:0788a12 + <> +->收线 #line:0f26666 + <> +->保持 #line:042d942 + <> <> <> <> <> - 风筝掉到了地上。女孩捡起风筝,排掉上面的尘土。 #line:0918f11 - 差一点就飞起来了!可惜。 #line:05fd02b + <> + <> + 风筝掉到了地上。女孩捡起风筝,排掉上面的尘土。 #line:0918f11 + 差一点就飞起来了!可惜。 #line:05fd02b <> <> <> @@ -336,19 +344,20 @@ cluster: Day2_Plaza position: 642,197 --- <> - 线轱辘在手里猛烈地旋转着,风筝线被一圈圈地放出去。 #line:05a3328 + 线轱辘在手里猛烈地旋转着,风筝线被一圈圈地放出去。 #line:05a3328 <> - <> - 风筝轻轻摇晃着,飘带随风飘动。 #line:0e0465e + <> + 风筝轻轻摇晃着,飘带随风飘动。 #line:0e0465e <> - <> - 风筝飞在高处,像一只自由的小鸟。风筝线垂在空中,轻轻地跳动着。 #line:09505c0 + <> + 风筝飞在高处,却不再像刚才那样听话。风筝线一会儿垂下去,一会儿又猛地弹紧。 #line:09505c0 <> - <> - 风筝变成了空中的一个小点,几乎看不见了。手上的拉力越来越模糊。 #line:056ef2d + <> + 风筝变成了空中的一个小点,在乱风里忽左忽右。手上的拉力一阵清楚,一阵又像被什么东西吞掉。 #line:056ef2d <> - <> - 轱辘停止了转动。所有的线都被放出去了。你被拽得向前走了两步。 #line:080edb4 + <> + <> + 线轱辘猛地一顿,所有线都被放出去了。线头像被卡死一样绷住,你来不及收手,被拽得踉跄向前。 #line:080edb4 <> <> me: 她怎么说的来着?…风大放线,风小收线……对吧… #line:0fd0200 @@ -359,25 +368,29 @@ position: 642,197 <> <> - <> - girl: 飞起来啦。再高些! #line:0f8030a - girl: 跟着风筝的感觉! #line:09f9f72 - 线轱辘在手里猛烈地旋转着,风筝线被一圈圈地放出去。 #line:0e787b6 + <> + girl: 飞起来啦。再高些! #line:0f8030a + girl: 跟着风筝的感觉! #line:09f9f72 + 线轱辘在手里猛烈地旋转着,风筝线被一圈圈地放出去。 #line:0e787b6 <> <> - girl: 总算飞起来了! #line:06a5d65 - 风似乎弱了一些,风筝停在了半空中,缓缓地飘落。 #line:01b9a87 + <> + girl: 总算飞起来了! #line:06a5d65 + 风似乎弱了一些,风筝停在了半空中,缓缓地飘落。 #line:01b9a87 <> <> - girl: 飞呀!飞得越高越好! #line:0e6b0ee - 风筝摇摇晃晃地上升着,你感到风筝线正在收紧。 #line:030fbe4 + <> + girl: 飞呀!飞得越高越好! #line:0e6b0ee + 风筝摇摇晃晃地上升着,你感到风筝线正在收紧。 #line:030fbe4 <> <> - girl: 你好厉害! #line:004b85e - girl: 等我长大,我也要像你一样厉害! #line:008e022 - 一阵风刮过,你感到风筝线正在收紧。 #line:066c8e4 + <> + girl: 你好厉害! #line:004b85e + girl: 等我长大,我也要像你一样厉害! #line:008e022 + 一阵风刮过,你感到风筝线正在收紧。 #line:066c8e4 <> <> + <> girl: 你有什么感觉吗? #line:047b70e me: 感觉? #line:0434441 girl: 姐姐说,等我把风筝放起来了,我就能知道她的感觉。 #line:07ed92a @@ -386,16 +399,19 @@ position: 642,197 风平稳了下来,风筝懒洋洋地在天上晃动。 #line:041ddd8 <> <> - me: 风…好像停了。好像…没有什么规律。 #line:0c86a64 + <> + me: 风…好像停了。好像…没有什么规律。 #line:0c86a64 girl: 所以她感觉…没有什么规律?搞不懂…… #line:0d5cc4e 你努力搜刮着回忆。 #line:0e2133b me: 她…怎么了? #line:094b24d girl: 我不知道。 #line:0992ff4 girl: 我只知道…她的病只有那个装进脑袋里的机器能治。 #line:0ad2dc9 + <> 风筝开始抖动起来。手上感受到的拉力变大、变乱了。 #line:09afac0 <> <> - me: 脑袋里的机器? #line:0099492 + <> + me: 脑袋里的机器? #line:0099492 girl: 对。但是每次医生装进去,都很快就拿出来了。 #line:08b9df1 girl: 医生说…她的思维太杂乱了。 #line:0bc3841 me: 排异反应? #line:04ba331 @@ -403,17 +419,21 @@ position: 642,197 风筝线长长地垂下来,风筝正轻轻地向下飘落。 #line:0345f40 <> <> - me: 我…我也是个医生。 #line:0b31de3 + <> + me: 我…我也是个医生。 #line:0b31de3 girl: 哇!你也太厉害了吧! #line:0a58e7e girl: 等我长大了,也想当一个医生! #line:0494ee2 girl: 我要消灭排异反应!到时候,姐姐想去哪就可以去哪了! #line:0a4bcf5 + <> 高处的风胡乱地刮着。风筝线越来越紧。 #line:00317ee <> <> <> <> <> - girl: 好大的风啊!快把风筝收回来吧。 #line:0551b46 + <> + <> + girl: 好大的风啊!快把风筝收回来吧。 #line:0551b46 me: …… #line:09f8d1a me: 路斯… #line:0b91d55 girl: 嗯? #line:00b1fed @@ -426,26 +446,29 @@ position: 642,197 <> <> <> - girl: 这么大风…是不是要下雨了呀? #line:0589599 + <> + <> + girl: 这么大风…是不是要下雨了呀? #line:0589599 girl: 我们该把风筝收回来了。不早了。 #line:0d9c578 + <> 风越来越大,线绷得越来越紧。 #line:02cc1b1 <> <> girl: 小心! #line:0d41d32 - 你被带着向前又走了两步。 #line:0629fc9 + 风又从侧面兜住了风筝。你下意识抱住轱辘,脚步还是被带乱了半拍。 #line:0629fc9 girl: 该放手了!别要了。 #line:05c16f5 - 风筝线崩成了一条直线。女孩焦躁不安地看看你,又看看高处的风筝。 #line:0f7de8e + 风筝线绷成一条发白的直线。女孩焦躁不安地看看你,又看看高处乱摆的风筝。 #line:0f7de8e <> ->放手 #line:0e492d7 你下定决心,松开了手。 #line:0707e86 轱辘掉在了你的腿上,紧接着是一阵忽如其来的失重感。 #line:056985d ->抓紧 #line:0f9b0e7 - 你紧紧地拽着线轱辘,手指关节被压得像是要碎了。 #line:08c160b + 你把线轱辘往怀里死死压住,顺着拉力后退半步,才勉强没有摔倒。 #line:08c160b girl: 太危险了,让它走吧! #line:000fb69 me: 来帮忙呀! #line:0bbc2c2 girl: 不!快放手! #line:0cb1ddd - 女孩想要跳起来去解开轱辘上的线头。 #line:0331894 - 一阵强大的拉力拉得你飞了起来。紧接着是一阵失重感。 #line:060a67f + 女孩想要跳起来去解开轱辘上的线头,却被绷紧的线逼得停在半路。 #line:0331894 + 下一阵风忽然兜满了风筝。轱辘从你掌心滑脱,紧接着是一阵失重感。 #line:060a67f //你仰面摔在了地上。 #line:0cb513b //me: 飞…走了…… #line:0c4b572 //风筝变成了一个小小的小点,在高空中随着风越飞越远。 #line:0ac5fd8 @@ -457,64 +480,71 @@ position: 642,197 <> <> -->放线 #line:08c3eee +->放线 #line:08c3eee <> <> <> - <> - 风把风筝吹得越来越高,越来越远。 #line:001a06f + <> + <> + 风把风筝吹得越来越高,越来越远。 #line:001a06f <> <> - <> - 风筝在风中轻轻摇晃着。 #line:0b3c4dc + <> + 风筝在风中轻轻摇晃着。 #line:0b3c4dc <> <> <> - <> - 风筝摇摇晃晃地下落了一段高度。 #line:0c73bc9 + <> + <> + 风筝摇摇晃晃地下落了一段高度。 #line:0c73bc9 <> -->收线 #line:08e99b8 +->收线 #line:08e99b8 <> <> <> - <> - 风把风筝吹得更远,也更低了。 #line:0382454 + <> + <> + 风把风筝吹得更远,也更低了。 #line:0382454 <> <> - <> - 风筝在风中轻轻摇晃着。 #line:00d85cc + <> + 风筝在风中轻轻摇晃着。 #line:00d85cc <> <> <> - <> - 风筝在空中扑地抖了一下,又向高处爬了一截。 #line:00d73d6 + <> + <> + 风筝在空中扑地抖了一下,又向高处爬了一截。 #line:00d73d6 <> -->保持 #line:0e846d1 +->保持 #line:0e846d1 <> <> - <> - 风筝线绷得笔直,像是要断掉。 #line:01334ad + <> + 风筝线绷得笔直,像是要断掉。 #line:01334ad <> <> <> - <> - 风筝在风中轻轻摇晃。 #line:03c1cb3 + <> + 风筝在风中轻轻摇晃。 #line:03c1cb3 <> <> <> - <> - 风筝线轻轻地垂下来,形成一个更大的弧度。 #line:0d36850 + <> + <> + 风筝线轻轻地垂下来,形成一个更大的弧度。 #line:0d36850 <> <> <0>> <> <> - 风筝掉到了地上。女孩捡起风筝,排掉上面的尘土。 #line:0079d8f - 差一点就飞起来了!可惜。 #line:0b780bf + <> + <> + 风筝掉到了地上。女孩捡起风筝,排掉上面的尘土。 #line:0079d8f + 差一点就飞起来了!可惜。 #line:0b780bf <> <> - 风筝线越收越紧。 #line:0599877 + 风筝线越收越紧。 #line:0599877 <> <> From 467dbfdf84c7b6db038e50a0b07a7d3f9af15fa6 Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Sat, 11 Jul 2026 12:31:30 +0800 Subject: [PATCH 08/10] =?UTF-8?q?feat(scene-mgmt):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=A3=8E=E7=AD=9D=E4=B8=8E=E8=BD=B1=E8=BE=98=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E5=8A=A8=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../Scripts/SceneManagement/SpriteShowcase.cs | 360 +++++++++++++----- 1 file changed, 271 insertions(+), 89 deletions(-) diff --git a/Assets/Scripts/SceneManagement/SpriteShowcase.cs b/Assets/Scripts/SceneManagement/SpriteShowcase.cs index c19bc3faa..d387ca1c5 100644 --- a/Assets/Scripts/SceneManagement/SpriteShowcase.cs +++ b/Assets/Scripts/SceneManagement/SpriteShowcase.cs @@ -202,26 +202,12 @@ namespace AibisDream switch (profile) { - // 轱辘:持续拉扯里的几次失控顿挫。单向循环,避免 Yoyo 反放造成“被倒带”的怪感。 + // 轱辘:全力拉住——先被拽进受力姿态(只进一次),之后进入拔河式的角力拉锯。 + // 拉锯循环见 PlayReelHold。 case "reel_tension": - seq.Append(tr.DOLocalMove(BaseOffset(0.03f, -0.05f), 0.28f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -1.5f), 0.28f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(BaseOffset(0.13f, -0.18f), 0.16f).SetEase(Ease.OutCubic)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -4.8f), 0.16f).SetEase(Ease.OutCubic)); - seq.Append(tr.DOLocalMove(BaseOffset(0.08f, -0.11f), 0.48f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2.4f), 0.48f).SetEase(Ease.InOutSine)); - seq.AppendInterval(0.12f); - seq.Append(tr.DOLocalMove(BaseOffset(0.19f, -0.25f), 0.13f).SetEase(Ease.OutCubic)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -6.5f), 0.13f).SetEase(Ease.OutCubic)); - seq.Append(tr.DOLocalMove(BaseOffset(0.11f, -0.15f), 0.62f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -3.2f), 0.62f).SetEase(Ease.InOutSine)); - seq.AppendInterval(0.2f); - seq.Append(tr.DOLocalMove(BaseOffset(0.15f, -0.21f), 0.18f).SetEase(Ease.OutCubic)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -5.2f), 0.18f).SetEase(Ease.OutCubic)); - seq.Append(tr.DOLocalMove(BaseOffset(0.06f, -0.09f), 0.75f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2f), 0.75f).SetEase(Ease.InOutSine)); - seq.AppendInterval(0.18f); - seq.SetLoops(-1, LoopType.Restart); + seq.Append(tr.DOLocalMove(BaseOffset(0.13f, -0.32f), 0.22f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2.8f), 0.22f).SetEase(Ease.OutCubic)); + seq.OnComplete(() => PlayReelHold(tr)); break; default: @@ -232,6 +218,130 @@ namespace AibisDream _smallMotionSequence = seq; } + /// + /// 轱辘“拔河角力”常驻循环:一场正在输掉的拔河。 + /// strain 随回合递增(0→1):节奏越来越快、姿态被拽得越来越深、猛夺越来越频繁; + /// 往回挣不再是平滑回弹,而是“向下被拖住→抬回一点→又沉下去→再咬住”的三段拉锯。 + /// 每回合参数随机,OnComplete 续下一回合;用纵向位移和停顿表达强拉,避免机械抖动。 + /// + private void PlayReelHold(Transform tr, float strain = 0f) + { + _smallMotionSequence?.Kill(); + + // 姿态整体随 strain 加深;时长随 strain 收紧。旋转只做小角度,避免贴图边缘穿帮。 + var deepX = strain * 0.06f; + var deepY = strain * 0.14f; + var speed = Mathf.Lerp(1f, 0.62f, strain); + var rotBias = strain * 0.8f; + + var seq = DOTween.Sequence(); + + // 对面加力:被一点点拽深 + var strainDur = UnityEngine.Random.Range(0.35f, 0.6f) * speed; + seq.Append(tr.DOLocalMove( + BaseOffset(UnityEngine.Random.Range(0.17f, 0.23f) + deepX, + UnityEngine.Random.Range(-0.42f, -0.34f) - deepY), + strainDur) + .SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate( + new Vector3(0f, 0f, UnityEngine.Random.Range(-3.6f, -2.4f) - rotBias), strainDur) + .SetEase(Ease.InOutSine)); + + // 猛夺一小截:概率与深度都随 strain 提升;夺完手上发麻—— + // 不是连续 shake,而是被向下拽住、短暂停顿,再勉强抬回一点。 + if (UnityEngine.Random.value < 0.55f + strain * 0.35f) + { + var yankDur = UnityEngine.Random.Range(0.1f, 0.16f) * speed; + seq.Append(tr.DOLocalMove( + BaseOffset(UnityEngine.Random.Range(0.25f, 0.34f) + deepX, + UnityEngine.Random.Range(-0.62f, -0.5f) - deepY), + yankDur) + .SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate( + new Vector3(0f, 0f, UnityEngine.Random.Range(-4.8f, -3.4f) - rotBias), yankDur) + .SetEase(Ease.OutCubic)); + seq.AppendInterval(UnityEngine.Random.Range(0.05f, 0.11f) * speed); + var biteDur = UnityEngine.Random.Range(0.12f, 0.2f) * speed; + seq.Append(tr.DOLocalMove( + BaseOffset(UnityEngine.Random.Range(0.19f, 0.27f) + deepX, + UnityEngine.Random.Range(-0.48f, -0.4f) - deepY), + biteDur) + .SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate( + new Vector3(0f, 0f, UnityEngine.Random.Range(-3.4f, -2.2f) - rotBias), biteDur) + .SetEase(Ease.OutCubic)); + } + + // 往回挣(一):咬牙拉回一点 + var recoverDur = UnityEngine.Random.Range(0.16f, 0.24f) * speed; + seq.Append(tr.DOLocalMove( + BaseOffset(UnityEngine.Random.Range(0.12f, 0.16f) + deepX, + UnityEngine.Random.Range(-0.32f, -0.26f) - deepY * 0.55f), + recoverDur) + .SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate( + new Vector3(0f, 0f, UnityEngine.Random.Range(-2.3f, -1.3f) - rotBias * 0.7f), recoverDur) + .SetEase(Ease.OutCubic)); + // 滑走半截:手上又被抽走一段 + var slipDur = UnityEngine.Random.Range(0.09f, 0.15f) * speed; + seq.Append(tr.DOLocalMove( + BaseOffset(UnityEngine.Random.Range(0.2f, 0.27f) + deepX, + UnityEngine.Random.Range(-0.5f, -0.4f) - deepY), + slipDur) + .SetEase(Ease.OutQuad)); + seq.Join(tr.DOLocalRotate( + new Vector3(0f, 0f, UnityEngine.Random.Range(-4.1f, -2.8f) - rotBias), slipDur) + .SetEase(Ease.OutQuad)); + // 四成回合再快速地向下沉半口气又咬住,上下拉锯的小碎步。 + if (UnityEngine.Random.value < 0.45f) + { + var dipDur = UnityEngine.Random.Range(0.08f, 0.12f) * speed; + seq.Append(tr.DOLocalMove( + BaseOffset(UnityEngine.Random.Range(0.21f, 0.28f) + deepX, + UnityEngine.Random.Range(-0.56f, -0.47f) - deepY), + dipDur) + .SetEase(Ease.OutQuad)); + seq.Join(tr.DOLocalRotate( + new Vector3(0f, 0f, UnityEngine.Random.Range(-4.4f, -3f) - rotBias), dipDur) + .SetEase(Ease.OutQuad)); + var braceDur = UnityEngine.Random.Range(0.11f, 0.16f) * speed; + seq.Append(tr.DOLocalMove( + BaseOffset(UnityEngine.Random.Range(0.16f, 0.22f) + deepX, + UnityEngine.Random.Range(-0.4f, -0.33f) - deepY), + braceDur) + .SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate( + new Vector3(0f, 0f, UnityEngine.Random.Range(-3f, -1.8f) - rotBias), braceDur) + .SetEase(Ease.OutCubic)); + } + // 往回挣(二):再咬住,但回不到最初的姿态 + var pullDur = UnityEngine.Random.Range(0.25f, 0.38f) * speed; + seq.Append(tr.DOLocalMove( + BaseOffset(UnityEngine.Random.Range(0.13f, 0.18f) + deepX, + UnityEngine.Random.Range(-0.35f, -0.28f) - deepY * 0.75f), + pullDur) + .SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate( + new Vector3(0f, 0f, UnityEngine.Random.Range(-2.8f, -1.6f) - rotBias), pullDur) + .SetEase(Ease.InOutSine)); + // 偶尔结尾再沉一下,像手腕被拖住,不做高频震动。 + if (UnityEngine.Random.value < 0.35f) + { + var sagDur = UnityEngine.Random.Range(0.12f, 0.2f) * speed; + seq.Append(tr.DOLocalMove( + BaseOffset(UnityEngine.Random.Range(0.18f, 0.24f) + deepX, + UnityEngine.Random.Range(-0.46f, -0.38f) - deepY), + sagDur) + .SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate( + new Vector3(0f, 0f, UnityEngine.Random.Range(-3.5f, -2.2f) - rotBias), sagDur) + .SetEase(Ease.InOutSine)); + } + + seq.OnComplete(() => PlayReelHold(tr, Mathf.Min(1f, strain + 0.22f))); + _smallMotionSequence = seq; + } + public void PlayCurrentMotion(string motionProfile) { if (_spriteRenderer == null || !IsSmallShowing) return; @@ -481,7 +591,6 @@ namespace AibisDream private DG.Tweening.Sequence _kiteSwaySequence; private DG.Tweening.Sequence _kiteAccentSequence; private Tween _kiteFadeTween; - private Tween _kiteBaseFadeTween; private float _kiteHeight; /// 当前乱度 0~1,由 kite_wind 显式设定;kite_state 沿用上次的值(粘滞)。 private float _kiteTurbulence; @@ -559,8 +668,6 @@ namespace AibisDream _kiteAccentSequence = null; _kiteFadeTween?.Kill(); _kiteFadeTween = null; - _kiteBaseFadeTween?.Kill(); - _kiteBaseFadeTween = null; } private void ApplyKiteStateImmediate(float height) @@ -579,7 +686,7 @@ namespace AibisDream /// /// 风筝高度(对应 Yarn 变量 $h) /// 风向(对应 Yarn 变量 $wind:1 强 / 0 无 / -1 弱) - /// 淡入时长 + /// 保留参数以兼容既有调用;出现不再淡入,仅用于互斥隐藏其它图 public IEnumerator ShowKite(float height, int wind, float duration = 0.35f) { if (IsLargeShowing) @@ -633,9 +740,9 @@ namespace AibisDream _kiteTurbulence = 0f; PlayKiteSway(wind); - _kiteBaseFadeTween = _kiteBaseRenderer.DOFade(1f, duration); - _kiteFadeTween = _kiteRenderer.DOFade(KiteAlpha(height), duration); - yield return _kiteFadeTween.WaitForCompletion(); + // 不做淡入:背景是硬切的,风筝单独 fade 反而突兀,直接以目标透明度出现 + _kiteBaseRenderer.SetAlpha(1f); + _kiteRenderer.SetAlpha(KiteAlpha(height)); } /// @@ -670,80 +777,150 @@ namespace AibisDream PlayKiteSway(wind); } + /// 屏幕可读性补偿:高度层缩小时适度放大局部位移(开方衰减),避免远处几乎不动。 + private float KiteSwayComp() => + Mathf.Clamp(1f / Mathf.Sqrt(KiteScaleFactor(_kiteHeight)), 1f, 3f); + /// /// 常驻风况循环。位移在高度层的子空间里会随缩放变小,用 comp 做部分补偿保证远处仍有可读的移动。 - /// 平稳(乱度 0):大而缓的漫游位移,自由自在地飘,绝不抖。 - /// 乱流(乱度 >0):一阵一阵——静一下,猛地被拽走一截(位移+旋转),慢慢荡回来,再来一阵。 + /// 平稳(乱度 0):沿 CatmullRom 曲线大而缓地漫游,绝不抖。 + /// 乱流(乱度 >0):转交 ,每一阵的方向、力度、间隔都随机。 /// private void PlayKiteSway(int wind) { _kiteSwaySequence?.Kill(); _kiteSwaySequence = null; - var tr = _kiteSwayPivot; - var storm = _kiteTurbulence; - // 屏幕可读性补偿:高度层缩小时适度放大局部位移(开方衰减),避免远处几乎不动 - var comp = Mathf.Clamp(1f / Mathf.Sqrt(KiteScaleFactor(_kiteHeight)), 1f, 2.2f); - var seq = DOTween.Sequence(); - var loopType = LoopType.Yoyo; - - if (wind > 0 && storm > 0.01f) + if (wind > 0 && _kiteTurbulence > 0.01f) { - // 乱流:先被阵风突然带走,再慢慢回撑;间隔不等,让“失控”读出来但不变成抖屏。 - loopType = LoopType.Restart; - var amp = comp * (0.95f + storm * 0.95f); - seq.AppendInterval(Mathf.Lerp(0.35f, 0.12f, storm)); - seq.Append(tr.DOLocalMove(new Vector3(0.46f, 0.08f, 0f) * amp, 0.22f).SetEase(Ease.OutCubic)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -13f - storm * 8f), 0.22f).SetEase(Ease.OutCubic)); - seq.Append(tr.DOLocalMove(new Vector3(0.2f, -0.08f, 0f) * amp, 0.95f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 5f + storm * 2f), 0.95f).SetEase(Ease.InOutSine)); - seq.AppendInterval(0.08f); - seq.Append(tr.DOLocalMove(new Vector3(-0.3f, 0.16f, 0f) * amp, 0.18f).SetEase(Ease.OutCubic)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 12f + storm * 7f), 0.18f).SetEase(Ease.OutCubic)); - seq.Append(tr.DOLocalMove(new Vector3(-0.04f, 0.02f, 0f) * amp, 0.72f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2f), 0.72f).SetEase(Ease.InOutSine)); - seq.AppendInterval(Mathf.Lerp(0.28f, 0.08f, storm)); - seq.Append(tr.DOLocalMove(new Vector3(0.36f, 0.2f, 0f) * amp, 0.16f).SetEase(Ease.OutCubic)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -10f - storm * 5f), 0.16f).SetEase(Ease.OutCubic)); - seq.Append(tr.DOLocalMove(new Vector3(0.1f, 0.04f, 0f) * amp, 1.05f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 2f), 1.05f).SetEase(Ease.InOutSine)); + PlayKiteGust(); + return; } - else if (wind > 0) + + var tr = _kiteSwayPivot; + var comp = KiteSwayComp(); + // 幅度随高度补偿放大后,周期也同步拉长:漂移更明显,但速度不变快,保持轻松 + var drift = 1f + (comp - 1f) * 0.4f; + var seq = DOTween.Sequence(); + + if (wind > 0) { - // 稳定的风:顶着风侧倾,大幅度缓慢巡游(位移为主,平稳无抖) - seq.Append(tr.DOLocalMove(new Vector3(0.3f, 0.18f, 0f) * comp, 2.6f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -7f), 2.6f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(new Vector3(0.42f, 0.06f, 0f) * comp, 2.2f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -4f), 2.2f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(new Vector3(0.12f, 0.12f, 0f) * comp, 2.8f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -8.5f), 2.8f).SetEase(Ease.InOutSine)); + // 稳定的风:顶着风侧倾,沿弧线缓慢巡游(位移为主,平稳无抖) + var path = new[] + { + new Vector3(0.26f, 0.15f, 0f) * comp, + new Vector3(0.46f, 0.05f, 0f) * comp, + new Vector3(0.33f, 0.24f, 0f) * comp, + new Vector3(0.11f, 0.11f, 0f) * comp, + }; + var dur = 9.2f * drift; + seq.Append(tr.DOLocalPath(path, dur, PathType.CatmullRom).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -7.5f), dur / 4f).SetEase(Ease.InOutSine) + .SetLoops(4, LoopType.Yoyo)); } else if (wind == 0) { - // 平稳无风:自由自在地漫游,大而缓的位移 - seq.Append(tr.DOLocalMove(new Vector3(0.26f, 0.14f, 0f) * comp, 3.2f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4f), 3.2f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(new Vector3(-0.2f, 0.24f, 0f) * comp, 3.6f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -4.5f), 3.6f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(new Vector3(-0.3f, 0.04f, 0f) * comp, 3f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 3f), 3f).SetEase(Ease.InOutSine)); + // 平稳无风:自由自在地沿曲线漫游,幅度加大、节奏放缓 + var path = new[] + { + new Vector3(0.3f, 0.16f, 0f) * comp, + new Vector3(0.08f, 0.36f, 0f) * comp, + new Vector3(-0.28f, 0.24f, 0f) * comp, + new Vector3(-0.38f, 0.03f, 0f) * comp, + }; + var dur = 12f * drift; + seq.Append(tr.DOLocalPath(path, dur, PathType.CatmullRom).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4f), dur / 4f).SetEase(Ease.InOutSine) + .SetLoops(4, LoopType.Yoyo)); } else { - // 风弱:缓慢的下坠漂移 - seq.Append(tr.DOLocalMove(new Vector3(0.08f, -0.22f, 0f) * comp, 2.6f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 3.5f), 2.6f).SetEase(Ease.InOutSine)); - seq.Append(tr.DOLocalMove(new Vector3(-0.14f, -0.1f, 0f) * comp, 2.2f).SetEase(Ease.InOutSine)); - seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -2f), 2.2f).SetEase(Ease.InOutSine)); + // 风弱:沿弧线缓缓向下飘 + var path = new[] + { + new Vector3(0.12f, -0.14f, 0f) * comp, + new Vector3(0.03f, -0.28f, 0f) * comp, + new Vector3(-0.17f, -0.21f, 0f) * comp, + }; + var dur = 7.8f * drift; + seq.Append(tr.DOLocalPath(path, dur, PathType.CatmullRom).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 3f), dur / 3f).SetEase(Ease.InOutSine) + .SetLoops(3, LoopType.Yoyo)); } - seq.SetLoops(-1, loopType); + seq.SetLoops(-1, LoopType.Yoyo); + _kiteSwaySequence = seq; + } + + /// + /// 单次阵风,播完通过 OnComplete 用一组新的随机参数接下一阵——节奏永不重复。 + /// 猛拽段 X 快、Y 慢半拍(不同时长+缓动),走出弧线而不是直线。 + /// 乱度越高越狂:间隔与荡回时间大幅压缩、拽得更快更斜, + /// 甩过头弹回之外,还有概率来不及回稳就被反向再抽一鞭。 + /// + private void PlayKiteGust() + { + if (!IsKiteShowing) return; + + _kiteSwaySequence?.Kill(); + + var tr = _kiteSwayPivot; + var storm = _kiteTurbulence; + var amp = KiteSwayComp() * (1f + storm * 1.15f); + // 高乱度整体提速:猛拽更快、几乎没有喘息 + var frantic = Mathf.Lerp(1f, 0.7f, storm); + + // 阵风方向:多数顺着主风向,偶尔反向兜一下;上下随机 + var side = UnityEngine.Random.value < 0.72f ? 1f : -1f; + var jerk = new Vector3( + UnityEngine.Random.Range(0.34f, 0.58f) * side, + UnityEngine.Random.Range(-0.1f, 0.3f), + 0f) * amp; + var jerkDur = UnityEngine.Random.Range(0.14f, 0.26f) * frantic; + var rot = (14f + storm * 18f) * UnityEngine.Random.Range(0.7f, 1.15f) * -side; + var settle = jerk * UnityEngine.Random.Range(0.15f, 0.4f); + var settleDur = UnityEngine.Random.Range(0.7f, 1.2f) * Mathf.Lerp(1f, 0.45f, storm); + var rest = Mathf.Lerp( + UnityEngine.Random.Range(0.35f, 0.75f), + UnityEngine.Random.Range(0.02f, 0.1f), + storm); + + var seq = DOTween.Sequence(); + seq.AppendInterval(rest); + // 猛地被拽走:X 快 Y 慢,轨迹成弧 + seq.Append(tr.DOLocalMoveX(jerk.x, jerkDur).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalMoveY(jerk.y, jerkDur * UnityEngine.Random.Range(1.4f, 1.9f)).SetEase(Ease.OutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, rot), jerkDur * 1.2f).SetEase(Ease.OutCubic)); + // 失控:甩过头再弹回来一下 + if (storm > 0.7f && UnityEngine.Random.value < 0.6f) + { + seq.Append(tr.DOLocalRotate(new Vector3(0f, 0f, -rot * 0.65f), 0.22f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalMoveX(jerk.x * 0.7f, 0.22f).SetEase(Ease.InOutSine)); + } + // 更失控:来不及回稳,就被反方向再抽一鞭 + if (storm > 0.6f && UnityEngine.Random.value < 0.5f) + { + var whipDur = UnityEngine.Random.Range(0.12f, 0.2f); + seq.Append(tr.DOLocalMoveX(-jerk.x * UnityEngine.Random.Range(0.5f, 0.9f), whipDur) + .SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalMoveY(UnityEngine.Random.Range(-0.16f, 0.2f) * amp, whipDur * 1.5f) + .SetEase(Ease.OutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -rot * UnityEngine.Random.Range(0.7f, 1.1f)), whipDur * 1.3f) + .SetEase(Ease.OutCubic)); + } + // 荡回来(X/Y 不同步 → 回程也是弧线;高乱度下这一步也短促) + seq.Append(tr.DOLocalMoveX(settle.x, settleDur).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalMoveY(settle.y, settleDur * UnityEngine.Random.Range(0.7f, 0.95f)).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, rot * UnityEngine.Random.Range(-0.3f, 0.15f)), settleDur) + .SetEase(Ease.InOutSine)); + seq.OnComplete(PlayKiteGust); _kiteSwaySequence = seq; } /// /// 一次性顿挫动效,叠加在 Accent 层上,结束回到原位,不打断高度/风况补间。 - /// 支持:lift(上冲回落)/ sink(下坠沉降)/ taut(前扯抖动)/ drop(猛地下坠)/ flutter(原地挣扎扑腾)。 + /// 支持:lift(上冲回落)/ sink(下坠沉降)/ taut(前扯抖动)/ drop(猛地下坠)/ flutter(原地挣扎扑腾) + /// / wrench(侧面兜住猛甩,最强档)。 /// public void PlayKiteAccent(string profile) { @@ -782,6 +959,20 @@ namespace AibisDream seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 7f), 0.55f).SetEase(Ease.InQuad)); break; + // 侧面兜住(最强档,切轱辘前用):先被回带半拍蓄力,随即狠狠横甩出去, + // 挣了一下没挣回来,又被兜得更远、倾得更狠——位移远超其它档位 + case "wrench": + seq.Append(tr.DOLocalMove(new Vector3(-0.11f, 0.04f, 0f), 0.09f).SetEase(Ease.OutQuad)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, 4f), 0.09f).SetEase(Ease.OutQuad)); + seq.Append(tr.DOLocalMove(new Vector3(0.7f, 0.2f, 0f), 0.16f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -24f), 0.16f).SetEase(Ease.OutCubic)); + seq.Append(tr.DOLocalMove(new Vector3(0.45f, 0.09f, 0f), 0.2f).SetEase(Ease.InOutSine)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -10f), 0.2f).SetEase(Ease.InOutSine)); + seq.Append(tr.DOLocalMove(new Vector3(0.92f, 0.3f, 0f), 0.15f).SetEase(Ease.OutCubic)); + seq.Join(tr.DOLocalRotate(new Vector3(0f, 0f, -30f), 0.15f).SetEase(Ease.OutCubic)); + seq.AppendInterval(0.25f); + break; + // 挣扎:左右交替的几下小拉扯,力度递减 case "flutter": seq.Append(tr.DOLocalMove(new Vector3(0.1f, 0.14f, 0f), 0.2f).SetEase(Ease.OutCubic)); @@ -804,26 +995,17 @@ namespace AibisDream } /// - /// 隐藏风筝 Rig + /// 隐藏风筝 Rig。与显示一致不做淡出,直接消失(过渡由外层屏幕 fade 承担)。 /// - /// 淡出时长 + /// 保留参数以兼容既有调用,实际忽略 public IEnumerator HideKite(float duration = 1) { if (!IsKiteShowing) yield break; KillKiteTweens(); - if (duration <= 0f) - { - _kiteRenderer.SetAlpha(0); - _kiteBaseRenderer.SetAlpha(0); - } - else - { - _kiteBaseFadeTween = _kiteBaseRenderer.DOFade(0, duration); - _kiteFadeTween = _kiteRenderer.DOFade(0, duration); - yield return _kiteFadeTween.WaitForCompletion(); - } + _kiteRenderer.SetAlpha(0); + _kiteBaseRenderer.SetAlpha(0); _kiteRootPivot.gameObject.SetActive(false); _kiteBaseRenderer.gameObject.SetActive(false); From 0590e755ee39f8ce8a606c097f1000a61739cc66 Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Sat, 11 Jul 2026 12:31:55 +0800 Subject: [PATCH 09/10] =?UTF-8?q?yarn(dialog):=20=E8=B0=83=E6=95=B4=20D2S?= =?UTF-8?q?=20=E9=A3=8E=E7=AD=9D=E4=B9=B1=E5=BA=A6=E4=B8=8E=E9=AB=98?= =?UTF-8?q?=E6=BD=AE=E8=A1=A8=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn b/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn index a1718c983..346f5ad27 100644 --- a/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn +++ b/Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn @@ -186,9 +186,11 @@ position: 3,80 她牵着风筝跑了起来。 #line:039b319 <> 风筝线骨碌碌地被拉了出去。 #line:0226637 - girl: 快!放线! #line:018921c + girl: 快!放线! #line:018921c <> - ->放线 #line:06d26de + <> + <> + ->放线 #line:06d26de <> //->不同意 #line:0995f5e <> @@ -399,13 +401,13 @@ position: 642,197 风平稳了下来,风筝懒洋洋地在天上晃动。 #line:041ddd8 <> <> - <> me: 风…好像停了。好像…没有什么规律。 #line:0c86a64 - girl: 所以她感觉…没有什么规律?搞不懂…… #line:0d5cc4e - 你努力搜刮着回忆。 #line:0e2133b - me: 她…怎么了? #line:094b24d - girl: 我不知道。 #line:0992ff4 - girl: 我只知道…她的病只有那个装进脑袋里的机器能治。 #line:0ad2dc9 + girl: 所以她感觉…没有什么规律?搞不懂…… #line:0d5cc4e + 你努力搜刮着回忆。 #line:0e2133b + me: 她…怎么了? #line:094b24d + girl: 我不知道。 #line:0992ff4 + girl: 我只知道…她的病只有那个装进脑袋里的机器能治。 #line:0ad2dc9 + <> <> 风筝开始抖动起来。手上感受到的拉力变大、变乱了。 #line:09afac0 <> @@ -419,7 +421,7 @@ position: 642,197 风筝线长长地垂下来,风筝正轻轻地向下飘落。 #line:0345f40 <> <> - <> + <> me: 我…我也是个医生。 #line:0b31de3 girl: 哇!你也太厉害了吧! #line:0a58e7e girl: 等我长大了,也想当一个医生! #line:0494ee2 @@ -431,7 +433,7 @@ position: 642,197 <> <> <> - <> + <> <> girl: 好大的风啊!快把风筝收回来吧。 #line:0551b46 me: …… #line:09f8d1a @@ -446,7 +448,7 @@ position: 642,197 <> <> <> - <> + <> <> girl: 这么大风…是不是要下雨了呀? #line:0589599 girl: 我们该把风筝收回来了。不早了。 #line:0d9c578 @@ -454,9 +456,12 @@ position: 642,197 风越来越大,线绷得越来越紧。 #line:02cc1b1 <> <> - girl: 小心! #line:0d41d32 + <> + <> + girl: 小心! #line:0d41d32 风又从侧面兜住了风筝。你下意识抱住轱辘,脚步还是被带乱了半拍。 #line:0629fc9 - girl: 该放手了!别要了。 #line:05c16f5 + girl: 该放手了!别要了。 #line:05c16f5 + <> 风筝线绷成一条发白的直线。女孩焦躁不安地看看你,又看看高处乱摆的风筝。 #line:0f7de8e <> ->放手 #line:0e492d7 From 66672f51887c8f9cf3f2af5cb68deef19a57a37d Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Sat, 11 Jul 2026 12:32:17 +0800 Subject: [PATCH 10/10] =?UTF-8?q?docs:=20=E8=A1=A5=E5=85=85=E9=A3=8E?= =?UTF-8?q?=E7=AD=9D=E5=91=BD=E4=BB=A4=E4=BD=BF=E7=94=A8=E6=8C=87=E5=8D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- Docs/风筝命令使用指南.md | 113 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 Docs/风筝命令使用指南.md diff --git a/Docs/风筝命令使用指南.md b/Docs/风筝命令使用指南.md new file mode 100644 index 000000000..d49c7a9b3 --- /dev/null +++ b/Docs/风筝命令使用指南.md @@ -0,0 +1,113 @@ +# 风筝 Yarn 命令使用指南 + +适用范围:`Assets/Yarn/FP/FP_Day2_sleep/FP_Day2_sleep.yarn` 的 `风筝1` / `风筝2` 节点。 + +## 背景 + +放风筝段落原来用 `D2S风筝1/2/3` 三张切图按高度阈值硬切,跨阈值时尺寸跳变,且节点顶部的常驻动效会覆盖选项里的一次性反馈。现已改为**单张风筝图 + 连续参数驱动**,不再使用切图。 + +实现在 [`SpriteShowcase.cs`](../Assets/Scripts/SceneManagement/SpriteShowcase.cs) 的“风筝 Rig”区域(`#region 风筝 Rig`),命令注册在 [`BaseYarnCommand.cs`](../Assets/Scripts/Dialog%20System/BaseYarnCommand.cs)。 + +### Rig 结构 + +``` +Kite Rig(高度层:缩放 + 位移,对应 $h) + └─ Kite Sway(风况层:常驻循环,对应 $wind / 乱度) + └─ Kite Accent(顿挫层:一次性动效 + 实际 SpriteRenderer) + +Kite Base(白色底图,独立静态节点,不随高度缩放) +Kite Mask(SpriteMask,以底图为形状,风筝层被裁在天空范围内) +``` + +三层动效各自持有独立 Tween,互不 `Kill`,所以选项里的一次性顿挫不会被节点顶部的常驻风况覆盖掉。 + +只用到两张图(Addressable key `Sprite/梦境/{图名}`): + +- `D2S风筝1_风筝层`:风筝本体,挂在顶层可动。 +- `D2S风筝1_底图`:白色天空底图,静态显示 + 兼作遮罩形状。 + +`D2S风筝2/3/4/5` 全套图不再使用(文件保留,未删除)。 + +## 命令一览 + +| 命令 | 签名 | 说明 | +|---|---|---| +| `kite_show` | `height=0 wind=0 duration=0.35` | 显示风筝 Rig。若已显示则等价于 `kite_state`(幂等)。会顺带隐藏正在显示的小图/大图。**总是把乱度重置为平稳**,之后要乱流需再调 `kite_wind`。 | +| `kite_state` | `height wind duration=0.9 leadDuration=0.35` | 高度补间(缩放+位移,**每次选择的主反馈**)+ 按当前乱度重放风况循环。`leadDuration` 是命令返回前的等待时间,一般不用传。 | +| `kite_wind` | `wind turbulence=-1` | 只切换风况循环,不改变高度。用于在选项出现**之前** telegraph 风况,让玩家读画面做判断。 | +| `kite_accent` | `profile leadDuration=0.18` | 播放一次性顿挫动效,叠加在顶层,结束后自动回到原位,不打断高度/风况补间。 | +| `kite_hide` | `duration=1` | 隐藏风筝 Rig(含底图、遮罩)。 | + +### 参数含义 + +- `height` 对应 Yarn 变量 `$h`,范围会被 clamp 到 `[0, 13]`。缩放曲线是 `0.84^height`,且不低于 12%(避免缩到看不见)。 +- `wind` 对应 Yarn 变量 `$wind`:`1` 强风 / `0` 无风 / `-1` 风弱。 +- `turbulence`(乱度)范围 `0~1`,**默认表示平稳(0),不是“保持不变”**: + - 省略或传负数 → 平稳,风筝沿 CatmullRom 曲线大而缓地漫游(有风时顶风侧倾巡游,无风时自由漂,风弱时缓缓下坠),绝不抖动。 + - 传正数 → 阵风:静一下 → 猛地被拽走一截(位移+旋转,X/Y 不同步走出弧线)→ 慢慢荡回 → 再来一阵。**每一阵的方向、力度、间隔都是随机的,节奏不重复**;数值越大拉扯越猛、间隔越短,乱度 ≥0.7 时还会概率性甩过头再弹回,读出“失控”。 + - **乱度是粘滞的**:由 `kite_wind` 显式设定后会保留,后续 `kite_state` 只切高度和风向,仍沿用当前乱度,直到下一次 `kite_wind` 改变它。`kite_show` 会把乱度重置为 0。 + +### `kite_accent` 支持的 profile + +| profile | 效果 | 典型使用场景 | +|---|---|---| +| `lift` | 上冲后回落 | 放线时风筝被吹高 | +| `sink` | 下坠沉降 | 收线、风弱掉高度 | +| `taut` | 猛地扯直,然后绷住小幅慢速拉锯(不是震动) | 线绷紧、风大顶线 | +| `drop` | 猛地下坠(比 sink 更快更急) | 风筝真的掉下去了 | +| `flutter` | 左右交替的几下小拉扯,力度递减 | 保持不动、原地挣扎 | + +轱辘特写(`D2S轱辘`)不属于这套 Rig,仍用旧的 `<>`,动效在 `SpriteShowcase.PlaySmallMotion` / `PlayReelHold` 里维护:先被猛地拽进受力姿态(只进一次),之后绷在那里持续高频颤抖,偶尔再被拽深一点——是“全力拉住”的发力感,不会松回原位。 + +## 典型用法模式 + +### 1. 进入风筝段落:`kite_show` + +```yarn +<> + <> + <> + <> +``` + +首次显示传初始高度/风向,乱度自动是平稳的。 + +### 2. 每轮风况变化:先 `kite_wind` 让画面 telegraph,再给选项 + +`风筝2` 节点里,每次 `<>` 之后紧跟一次 `kite_wind`,选项出现前画面已经在演风况了: + +```yarn +<> + <> + <> + me: 风…好像停了。好像…没有什么规律。 #line:0c86a64 + ... + <> + 风筝开始抖动起来。手上感受到的拉力变大、变乱了。 #line:09afac0 +``` + +**乱度取值要对着台词**:台词说“平稳/懒洋洋”就不传乱度(或传 0);台词明确说“乱”“没有规律”“胡乱刮着”才传正数,且数值随描述的混乱程度递增(本节点里 0.55 → 0.8 → 0.95 → 1,逐轮加码)。 + +### 3. 选项分支:`kite_state` 是主反馈,`kite_accent` 是点缀 + +```yarn +->放线 #line:08c3eee + <> + <> + <> + <> + 风把风筝吹得越来越高,越来越远。 #line:001a06f +``` + +先改 `$h`,再调用 `kite_state {$h} {$wind}` 让缩放/位置连续补间过去(这是玩家能感知到的主要反馈),再叠加一个短促的 `kite_accent` 强调这次选择的性质。乱度不用每次都传,`kite_state` 会沿用当前乱度。 + +### 4. 离场:`kite_hide` 或让互斥逻辑自动处理 + +风筝 Rig 已经接入 `ShowObj` / `ShowObjWithMotion` / `ShowLargeObj` / `HideObj` / `HideAll` 的互斥逻辑,切到大图或普通小图时会自动隐藏,不必每次手动 `kite_hide`。只有明确要求“风筝消失但暂不显示别的图”时才需要显式调用。 + +## 常见坑 + +- **忘记补 `kite_wind` 就直接改 `$wind` 用于选项判断**:`$wind` 变量本身不会驱动画面,画面只认 `kite_wind`/`kite_state` 里传入的 `wind` 参数。改了变量务必配一次画面调用,否则玩家看不出风况变了。 +- **乱度传太随意**:乱度是“文本说乱才乱”,不要在台词写“平稳”“懒洋洋”的段落里传正数乱度,也不要在台词强调失控时仍用默认的 0。 +- **以为 `kite_state` 会重置乱度**:不会,乱度只由 `kite_wind` 改变。如果需要在同一句里既改高度又改乱度,要显式调用两条命令(先 `kite_wind` 定乱度,再 `kite_state` 走高度)。 +- **给风筝以外的图误用 `kite_*` 命令**:这套 Rig 硬编码只加载 `D2S风筝1_风筝层` / `D2S风筝1_底图`,不接受图名参数,不能拿来做别的分层动效——别的分层动效(如轱辘)继续用 `show_sprite_motion`/`sprite_motion`。