This commit is contained in:
2026-10-12 15:32:36 +08:00
parent e4cdbd25ba
commit 1d7e30540d
14 changed files with 473 additions and 529 deletions
@@ -123,7 +123,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.1482, y: 0.1399, z: 0} m_LocalPosition: {x: 0.1482, y: 0.1399, z: 0}
m_LocalScale: {x: 0.63, y: 0.63, z: 0.63} m_LocalScale: {x: 0.63, y: 0.63, z: 0.63}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 1
m_Children: m_Children:
- {fileID: 7208169732306063125} - {fileID: 7208169732306063125}
- {fileID: 4379312204464871} - {fileID: 4379312204464871}
@@ -156,6 +156,7 @@ MonoBehaviour:
isTriggerFirst: 1 isTriggerFirst: 1
targetTra: {fileID: 0} targetTra: {fileID: 0}
bulletID: bulletID:
fireGold: 0
maxTurnSpeed: 15 maxTurnSpeed: 15
minTurnSpeed: 2 minTurnSpeed: 2
distanceForMaxTurn: 1 distanceForMaxTurn: 1
+123 -267
View File
@@ -9,13 +9,13 @@ Sprite:
m_Name: 6001 m_Name: 6001
m_Rect: m_Rect:
serializedVersion: 2 serializedVersion: 2
x: 1078 x: 539
y: 360 y: 180
width: 376 width: 188
height: 319 height: 159.5
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
m_Border: {x: 0, y: 0, z: 0, w: 0} m_Border: {x: 0, y: 0, z: 0, w: 0}
m_PixelsToUnits: 100 m_PixelsToUnits: 50
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
m_Extrude: 1 m_Extrude: 1
m_IsPolygon: 0 m_IsPolygon: 0
@@ -107,14 +107,14 @@ Sprite:
m_Bindpose: [] m_Bindpose: []
textureRect: textureRect:
serializedVersion: 2 serializedVersion: 2
x: 1078 x: 539
y: 360 y: 180
width: 376 width: 188
height: 319 height: 159.5
textureRectOffset: {x: 0, y: 0} textureRectOffset: {x: 0, y: 0}
atlasRectOffset: {x: -1, y: -1} atlasRectOffset: {x: -1, y: -1}
settingsRaw: 0 settingsRaw: 0
uvTransform: {x: 100, y: 1266, z: 100, w: 519.5} uvTransform: {x: 50, y: 633, z: 50, w: 259.75}
downscaleMultiplier: 1 downscaleMultiplier: 1
m_AtlasRD: m_AtlasRD:
serializedVersion: 3 serializedVersion: 3
@@ -198,267 +198,123 @@ Sprite:
m_Bindpose: [] m_Bindpose: []
textureRect: textureRect:
serializedVersion: 2 serializedVersion: 2
x: 1078 x: 539
y: 360 y: 180
width: 376 width: 188
height: 319 height: 159.5
textureRectOffset: {x: 0, y: 0} textureRectOffset: {x: 0, y: 0}
atlasRectOffset: {x: -1, y: -1} atlasRectOffset: {x: -1, y: -1}
settingsRaw: 0 settingsRaw: 0
uvTransform: {x: 100, y: 1266, z: 100, w: 519.5} uvTransform: {x: 50, y: 633, z: 50, w: 259.75}
downscaleMultiplier: 1 downscaleMultiplier: 1
m_PhysicsShape: m_PhysicsShape:
- - {x: -1.88, y: -1.285} - - {x: -1.88, y: -1.42}
- {x: -1.88, y: -1.405} - {x: -1.8199999, y: -1.4}
- {x: -1.8199999, y: -1.405} - {x: -1.8199999, y: -1.3199999}
- {x: -1.8199999, y: -1.295} - {x: -1.86, y: -1.28}
- {x: -1.86, y: -1.285} - {x: -1.88, y: -1.28}
- - {x: -0.45999998, y: -0.995} - - {x: -0.32, y: -0.85999995}
- {x: -0.45, y: -0.965} - {x: -0.24, y: -1.0799999}
- {x: -0.48, y: -0.955} - {x: 1.0799999, y: -1.0799999}
- {x: -0.29, y: -0.755} - {x: 1.26, y: -0.78}
- {x: -0.04, y: -0.445} - {x: 1.24, y: -0.56}
- {x: 0.07, y: -0.42499998} - {x: 1.1, y: -0.44}
- {x: -0.13, y: -0.645} - {x: 0.82, y: -0.17999999}
- {x: -0.16, y: -0.615} - {x: 0.82, y: -0.14}
- {x: -0.17999999, y: -0.615} - {x: 0.84, y: -0.17999999}
- {x: -0.19999999, y: -0.645} - {x: 0.91999996, y: -0.26}
- {x: -0.19, y: -0.745} - {x: 1.04, y: -0.26}
- {x: -0.25, y: -0.745} - {x: 1.4, y: -0.28}
- {x: -0.28, y: -0.755} - {x: 1.62, y: 0}
- {x: -0.26999998, y: -0.84499997} - {x: 1.5, y: 0.26}
- {x: -0.17999999, y: -0.935} - {x: 1.4, y: 0.38}
- {x: -0.25, y: -1.025} - {x: 1.78, y: 0.29999998}
- {x: -0.24, y: -1.0749999} - {x: 1.8399999, y: 0.32}
- {x: -0.14999999, y: -1.035} - {x: 1.8399999, y: 0.39999998}
- {x: -0.089999996, y: -1.0749999} - {x: 1.6999999, y: 0.62}
- {x: 0.19999999, y: -1.0749999} - {x: 1.4399999, y: 0.85999995}
- {x: 0.26999998, y: -1.025} - {x: 1.26, y: 0.88}
- {x: 0.45, y: -1.0749999} - {x: 1.0799999, y: 0.85999995}
- {x: 0.51, y: -1.0749999} - {x: 1.06, y: 1.26}
- {x: 0.59, y: -1.045} - {x: 0.91999996, y: 1.42}
- {x: 0.76, y: -1.045} - {x: 0.7, y: 1.4}
- {x: 0.83, y: -1.0749999} - {x: 0.65999997, y: 1.38}
- {x: 0.90999997, y: -1.0749999} - {x: 0.56, y: 1.42}
- {x: 1, y: -1.015} - {x: 0.48, y: 1.4399999}
- {x: 1.04, y: -1.0749999} - {x: 0.34, y: 1.4399999}
- {x: 1.09, y: -1.0749999} - {x: 0.16, y: 1.42}
- {x: 1.12, y: -1.0649999} - {x: 0.08, y: 1.3}
- {x: 1.09, y: -0.98499995} - {x: -0.17999999, y: 1.26}
- {x: 1.23, y: -0.775} - {x: -0.24, y: 1.24}
- {x: 1.22, y: -0.635} - {x: -0.38, y: 1.4}
- {x: 1.17, y: -0.525} - {x: -0.79999995, y: 1.42}
- {x: 0.79999995, y: -0.155} - {x: -0.91999996, y: 1.24}
- {x: 0.84, y: -0.015} - {x: -0.94, y: 0.97999996}
- {x: 0.84, y: -0.105} - {x: -1.14, y: 0.96}
- {x: 0.85999995, y: -0.195} - {x: -1.38, y: 0.74}
- {x: 0.94, y: -0.255} - {x: -1.36, y: 0.56}
- {x: 1.35, y: -0.255} - {x: -1.1999999, y: 0.32}
- {x: 1.49, y: -0.16499999} - {x: -1.4599999, y: 0.19999999}
- {x: 1.5899999, y: 0.105} - {x: -1.66, y: 0.099999994}
- {x: 1.5, y: 0.155} - {x: -1.66, y: -0.24}
- {x: 1.48, y: 0.265} - {x: -1.64, y: -0.26}
- {x: 1.3299999, y: 0.355} - {x: -1.24, y: -0.17999999}
- {x: 1.35, y: 0.415} - {x: -0.97999996, y: -0.19999999}
- {x: 1.4499999, y: 0.39499998} - {x: -0.79999995, y: -0.24}
- {x: 1.8, y: 0.305} - {x: -0.62, y: -0.04}
- {x: 1.8199999, y: 0.355} - {x: -0.59999996, y: 0.06}
- {x: 1.8199999, y: 0.42499998} - {x: -0.35999998, y: -0.16}
- {x: 1.6999999, y: 0.545} - {x: -0.78, y: -0.71999997}
- {x: 1.54, y: 0.675} - {x: -1.02, y: -0.59999996}
- {x: 1.4699999, y: 0.805} - {x: -1.26, y: -0.59999996}
- {x: 1.39, y: 0.84499997} - {x: -1.3399999, y: -0.64}
- {x: 1.26, y: 0.85499996} - {x: -1.3, y: -0.79999995}
- {x: 1.15, y: 0.805} - {x: -1.0799999, y: -0.84}
- {x: 1.0799999, y: 0.73499995} - {x: -1.5, y: -0.9}
- {x: 1.03, y: 1.095} - {x: -1.54, y: -0.94}
- {x: 1.06, y: 1.285} - {x: -1.52, y: -1}
- {x: 0.91999996, y: 1.385} - {x: -1.38, y: -1.0799999}
- {x: 0.78999996, y: 1.405} - {x: -0.52, y: -1.0799999}
- {x: 0.66999996, y: 1.385} - {x: -0.34, y: -0.84}
- {x: 0.74, y: 1.2149999} - {x: -0.24, y: -0.71999997}
- {x: 0.68, y: 1.045} - {x: -0.28, y: -0.78}
- {x: 0.64, y: 1.345} - - {x: -0.14, y: -0.59999996}
- {x: 0.62, y: 1.395} - {x: -0.08, y: -0.53999996}
- {x: 0.57, y: 1.425} - {x: 0.06, y: -0.38}
- {x: 0.47, y: 1.425} - {x: -0.099999994, y: -0.59999996}
- {x: 0.39, y: 1.405} - {x: -0.16, y: -0.59999996}
- {x: 0.32999998, y: 1.3349999} - {x: -0.17999999, y: -0.64}
- {x: 0.28, y: 1.425} - {x: -0.14, y: -0.62}
- {x: 0.24, y: 1.425} - - {x: -0.97999996, y: -0.04}
- {x: 0.13, y: 1.415} - {x: -0.91999996, y: -0.04}
- {x: 0.12, y: 1.3249999} - {x: -0.9, y: -0.02}
- {x: 0.03, y: 1.305} - {x: -0.84, y: -0.02}
- {x: 0.089999996, y: 1.245} - {x: -0.82, y: 0}
- {x: 0.049999997, y: 1.165} - {x: -0.85999995, y: -0.04}
- {x: -0.22, y: 1.245} - {x: -0.94, y: -0.04}
- {x: -0.24, y: 1.2049999} - {x: -0.96, y: -0.02}
- {x: -0.14999999, y: 1.115} - - {x: 1.3, y: 0.59999996}
- {x: -0.24, y: 1.095} - {x: 1.28, y: 0.65999997}
- {x: -0.29999998, y: 1.105} - {x: 1.3, y: 0.64}
- {x: -0.29999998, y: 1.225} - {x: 1.3399999, y: 0.64}
- {x: -0.26, y: 1.285} - {x: 1.38, y: 0.59999996}
- {x: -0.32999998, y: 1.3149999} - {x: 1.36, y: 0.53999996}
- {x: -0.45, y: 1.2049999} - - {x: -1.02, y: 0.62}
- {x: -0.47, y: 1.105} - {x: -1.02, y: 0.68}
- {x: -0.53999996, y: 1.145} - {x: -0.94, y: 0.74}
- {x: -0.53999996, y: 1.375} - {x: -0.84, y: 0.79999995}
- {x: -0.57, y: 1.425} - {x: -0.82, y: 0.79999995}
- {x: -0.62, y: 1.385} - {x: -0.82, y: 0.78}
- {x: -0.79999995, y: 1.415} - {x: -0.76, y: 0.7}
- {x: -0.83, y: 1.295} - {x: -0.79999995, y: 0.71999997}
- {x: -0.91999996, y: 1.305} - {x: -0.85999995, y: 0.71999997}
- {x: -0.89, y: 1.2049999} - {x: -0.96, y: 0.64}
- {x: -0.83, y: 1.155} - {x: -0.96, y: 0.58}
- {x: -0.89, y: 0.965} - - {x: 0.58, y: 0.59999996}
- {x: -1.01, y: 0.955} - {x: 0.59999996, y: 0.62}
- {x: -1.2099999, y: 0.865} - {x: 0.64, y: 0.62}
- {x: -1.3299999, y: 0.73499995} - {x: 0.65999997, y: 0.58}
- {x: -1.3199999, y: 0.59499997} - {x: 0.59999996, y: 0.58}
- {x: -1.28, y: 0.545} - {x: 0.59999996, y: 0.59999996}
- {x: -1.1899999, y: 0.42499998}
- {x: -1.12, y: 0.36499998}
- {x: -1.27, y: 0.285}
- {x: -1.49, y: 0.155}
- {x: -1.56, y: 0.074999996}
- {x: -1.64, y: 0.035}
- {x: -1.64, y: -0.16499999}
- {x: -1.62, y: -0.205}
- {x: -1.56, y: -0.205}
- {x: -1.38, y: -0.114999995}
- {x: -1.3, y: -0.145}
- {x: -1.1, y: -0.044999998}
- {x: -1.04, y: -0.114999995}
- {x: -0.9, y: -0.195}
- {x: -0.78, y: -0.175}
- {x: -0.71, y: -0.105}
- {x: -0.64, y: 0.074999996}
- {x: -0.34, y: 0.155}
- {x: -0.28, y: 0.145}
- {x: -0.32999998, y: -0.145}
- {x: -0.41, y: -0.295}
- {x: -0.57, y: -0.515}
- {x: -0.77, y: -0.72499996}
- {x: -0.96999997, y: -0.60499996}
- {x: -1.23, y: -0.59499997}
- {x: -1.28, y: -0.59499997}
- {x: -1.3399999, y: -0.72499996}
- {x: -1.16, y: -0.825}
- {x: -1.0699999, y: -0.815}
- {x: -1, y: -0.73499995}
- {x: -0.89, y: -0.805}
- {x: -1.18, y: -0.895}
- {x: -1.53, y: -0.905}
- {x: -1.53, y: -0.885}
- {x: -1.5999999, y: -0.905}
- {x: -1.5799999, y: -0.97499996}
- {x: -1.38, y: -1.055}
- {x: -1.3, y: -1.0749999}
- {x: -1.15, y: -1.0749999}
- {x: -0.72999996, y: -1.045}
- {x: -0.65999997, y: -1.0749999}
- {x: -0.53999996, y: -1.045}
- {x: -0.48, y: -1.015}
- - {x: 0.81, y: -0.48499998}
- {x: 0.77, y: -0.445}
- {x: 0.77, y: -0.405}
- {x: 0.78, y: -0.39499998}
- {x: 0.77, y: -0.375}
- {x: 0.77, y: -0.405}
- {x: 0.78, y: -0.435}
- {x: 0.78999996, y: -0.445}
- {x: 0.78999996, y: -0.465}
- {x: 0.81, y: -0.49499997}
- - {x: -0.98999995, y: -0.044999998}
- {x: -1.02, y: -0.024999999}
- {x: -1, y: -0.024999999}
- {x: -0.84, y: 0.015}
- {x: -0.78999996, y: 0.035}
- {x: -0.81, y: -0.005}
- {x: -0.84999996, y: -0.055}
- {x: -0.87, y: -0.055}
- {x: -0.88, y: -0.065}
- {x: -0.93, y: -0.055}
- - {x: 1.3299999, y: 0.525}
- {x: 1.3299999, y: 0.545}
- {x: 1.3199999, y: 0.575}
- {x: 1.27, y: 0.615}
- {x: 1.27, y: 0.695}
- {x: 1.3199999, y: 0.675}
- {x: 1.35, y: 0.655}
- {x: 1.36, y: 0.655}
- {x: 1.4, y: 0.60499996}
- {x: 1.41, y: 0.59499997}
- {x: 1.38, y: 0.555}
- {x: 1.38, y: 0.525}
- {x: 1.39, y: 0.515}
- {x: 1.37, y: 0.525}
- - {x: -0.98999995, y: 0.565}
- {x: -1.04, y: 0.615}
- {x: -1.05, y: 0.675}
- {x: -1.01, y: 0.72499996}
- {x: -0.94, y: 0.775}
- {x: -0.89, y: 0.79499996}
- {x: -0.85999995, y: 0.815}
- {x: -0.81, y: 0.84499997}
- {x: -0.81, y: 0.835}
- {x: -0.78, y: 0.78499997}
- {x: -0.78, y: 0.765}
- {x: -0.74, y: 0.695}
- {x: -0.75, y: 0.685}
- {x: -0.79999995, y: 0.685}
- {x: -0.81, y: 0.695}
- {x: -0.84999996, y: 0.695}
- {x: -0.88, y: 0.675}
- {x: -0.93, y: 0.625}
- {x: -0.94, y: 0.585}
- {x: -0.96, y: 0.565}
- {x: -0.95, y: 0.545}
- {x: -0.95, y: 0.555}
- - {x: 0.59999996, y: 0.565}
- {x: 0.55, y: 0.60499996}
- {x: 0.59999996, y: 0.655}
- {x: 0.63, y: 0.645}
- {x: 0.65999997, y: 0.645}
- {x: 0.69, y: 0.59499997}
- {x: 0.64, y: 0.585}
- {x: 0.61, y: 0.555}
- {x: 0.62, y: 0.545}
- {x: 0.62, y: 0.555}
- - {x: 1.09, y: 0.645}
- {x: 1.09, y: 0.635}
- {x: 1.06, y: 0.625}
- {x: 1.0699999, y: 0.635}
- - {x: 0.69, y: 0.78499997}
- {x: 0.71, y: 0.815}
- {x: 0.71, y: 0.84499997}
- {x: 0.75, y: 0.885}
- {x: 0.75, y: 0.905}
- {x: 0.74, y: 0.91499996}
- {x: 0.75, y: 0.91499996}
- {x: 0.78999996, y: 0.935}
- {x: 0.78999996, y: 0.92499995}
- {x: 0.76, y: 0.91499996}
- {x: 0.71, y: 0.865}
- {x: 0.71, y: 0.85499996}
- {x: 0.69, y: 0.835}
- {x: 0.69, y: 0.815}
- {x: 0.66999996, y: 0.775}
- {x: 0.66999996, y: 0.73499995}
- {x: 0.65999997, y: 0.73499995}
- - {x: -0.26, y: 0.935}
- {x: -0.21, y: 0.97499996}
- {x: -0.19999999, y: 1.005}
- {x: -0.19, y: 1.015}
- {x: -0.22, y: 0.965}
- {x: -0.22, y: 0.91499996}
- {x: -0.22999999, y: 0.92499995}
- - {x: 0.03, y: 1.055}
- {x: 0.02, y: 1.055}
- {x: 0.03, y: 1.045}
- {x: 0.11, y: 1.045}
- {x: 0.14, y: 1.025}
- {x: 0.06, y: 1.025}
- {x: 0.06, y: 1.035}
m_Bones: [] m_Bones: []
m_SpriteID: 9879fa8cff00e5f43a9b92606b91f7f8 m_SpriteID: 9879fa8cff00e5f43a9b92606b91f7f8
+107 -226
View File
@@ -9,13 +9,13 @@ Sprite:
m_Name: 6002 m_Name: 6002
m_Rect: m_Rect:
serializedVersion: 2 serializedVersion: 2
x: 279 x: 139.5
y: 351 y: 175.5
width: 409 width: 204.5
height: 362 height: 181
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
m_Border: {x: 0, y: 0, z: 0, w: 0} m_Border: {x: 0, y: 0, z: 0, w: 0}
m_PixelsToUnits: 100 m_PixelsToUnits: 50
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
m_Extrude: 1 m_Extrude: 1
m_IsPolygon: 0 m_IsPolygon: 0
@@ -107,14 +107,14 @@ Sprite:
m_Bindpose: [] m_Bindpose: []
textureRect: textureRect:
serializedVersion: 2 serializedVersion: 2
x: 279 x: 139.5
y: 351 y: 175.5
width: 409 width: 204.5
height: 362 height: 181
textureRectOffset: {x: 0, y: 0} textureRectOffset: {x: 0, y: 0}
atlasRectOffset: {x: -1, y: -1} atlasRectOffset: {x: -1, y: -1}
settingsRaw: 0 settingsRaw: 0
uvTransform: {x: 100, y: 483.5, z: 100, w: 532} uvTransform: {x: 50, y: 241.75, z: 50, w: 266}
downscaleMultiplier: 1 downscaleMultiplier: 1
m_AtlasRD: m_AtlasRD:
serializedVersion: 3 serializedVersion: 3
@@ -198,226 +198,107 @@ Sprite:
m_Bindpose: [] m_Bindpose: []
textureRect: textureRect:
serializedVersion: 2 serializedVersion: 2
x: 279 x: 139.5
y: 351 y: 175.5
width: 409 width: 204.5
height: 362 height: 181
textureRectOffset: {x: 0, y: 0} textureRectOffset: {x: 0, y: 0}
atlasRectOffset: {x: -1, y: -1} atlasRectOffset: {x: -1, y: -1}
settingsRaw: 0 settingsRaw: 0
uvTransform: {x: 100, y: 483.5, z: 100, w: 532} uvTransform: {x: 50, y: 241.75, z: 50, w: 266}
downscaleMultiplier: 1 downscaleMultiplier: 1
m_PhysicsShape: m_PhysicsShape:
- - {x: -0.895, y: -1.4399999} - - {x: 0.71999997, y: -1.09}
- {x: -0.85499996, y: -1.38} - {x: 0.59999996, y: -0.78999996}
- {x: -0.91499996, y: -1.3399999} - {x: 0.71999997, y: -0.69}
- {x: -0.85499996, y: -1.1999999} - {x: 1.06, y: -0.55}
- {x: -0.78499997, y: -1.0799999} - {x: 1.38, y: -0.11}
- {x: -0.715, y: -0.90999997} - {x: 1.52, y: -0.14999999}
- {x: -0.615, y: -0.85999995} - {x: 1.5799999, y: -0.13}
- {x: -0.545, y: -0.81} - {x: 1.5799999, y: 0.13}
- {x: -0.53499997, y: -0.7} - {x: 1.3, y: 0.32999998}
- {x: -0.42499998, y: -0.51} - {x: 0.96, y: 0.42999998}
- {x: -0.375, y: -0.39999998} - {x: 0.91999996, y: 0.55}
- {x: -0.325, y: -0.55} - {x: 0.96, y: 0.72999996}
- {x: -0.33499998, y: -0.65999997} - {x: 0.91999996, y: 1.09}
- {x: -0.305, y: -0.72999996} - {x: 0.84, y: 1.1899999}
- {x: -0.285, y: -0.85999995} - {x: 1.04, y: 1.41}
- {x: -0.265, y: -1.01} - {x: 1.04, y: 1.5699999}
- {x: -0.355, y: -1.09} - {x: 0.97999996, y: 1.61}
- {x: -0.39499998, y: -1.15} - {x: 0.78, y: 1.41}
- {x: -0.325, y: -1.18} - {x: 0.44, y: 0.89}
- {x: -0.445, y: -1.3299999} - {x: 0.32, y: 0.84999996}
- {x: -0.565, y: -1.52} - {x: 0.24, y: 1.0699999}
- {x: -0.545, y: -1.56} - {x: 0.35999998, y: 1.55}
- {x: -0.505, y: -1.56} - {x: 0.28, y: 1.67}
- {x: -0.48499998, y: -1.54} - {x: 0.08, y: 1.67}
- {x: -0.465, y: -1.56} - {x: 0.02, y: 1.53}
- {x: -0.13499999, y: -1.56} - {x: 0, y: 1.29}
- {x: -0.055, y: -1.52} - {x: -0.099999994, y: 1.2099999}
- {x: -0.015, y: -1.56} - {x: -0.24, y: 1.5899999}
- {x: 0.755, y: -1.56} - {x: -0.39999998, y: 1.61}
- {x: 0.775, y: -1.55} - {x: -0.44, y: 1.5699999}
- {x: 0.755, y: -1.38} - {x: -0.45999998, y: 1.43}
- {x: 0.695, y: -1.22} - {x: -0.29999998, y: 1.29}
- {x: 0.685, y: -1.09} - {x: -0.24, y: 0.69}
- {x: 0.625, y: -0.91999996} - {x: -0.34, y: 0.81}
- {x: 0.555, y: -0.77} - {x: -0.48, y: 1.4499999}
- {x: 0.515, y: -0.62} - {x: -0.53999996, y: 1.5899999}
- {x: 0.525, y: -0.58} - {x: -0.62, y: 1.5899999}
- {x: 0.615, y: -0.69} - {x: -0.68, y: 1.55}
- {x: 0.705, y: -0.68} - {x: -0.68, y: 0.87}
- {x: 0.73499995, y: -0.65} - {x: -0.78, y: 0.95}
- {x: 0.79499996, y: -0.59999996} - {x: -1.12, y: 1.05}
- {x: 0.865, y: -0.58} - {x: -1.62, y: 1.5699999}
- {x: 0.965, y: -0.53999996} - {x: -1.76, y: 1.63}
- {x: 1.0649999, y: -0.45999998} - {x: -1.78, y: 1.55}
- {x: 1.275, y: -0.19999999} - {x: -1.7199999, y: 1.43}
- {x: 1.3349999, y: -0.08} - {x: -1.4599999, y: 1.13}
- {x: 1.505, y: -0.13} - {x: -1.8199999, y: 1.27}
- {x: 1.555, y: -0.049999997} - {x: -1.9399999, y: 1.27}
- {x: 1.605, y: 0.089999996} - {x: -2.04, y: 1.15}
- {x: 1.5949999, y: 0.13} - {x: -2.04, y: 0.95}
- {x: 1.435, y: 0.14999999} - {x: -1.9599999, y: 0.89}
- {x: 1.275, y: 0.26} - {x: -1.52, y: 0.63}
- {x: 1.1949999, y: 0.29} - {x: -1.68, y: 0.47}
- {x: 1.095, y: 0.29999998} - {x: -1.74, y: 0.37}
- {x: 1.045, y: 0.28} - {x: -1.8399999, y: -0.11}
- {x: 0.92499995, y: 0.31} - {x: -2.02, y: -0.37}
- {x: 0.91499996, y: 0.35} - {x: -2.02, y: -0.41}
- {x: 0.84499997, y: 0.55} - {x: -1.92, y: -0.53}
- {x: 0.895, y: 0.57} - {x: -1.6999999, y: -0.53}
- {x: 0.905, y: 0.66999996} - {x: -1.3, y: -0.55}
- {x: 0.835, y: 0.75} - {x: -1.14, y: -0.47}
- {x: 0.825, y: 0.89} - {x: -1.16, y: -1.2099999}
- {x: 0.865, y: 0.9} - {x: -1.22, y: -1.31}
- {x: 0.895, y: 0.90999997} - {x: -1.1999999, y: -1.53}
- {x: 0.885, y: 1.05} - {x: -1.16, y: -1.5699999}
- {x: 0.815, y: 1.16} - {x: -0.9, y: -1.5699999}
- {x: 0.92499995, y: 1.31} - {x: -0.84, y: -1.35}
- {x: 1.035, y: 1.5} - {x: -0.85999995, y: -1.27}
- {x: 0.995, y: 1.5899999} - {x: -0.58, y: -0.84999996}
- {x: 0.965, y: 1.5899999} - {x: -0.52, y: -0.78999996}
- {x: 0.78499997, y: 1.38} - {x: -0.35999998, y: -0.42999998}
- {x: 0.705, y: 1.23} - {x: -0.34, y: -0.66999996}
- {x: 0.42499998, y: 0.84} - {x: -0.26, y: -1.01}
- {x: 0.33499998, y: 0.71} - {x: -0.35999998, y: -1.11}
- {x: 0.305, y: 0.75} - {x: -0.35999998, y: -1.15}
- {x: 0.295, y: 0.87} - {x: -0.52, y: -1.4499999}
- {x: 0.275, y: 0.89} - {x: -0.56, y: -1.51}
- {x: 0.185, y: 0.95} - {x: -0.38, y: -1.5699999}
- {x: 0.195, y: 1.14} - {x: 0.7, y: -1.5699999}
- {x: 0.195, y: 1.31} - {x: 0.82, y: -1.53}
- {x: 0.285, y: 1.4599999} - {x: 0.78, y: -1.29}
- {x: 0.33499998, y: 1.55} - - {x: -0.91999996, y: -0.11}
- {x: 0.295, y: 1.5899999} - {x: -0.9, y: -0.11}
- {x: 0.305, y: 1.65} - {x: -0.91999996, y: -0.11}
- {x: 0.275, y: 1.66} - {x: -0.96, y: -0.14999999}
- {x: 0.114999995, y: 1.66} - - {x: 0.97999996, y: -0.03}
- {x: 0.074999996, y: 1.65} - {x: 0.96, y: -0.01}
- {x: 0.035, y: 1.56} - {x: 1, y: 0.03}
- {x: 0.005, y: 1.24} - {x: 0.97999996, y: 0.03}
- {x: -0.125, y: 1.15} - {x: 1.04, y: -0.01}
- {x: -0.155, y: 1.23} - {x: 0.96, y: -0.07}
- {x: -0.225, y: 1.35} - {x: 0.97999996, y: -0.07}
- {x: -0.225, y: 1.4599999}
- {x: -0.24499999, y: 1.53}
- {x: -0.255, y: 1.56}
- {x: -0.345, y: 1.56}
- {x: -0.435, y: 1.61}
- {x: -0.465, y: 1.5999999}
- {x: -0.475, y: 1.5699999}
- {x: -0.415, y: 1.4699999}
- {x: -0.48499998, y: 1.4499999}
- {x: -0.42499998, y: 1.35}
- {x: -0.295, y: 1.28}
- {x: -0.205, y: 1}
- {x: -0.155, y: 0.95}
- {x: -0.255, y: 0.83}
- {x: -0.275, y: 0.68}
- {x: -0.36499998, y: 0.71}
- {x: -0.375, y: 0.78999996}
- {x: -0.525, y: 1.48}
- {x: -0.545, y: 1.56}
- {x: -0.565, y: 1.5799999}
- {x: -0.645, y: 1.5699999}
- {x: -0.66499996, y: 1.51}
- {x: -0.635, y: 1.37}
- {x: -0.66499996, y: 1.1}
- {x: -0.66499996, y: 0.85999995}
- {x: -0.765, y: 0.85999995}
- {x: -0.805, y: 0.9}
- {x: -0.84499997, y: 0.9}
- {x: -1.025, y: 0.95}
- {x: -1.095, y: 0.95}
- {x: -1.2049999, y: 1.06}
- {x: -1.3349999, y: 1.1999999}
- {x: -1.415, y: 1.3}
- {x: -1.4649999, y: 1.3399999}
- {x: -1.505, y: 1.41}
- {x: -1.785, y: 1.64}
- {x: -1.8149999, y: 1.63}
- {x: -1.8249999, y: 1.5999999}
- {x: -1.735, y: 1.4599999}
- {x: -1.605, y: 1.29}
- {x: -1.425, y: 1.13}
- {x: -1.485, y: 1.1}
- {x: -1.7249999, y: 1.1899999}
- {x: -1.8549999, y: 1.27}
- {x: -1.9649999, y: 1.25}
- {x: -2.0049999, y: 1.1999999}
- {x: -2.0449998, y: 1.11}
- {x: -2.0449998, y: 0.96}
- {x: -2.0049999, y: 0.9}
- {x: -1.9449999, y: 0.89}
- {x: -1.795, y: 0.88}
- {x: -1.605, y: 0.77}
- {x: -1.5749999, y: 0.76}
- {x: -1.555, y: 0.76}
- {x: -1.505, y: 0.75}
- {x: -1.525, y: 0.62}
- {x: -1.675, y: 0.47}
- {x: -1.6949999, y: 0.41}
- {x: -1.6949999, y: 0.35}
- {x: -1.665, y: 0.34}
- {x: -1.615, y: 0.37}
- {x: -1.665, y: 0.22}
- {x: -1.765, y: 0.099999994}
- {x: -1.805, y: -0.01}
- {x: -1.7149999, y: -0.01}
- {x: -1.8549999, y: -0.17999999}
- {x: -1.895, y: -0.28}
- {x: -2.0349998, y: -0.38}
- {x: -2.0449998, y: -0.39999998}
- {x: -2.0449998, y: -0.41}
- {x: -1.895, y: -0.53}
- {x: -1.805, y: -0.53}
- {x: -1.7049999, y: -0.48999998}
- {x: -1.645, y: -0.45}
- {x: -1.655, y: -0.45999998}
- {x: -1.665, y: -0.48}
- {x: -1.5849999, y: -0.53}
- {x: -1.505, y: -0.52}
- {x: -1.345, y: -0.53}
- {x: -1.225, y: -0.44}
- {x: -1.135, y: -0.44}
- {x: -1.0849999, y: -0.39}
- {x: -1.135, y: -0.5}
- {x: -1.115, y: -0.59999996}
- {x: -1.035, y: -0.66999996}
- {x: -1.0849999, y: -0.7}
- {x: -1.105, y: -0.91999996}
- {x: -1.155, y: -1.25}
- {x: -1.2049999, y: -1.3399999}
- {x: -1.185, y: -1.55}
- {x: -1.175, y: -1.56}
- {x: -0.91499996, y: -1.56}
- {x: -0.885, y: -1.55}
- - {x: -1.035, y: -0.26999998}
- {x: -1.025, y: -0.28}
- {x: -1.055, y: -0.32}
- {x: -1.035, y: -0.31}
- - {x: -0.995, y: -0.17}
- {x: -0.995, y: -0.14999999}
- {x: -0.935, y: -0.099999994}
- {x: -0.935, y: -0.08}
- {x: -0.885, y: -0.099999994}
- {x: -0.905, y: -0.12}
- {x: -0.935, y: -0.16}
- {x: -0.97499996, y: -0.16}
- {x: -1.015, y: -0.19}
- {x: -1.015, y: -0.19999999}
- - {x: 0.945, y: -0.049999997}
- {x: 0.965, y: 0.01}
- {x: 0.965, y: 0.049999997}
- {x: 1.0649999, y: -0.02}
- {x: 1.005, y: -0.049999997}
- {x: 0.97499996, y: -0.08}
- {x: 0.935, y: -0.11}
- - {x: -0.185, y: 0.39999998}
- {x: -0.155, y: 0.39}
- {x: -0.125, y: 0.39}
- {x: -0.155, y: 0.38}
- {x: -0.155, y: 0.39}
m_Bones: [] m_Bones: []
m_SpriteID: 0c59ec4e1c1164041b4186ebd0a5e859 m_SpriteID: 0c59ec4e1c1164041b4186ebd0a5e859
+69
View File
@@ -107,6 +107,69 @@ public class UIManager : MonoSingleton<UIManager>
// ⭐ handle 缓存:用于 Addressables.Release 释放内存 // ⭐ handle 缓存:用于 Addressables.Release 释放内存
private readonly Dictionary<UIPanel, AsyncOperationHandle<GameObject>> handleCache = new Dictionary<UIPanel, AsyncOperationHandle<GameObject>>(); private readonly Dictionary<UIPanel, AsyncOperationHandle<GameObject>> handleCache = new Dictionary<UIPanel, AsyncOperationHandle<GameObject>>();
public GameObject loadPanel; public GameObject loadPanel;
// ==================== 加载中界面(obj_JiaZaiZhong) ====================
// ⭐ 资源加载超过 jiaZaiZhongDelay(默认 0.1 秒)还没结束才显示"加载中"界面,避免快速加载闪一下。
// 支持多段加载并发(引用计数):所有 BeginLoading 都配对 EndLoading 后才隐藏。
// 用法:UIManager.BeginLoading(); try { await 加载过程(); } finally { UIManager.EndLoading(); }
[Tooltip("资源加载超过该秒数还没结束才显示\"加载中\"界面(避免快速加载闪一下)")]
[SerializeField] private float jiaZaiZhongDelay = 0.1f;
private int _loadingRefCount; // 进行中的资源加载段数
private bool _loadingShown; // "加载中"界面是否已显示
private Coroutine _loadingDelayCoroutine; // 延迟显示协程(0.1 秒内加载结束就取消,不显示)
private bool _jiaZaiZhongWarned; // obj_JiaZaiZhong 未挂引用时只提醒一次
/// <summary>开始一段资源加载(与 EndLoading 成对):超过 0.1 秒还没结束才显示"加载中"界面</summary>
public static void BeginLoading() { Instance.BeginLoadingInternal(); }
/// <summary>结束一段资源加载(与 BeginLoading 成对)</summary>
public static void EndLoading() { Instance.EndLoadingInternal(); }
private void BeginLoadingInternal()
{
_loadingRefCount++;
if (obj_JiaZaiZhong == null)
{
if (!_jiaZaiZhongWarned)
{
_jiaZaiZhongWarned = true;
Debug.LogWarning("[UIManager] 加载中界面 obj_JiaZaiZhong 未挂引用,资源加载提示不会显示");
}
return;
}
if (_loadingShown || _loadingDelayCoroutine != null) return; // 已显示 / 已在等待显示
_loadingDelayCoroutine = StartCoroutine(CoShowJiaZaiZhongAfterDelay());
}
private void EndLoadingInternal()
{
if (_loadingRefCount > 0) _loadingRefCount--;
if (_loadingRefCount > 0) return; // 还有其它加载在进行,继续显示
if (_loadingDelayCoroutine != null)
{
StopCoroutine(_loadingDelayCoroutine);
_loadingDelayCoroutine = null;
}
if (_loadingShown)
{
_loadingShown = false;
if (obj_JiaZaiZhong != null) obj_JiaZaiZhong.SetActive(false);
}
}
private IEnumerator CoShowJiaZaiZhongAfterDelay()
{
yield return new WaitForSecondsRealtime(jiaZaiZhongDelay);
_loadingDelayCoroutine = null;
if (_loadingRefCount <= 0 || obj_JiaZaiZhong == null) yield break;
obj_JiaZaiZhong.SetActive(true);
obj_JiaZaiZhong.transform.SetAsLastSibling(); // 盖到最上层,避免被别的面板挡住
_loadingShown = true;
}
public LoadingPanel ShowLoadPanel(VideoClip videoClip, Action action=null) public LoadingPanel ShowLoadPanel(VideoClip videoClip, Action action=null)
{ {
ShowAsync(UIPanel.LoginPanel); ShowAsync(UIPanel.LoginPanel);
@@ -399,8 +462,11 @@ public class UIManager : MonoSingleton<UIManager>
onShown?.Invoke(panel); onShown?.Invoke(panel);
yield break; yield break;
} }
// ⭐ 面板资源未缓存:异步加载超过 0.1 秒才显示"加载中"界面
BeginLoadingInternal();
var handle = Addressables.LoadAssetAsync<GameObject>(addressMap[type]); var handle = Addressables.LoadAssetAsync<GameObject>(addressMap[type]);
yield return handle; yield return handle;
EndLoadingInternal();
if (handle.Status == AsyncOperationStatus.Succeeded) if (handle.Status == AsyncOperationStatus.Succeeded)
{ {
prefabCache[type] = handle.Result; prefabCache[type] = handle.Result;
@@ -437,8 +503,11 @@ public class UIManager : MonoSingleton<UIManager>
onShown?.Invoke(panel); onShown?.Invoke(panel);
yield break; yield break;
} }
// ⭐ 面板资源未缓存:异步加载超过 0.1 秒才显示"加载中"界面
BeginLoadingInternal();
var handle = Addressables.LoadAssetAsync<GameObject>(addressMap[type]); var handle = Addressables.LoadAssetAsync<GameObject>(addressMap[type]);
yield return handle; yield return handle;
EndLoadingInternal();
if (handle.Status == AsyncOperationStatus.Succeeded) if (handle.Status == AsyncOperationStatus.Succeeded)
{ {
prefabCache[type] = handle.Result; prefabCache[type] = handle.Result;
@@ -167,6 +167,15 @@ public class MonsterMoveLine
private static AsyncOperationHandle<IList<TextAsset>> _bezierHandles; private static AsyncOperationHandle<IList<TextAsset>> _bezierHandles;
public static async Task LoadBezierTxtAsync(string path, Action<float> onProgress = null) public static async Task LoadBezierTxtAsync(string path, Action<float> onProgress = null)
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(引用计数,快速加载不显示)
UIManager.BeginLoading();
try { await LoadBezierTxtAsyncCore(path, onProgress); }
finally { UIManager.EndLoading(); }
}
/// <summary>LoadBezierTxtAsync 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task LoadBezierTxtAsyncCore(string path, Action<float> onProgress)
{ {
// ⭐ 加载前先全量清空上一场的路线缓存: // ⭐ 加载前先全量清空上一场的路线缓存:
// 各玩法普通路线/鱼阵曲线名完全重名(曲线1~N、鱼阵N)但坐标不同, // 各玩法普通路线/鱼阵曲线名完全重名(曲线1~N、鱼阵N)但坐标不同,
@@ -589,9 +589,9 @@ public class FlyTurretData : TurretData
_prewarmOrigScale = plane.localScale; _prewarmOrigScale = plane.localScale;
_prewarmOrigActive = plane.gameObject.activeSelf; _prewarmOrigActive = plane.gameObject.activeSelf;
// 只开入场要用的 Body+护盾、关掉免费三类——避免把五十来个粒子系统全部初始化(反而更重) // 只开入场要用的 Body、关掉免费三类——避免把五十来个粒子系统全部初始化(反而更重);
// ⭐ 护盾粒子拆到下一帧再开:和 Body 骨架/粒子挤同一帧 = 单帧尖峰(90% 收尾窗口卡顿的来源之一)
SetPlaneChildActive(plane, "Body", true); SetPlaneChildActive(plane, "Body", true);
SetPlaneChildActive(plane, "PW_Effect_Defend", true);
SetPlaneChildActive(plane, "FreeEffect", false); SetPlaneChildActive(plane, "FreeEffect", false);
SetPlaneChildActive(plane, "FreeEffect_Crit", false); SetPlaneChildActive(plane, "FreeEffect_Crit", false);
SetPlaneChildActive(plane, "FreeEffect_Speedup", false); SetPlaneChildActive(plane, "FreeEffect_Speedup", false);
@@ -602,8 +602,10 @@ public class FlyTurretData : TurretData
plane.SetParent(holder, true); plane.SetParent(holder, true);
plane.localScale = Vector3.zero; plane.localScale = Vector3.zero;
plane.gameObject.SetActive(true); plane.gameObject.SetActive(true);
yield return null; yield return null; // Body 骨架首帧网格
yield return null; // 让骨架首帧网格、粒子首帧模拟都跑到 SetPlaneChildActive(plane, "PW_Effect_Defend", true); // 护盾粒子单独一帧开
yield return null; // 护盾首帧模拟
yield return null; // 再等一帧让首帧网格上传铺开
FinishPrewarmRestore(); FinishPrewarmRestore();
Debug.Log($"[XJMH入场] 飞机预热完成({plane.name})"); Debug.Log($"[XJMH入场] 飞机预热完成({plane.name})");
@@ -91,6 +91,15 @@ public class AudioResourcesData
/// onProgress:进度回调 0~1(按 LoadAssetsAsync 的 PercentComplete),供进房进度条使用;不传则行为不变。 /// onProgress:进度回调 0~1(按 LoadAssetsAsync 的 PercentComplete),供进房进度条使用;不传则行为不变。
/// </summary> /// </summary>
public static async Task LoadAudioGame(Action<float> onProgress = null) public static async Task LoadAudioGame(Action<float> onProgress = null)
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(引用计数,快速加载不显示)
UIManager.BeginLoading();
try { await LoadAudioGameCore(onProgress); }
finally { UIManager.EndLoading(); }
}
/// <summary>LoadAudioGame 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task LoadAudioGameCore(Action<float> onProgress)
{ {
GameType gameType = GameManager.Instance.gameData.currGameType; GameType gameType = GameManager.Instance.gameData.currGameType;
var keys = new List<string> { Audio_AALabel, gameType.ToString() }; var keys = new List<string> { Audio_AALabel, gameType.ToString() };
@@ -92,6 +92,15 @@ public class FishResourcesData
/// 供进房进度条使用;不传则行为与原来一致。 /// 供进房进度条使用;不传则行为与原来一致。
/// </summary> /// </summary>
public static async Task LoadFishAssetsData(Action<float> onProgress = null) public static async Task LoadFishAssetsData(Action<float> onProgress = null)
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(引用计数,快速加载不显示)
UIManager.BeginLoading();
try { await LoadFishAssetsDataCore(onProgress); }
finally { UIManager.EndLoading(); }
}
/// <summary>LoadFishAssetsData 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task LoadFishAssetsDataCore(Action<float> onProgress)
{ {
// 清空对象池 // 清空对象池
Pool.Instance.Clear(); Pool.Instance.Clear();
@@ -76,6 +76,15 @@ public class TurretResourcesData
/// (调用方可回退 GetZhanShenPrefab 查全量字典,平滑迁移)。 /// (调用方可回退 GetZhanShenPrefab 查全量字典,平滑迁移)。
/// </summary> /// </summary>
public static async Task<GameObject> AcquireZhanShenAsync(int turretNumber, ZhanShenUsage usage) public static async Task<GameObject> AcquireZhanShenAsync(int turretNumber, ZhanShenUsage usage)
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(缓存命中瞬间完成,不会显示)
UIManager.BeginLoading();
try { return await AcquireZhanShenAsyncCore(turretNumber, usage); }
finally { UIManager.EndLoading(); }
}
/// <summary>AcquireZhanShenAsync 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task<GameObject> AcquireZhanShenAsyncCore(int turretNumber, ZhanShenUsage usage)
{ {
var key = (turretNumber, usage); var key = (turretNumber, usage);
_zsRefCount[key] = _zsRefCount.TryGetValue(key, out int c) ? c + 1 : 1; _zsRefCount[key] = _zsRefCount.TryGetValue(key, out int c) ? c + 1 : 1;
@@ -179,6 +188,15 @@ public class TurretResourcesData
/// 与 ReleaseTurretPrefab 配对(切换/关闭时 -1,归零卸包)。 /// 与 ReleaseTurretPrefab 配对(切换/关闭时 -1,归零卸包)。
/// </summary> /// </summary>
public static async Task<GameObject> AcquireTurretPrefabAsync(int turretNumber) public static async Task<GameObject> AcquireTurretPrefabAsync(int turretNumber)
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(缓存命中瞬间完成,不会显示)
UIManager.BeginLoading();
try { return await AcquireTurretPrefabAsyncCore(turretNumber); }
finally { UIManager.EndLoading(); }
}
/// <summary>AcquireTurretPrefabAsync 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task<GameObject> AcquireTurretPrefabAsyncCore(int turretNumber)
{ {
_ptRefCount[turretNumber] = _ptRefCount.TryGetValue(turretNumber, out int c) ? c + 1 : 1; _ptRefCount[turretNumber] = _ptRefCount.TryGetValue(turretNumber, out int c) ? c + 1 : 1;
if (_ptPrefabCache.TryGetValue(turretNumber, out var cached)) return cached; if (_ptPrefabCache.TryGetValue(turretNumber, out var cached)) return cached;
@@ -368,6 +386,15 @@ public class TurretResourcesData
/// 字典中存的就是已销毁对象的引用(Editor 下因 AssetDatabase 模式不会暴露此问题)。 /// 字典中存的就是已销毁对象的引用(Editor 下因 AssetDatabase 模式不会暴露此问题)。
/// </summary> /// </summary>
public static async Task LoadTurretAssetsData() public static async Task LoadTurretAssetsData()
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(引用计数,快速加载不显示)
UIManager.BeginLoading();
try { await LoadTurretAssetsDataCore(); }
finally { UIManager.EndLoading(); }
}
/// <summary>LoadTurretAssetsData 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task LoadTurretAssetsDataCore()
{ {
turretPrefabDic = new Dictionary<int, GameObject>(); turretPrefabDic = new Dictionary<int, GameObject>();
turretGamePrefabDic = new Dictionary<int, GameObject>(); turretGamePrefabDic = new Dictionary<int, GameObject>();
@@ -5342,7 +5342,7 @@ PrefabInstance:
- target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605, - target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3} type: 3}
propertyPath: m_SceneBindings.Array.size propertyPath: m_SceneBindings.Array.size
value: 26 value: 29
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605, - target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3} type: 3}
@@ -5356,6 +5356,24 @@ PrefabInstance:
value: value:
objectReference: {fileID: -4975399762532968560, guid: 97554428056b1ac4f9f32aface985316, objectReference: {fileID: -4975399762532968560, guid: 97554428056b1ac4f9f32aface985316,
type: 2} type: 2}
- target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3}
propertyPath: m_SceneBindings.Array.data[26].key
value:
objectReference: {fileID: -147752329279606508, guid: 97554428056b1ac4f9f32aface985316,
type: 2}
- target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3}
propertyPath: m_SceneBindings.Array.data[27].key
value:
objectReference: {fileID: 6124250156390186977, guid: 97554428056b1ac4f9f32aface985316,
type: 2}
- target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3}
propertyPath: m_SceneBindings.Array.data[28].key
value:
objectReference: {fileID: -6477884835058938809, guid: 97554428056b1ac4f9f32aface985316,
type: 2}
- target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605, - target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3} type: 3}
propertyPath: m_SceneBindings.Array.data[24].value propertyPath: m_SceneBindings.Array.data[24].value
@@ -5366,6 +5384,21 @@ PrefabInstance:
propertyPath: m_SceneBindings.Array.data[25].value propertyPath: m_SceneBindings.Array.data[25].value
value: value:
objectReference: {fileID: 3033651403988009196} objectReference: {fileID: 3033651403988009196}
- target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3}
propertyPath: m_SceneBindings.Array.data[26].value
value:
objectReference: {fileID: 8282567264049790537}
- target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3}
propertyPath: m_SceneBindings.Array.data[27].value
value:
objectReference: {fileID: 7453087164729299865}
- target: {fileID: 3823345273878462180, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3}
propertyPath: m_SceneBindings.Array.data[28].value
value:
objectReference: {fileID: 2215003876436266114}
- target: {fileID: 3824444864287102080, guid: 1bcb895f3655d5548a9ffb4474b98605, - target: {fileID: 3824444864287102080, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3} type: 3}
propertyPath: m_Layer propertyPath: m_Layer
@@ -13735,6 +13768,12 @@ CircleCollider2D:
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
serializedVersion: 2 serializedVersion: 2
m_Radius: 0.5 m_Radius: 0.5
--- !u!95 &2215003876436266114 stripped
Animator:
m_CorrespondingSourceObject: {fileID: 4286368811891389748, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3}
m_PrefabInstance: {fileID: 2720591934958713270}
m_PrefabAsset: {fileID: 0}
--- !u!1 &2283344592133234553 stripped --- !u!1 &2283344592133234553 stripped
GameObject: GameObject:
m_CorrespondingSourceObject: {fileID: 4211263933705135823, guid: 1bcb895f3655d5548a9ffb4474b98605, m_CorrespondingSourceObject: {fileID: 4211263933705135823, guid: 1bcb895f3655d5548a9ffb4474b98605,
@@ -15072,6 +15111,12 @@ CircleCollider2D:
m_Offset: {x: 0.018183004, y: -0.14367317} m_Offset: {x: 0.018183004, y: -0.14367317}
serializedVersion: 2 serializedVersion: 2
m_Radius: 0.7301043 m_Radius: 0.7301043
--- !u!95 &7453087164729299865 stripped
Animator:
m_CorrespondingSourceObject: {fileID: 4805293225234868783, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3}
m_PrefabInstance: {fileID: 2720591934958713270}
m_PrefabAsset: {fileID: 0}
--- !u!1 &7511131309169197708 stripped --- !u!1 &7511131309169197708 stripped
GameObject: GameObject:
m_CorrespondingSourceObject: {fileID: 5619821435806153530, guid: 1bcb895f3655d5548a9ffb4474b98605, m_CorrespondingSourceObject: {fileID: 5619821435806153530, guid: 1bcb895f3655d5548a9ffb4474b98605,
@@ -15154,6 +15199,12 @@ CircleCollider2D:
m_Offset: {x: 0.0073856106, y: -0.08785672} m_Offset: {x: 0.0073856106, y: -0.08785672}
serializedVersion: 2 serializedVersion: 2
m_Radius: 0.6284307 m_Radius: 0.6284307
--- !u!1 &8282567264049790537 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6282782031822112767, guid: 1bcb895f3655d5548a9ffb4474b98605,
type: 3}
m_PrefabInstance: {fileID: 2720591934958713270}
m_PrefabAsset: {fileID: 0}
--- !u!1 &8394534036027403222 stripped --- !u!1 &8394534036027403222 stripped
GameObject: GameObject:
m_CorrespondingSourceObject: {fileID: 5890175915406086752, guid: 1bcb895f3655d5548a9ffb4474b98605, m_CorrespondingSourceObject: {fileID: 5890175915406086752, guid: 1bcb895f3655d5548a9ffb4474b98605,
@@ -387,7 +387,7 @@ MonoBehaviour:
- {fileID: 0} - {fileID: 0}
needLockEvent: 0 needLockEvent: 0
createVideoClip: {fileID: 0} createVideoClip: {fileID: 0}
rotationPY: 0 rotationPY: 60
useMirrorCompensate: 1 useMirrorCompensate: 1
useRollSignFlip: 0 useRollSignFlip: 0
useRouteFlipX: 0 useRouteFlipX: 0
@@ -114,7 +114,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!224 &439111589277315844 --- !u!224 &439111589277315844
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -311,7 +311,7 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
[Tooltip("鱼创建时播放的入场视频控件,由 Boss 预制体的 createVideoClip 指定视频片段。Inspector 拖拽场景中的 VideoPlayer 控件")] [Tooltip("鱼创建时播放的入场视频控件,由 Boss 预制体的 createVideoClip 指定视频片段。Inspector 拖拽场景中的 VideoPlayer 控件")]
public UnityEngine.Video.VideoPlayer createVideoPlayer; public UnityEngine.Video.VideoPlayer createVideoPlayer;
/// <summary>开火音效(static:切房新面板实例直接复用,避免重复加载;离房时 UnLoadBulletClip 释放并置空)</summary> /// <summary>开火音效(static:全局常驻,切房/重进房直接复用;见 LoadBulletClip 注释)</summary>
static AudioClip bulletClip; static AudioClip bulletClip;
public List<int> paoBeiList = new List<int>(); public List<int> paoBeiList = new List<int>();
@@ -480,6 +480,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
/// XJMH 进房首帧预热(加载 90%→100% 收尾窗口调用,进度条还显示着玩家看不到): /// XJMH 进房首帧预热(加载 90%→100% 收尾窗口调用,进度条还显示着玩家看不到):
/// 把本地座位(座位自带炮台随 Awake 一起初始化)与"入场要用的那架完整飞机"提前点亮—— /// 把本地座位(座位自带炮台随 Awake 一起初始化)与"入场要用的那架完整飞机"提前点亮——
/// 这些 XJMH 独有资产首次初始化(骨架/粒子/贴图首上传)很重,全堆在 100% 那一帧玩家会看到明显卡顿。 /// 这些 XJMH 独有资产首次初始化(骨架/粒子/贴图首上传)很重,全堆在 100% 那一帧玩家会看到明显卡顿。
/// ⭐ 按帧拆散(避免"90% 卡死"):先让一帧(进度条先刷新)→ 只留默认炮台、关掉其余 3 把 →
/// 激活座位(1 套骨架) → 等两帧 → 飞机分两帧点亮(Body / 护盾粒子各一帧)。
/// 入场动画有加载完成门卫(IsGameLoadCompleted),预热不会导致动画提前播放。 /// 入场动画有加载完成门卫(IsGameLoadCompleted),预热不会导致动画提前播放。
/// </summary> /// </summary>
private void PrewarmXJMHForLocalSeat() private void PrewarmXJMHForLocalSeat()
@@ -495,11 +497,34 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
private IEnumerator PrewarmXJMHCoroutine(SitPosData sit) private IEnumerator PrewarmXJMHCoroutine(SitPosData sit)
{ {
// ① 提前激活本地座位:Awake → InitXJMHTurret → 激活默认炮台(PW_Battery_x 首次初始化在这里完成, // ⭐ 先等一帧:StartCoroutine 会同步执行到第一个 yield —— 原先座位激活的重活
// 和"90%"写入进度条是同一帧(数字还没刷新、主线程就被占住,看起来"90 卡死")。
// 先让一帧,进度条和收尾循环跑起来再干重活
yield return null;
bool willActivate = sit != null && !sit.gameObject.activeSelf;
// ⭐ 只有"座位从未激活、这次预热才激活"时才预关炮台:
// 预制体里 4 把 XJMH 炮台(SkeletonGraphic)默认激活,座位 SetActive 时 4 套骨架/材质/贴图
// 挤在同一帧全部首初始化(单帧尖峰巨大);先关掉后,这一帧只初始化 Awake 点亮的默认那把。
// ⚠️ 座位已在激活状态时不能动(Awake 不会再跑,关掉就回不来)
if (willActivate && sit.xjmhTurretList != null)
{
for (int i = 0; i < sit.xjmhTurretList.Count; i++)
{
var t = sit.xjmhTurretList[i];
if (t != null && t.gameObject.activeSelf) t.gameObject.SetActive(false);
}
}
// ① 提前激活本地座位:Awake → InitXJMHTurret → 激活默认炮台(首初始化在这里完成,
// 被加载界面遮住)。100% 时 JoinGame 再 SetActive(true) 是幂等的,不影响正常入座流程 // 被加载界面遮住)。100% 时 JoinGame 再 SetActive(true) 是幂等的,不影响正常入座流程
if (sit != null && !sit.gameObject.activeSelf) if (willActivate)
sit.gameObject.SetActive(true); sit.gameObject.SetActive(true);
yield return null; // 让座位/炮台这帧的重活落在加载画面里
// 座位/炮台初始化(骨架首帧网格上传、材质铺开)多留两帧,再点飞机
yield return null;
yield return null;
// ② 飞机隐藏预热(座位激活后 currentTurret 已就绪 = 入场会用的那把) // ② 飞机隐藏预热(座位激活后 currentTurret 已就绪 = 入场会用的那把)
var turret = sit != null ? sit.currentTurret as FlyTurretData : null; var turret = sit != null ? sit.currentTurret as FlyTurretData : null;
@@ -1361,6 +1386,11 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
UIManager.Instance.ReleaseHomeUI(); UIManager.Instance.ReleaseHomeUI();
SetLoadProgress(0.02f); SetLoadProgress(0.02f);
// ⭐ 提前后台加载开火音效 PW_Shoot(Audio+PTCBZS,独立小包):
// 与后面的路线/鱼包/音频加载并行跑,78% 处 await 时早已完成,
// 不再把"打开小包 + 标签求交集"的耗时压在 78% 那一帧(进度条卡死点)
_ = LoadBulletClip();
// 路线:2~30(大包同步解压期间回调不刷新 → 预估进度保证条持续推进) // 路线:2~30(大包同步解压期间回调不刷新 → 预估进度保证条持续推进)
StartCreepProgress(0.02f, 0.30f); StartCreepProgress(0.02f, 0.30f);
await MonsterMoveLine.LoadBezier(p => await MonsterMoveLine.LoadBezier(p =>
@@ -1386,7 +1416,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
if (flow != _resourceFlowToken) return; if (flow != _resourceFlowToken) return;
// ⭐ 开火音效 PW_Shoot 在 Default Local Group(Audio+PTCBZS 双标签交集检索): // ⭐ 开火音效 PW_Shoot 在 Default Local Group(Audio+PTCBZS 双标签交集检索):
// 只命中 Default 小包,不把其它玩法的巨型音频包拉进内存;句柄由 LoadBulletClip 静态保存,离房释放 // 只命中 Default 小包,不把其它玩法的巨型音频包拉进内存;
// 资源在 0~2% 已后台 kick-off 且全局常驻,这里 await 基本瞬时通过(不再把打开包的耗时压在 78% 主线程上)
StartCreepProgress(0.78f, 0.84f); StartCreepProgress(0.78f, 0.84f);
await LoadBulletClip(); await LoadBulletClip();
StopCreepProgress(); StopCreepProgress();
@@ -1484,7 +1515,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
if (flow != _resourceFlowToken) return; // ⭐ 期间已有新流程(新面板加载),剩余卸载作废 if (flow != _resourceFlowToken) return; // ⭐ 期间已有新流程(新面板加载),剩余卸载作废
await AudioResourcesData.UnLoadAudioGame(); await AudioResourcesData.UnLoadAudioGame();
if (flow != _resourceFlowToken) return; if (flow != _resourceFlowToken) return;
UnLoadBulletClip(); // ⭐ 释放开火音效句柄(引用计数归零) // ⭐ 开火音效 PW_Shoot(Audio+PTCBZS)不释放:全局常驻(见 LoadBulletClip 注释,
// 独立小包反复开关只会把打开耗时反复压在进房 78% 那一帧,省不到内存)
TurretResourcesData.UnloadAllZhanShen(ZhanShenUsage.GamePlay); // ⭐ 卸载按需加载的战神(游戏内) TurretResourcesData.UnloadAllZhanShen(ZhanShenUsage.GamePlay); // ⭐ 卸载按需加载的战神(游戏内)
TurretResourcesData.UnloadAllTurretPrefabs(); // ⭐ 卸载按需加载的炮台/翅膀 prefab TurretResourcesData.UnloadAllTurretPrefabs(); // ⭐ 卸载按需加载的炮台/翅膀 prefab
await MonsterMoveLine.UnLoadBezier(); await MonsterMoveLine.UnLoadBezier();
@@ -1510,29 +1542,27 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
/// <summary> /// <summary>
/// ⭐ 开火音效 PW_Shoot 的加载句柄(static:新老面板实例共享)。 /// ⭐ 开火音效 PW_Shoot 的加载句柄(static:新老面板实例共享)。
/// PW_Shoot 在 Default Local Group(Audio+PTCBZS),该包因默认音频常驻本就不会卸载, /// PW_Shoot 是全局开火音效、每局必用,且各组已是 PackSeparately(每个资源独立小包):
/// 但句柄仍要显式保存/释放,避免每次进房引用计数 +1 无限累加。 /// 旧实现"每次进房 Release+Load、离房再释放"省不到内存(下一局马上又加载回来),
/// 却把"打开小包 + Audio/PTCBZS 标签求交集"的主线程耗时全压在进房 78% 那一帧(进度条卡死点)。
/// 现在只加载一次、程序生命周期常驻;首次加载在进房 0~2%(后台)就 kick-off,78% 处直接通过。
/// </summary> /// </summary>
private static AsyncOperationHandle<IList<AudioClip>> _bulletClipHandle; private static AsyncOperationHandle<IList<AudioClip>> _bulletClipHandle;
private static bool _bulletClipStarted;
/// <summary>加载开火音效(Audio+PTCBZS 交集,只命中 Default Local Group 里的 PW_Shoot)</summary> /// <summary>加载开火音效(Audio+PTCBZS 交集,只命中 Default Local Group 里的 PW_Shoot)。
/// 幂等:已启动过则复用同一句柄(通常早已完成,await 直接通过)。</summary>
private static async Task LoadBulletClip() private static async Task LoadBulletClip()
{ {
// 防御:上一轮句柄未释放时先释放 if (!_bulletClipStarted)
if (_bulletClipHandle.IsValid()) {
Addressables.Release(_bulletClipHandle); _bulletClipStarted = true;
_bulletClipHandle = Addressables.LoadAssetsAsync<AudioClip>(new List<string> { "Audio", "PTCBZS" }, null, _bulletClipHandle = Addressables.LoadAssetsAsync<AudioClip>(new List<string> { "Audio", "PTCBZS" }, null,
Addressables.MergeMode.Intersection); Addressables.MergeMode.Intersection);
await _bulletClipHandle.Task;
} }
if (!_bulletClipHandle.IsValid()) return;
/// <summary>释放开火音效句柄(离房卸载流程调用;static 引用一并置空防悬空)</summary> try { await _bulletClipHandle.Task; }
private static void UnLoadBulletClip() catch (Exception e) { Debug.LogError($"开火音效加载失败: {e.Message}"); }
{
if (_bulletClipHandle.IsValid())
Addressables.Release(_bulletClipHandle);
bulletClip = null;
} }
/// <summary> /// <summary>
@@ -1545,7 +1575,7 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
{ {
await FishResourcesData.UnLoadFishAssetsData(); await FishResourcesData.UnLoadFishAssetsData();
await AudioResourcesData.UnLoadAudioGame(); await AudioResourcesData.UnLoadAudioGame();
UnLoadBulletClip(); // ⭐ 开火音效 PW_Shoot 常驻不释放(见 LoadBulletClip 注释)
TurretResourcesData.UnloadAllZhanShen(ZhanShenUsage.GamePlay); TurretResourcesData.UnloadAllZhanShen(ZhanShenUsage.GamePlay);
TurretResourcesData.UnloadAllTurretPrefabs(); TurretResourcesData.UnloadAllTurretPrefabs();
await MonsterMoveLine.UnLoadBezier(); await MonsterMoveLine.UnLoadBezier();
@@ -1632,7 +1662,7 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
SetUnloadProgress(0.4f); SetUnloadProgress(0.4f);
await AudioResourcesData.UnLoadAudioGame(); await AudioResourcesData.UnLoadAudioGame();
UnLoadBulletClip(); // ⭐ 释放开火音效句柄(引用计数归零) // ⭐ 开火音效 PW_Shoot(Audio+PTCBZS)不释放:全局常驻(见 LoadBulletClip 注释)
TurretResourcesData.UnloadAllZhanShen(ZhanShenUsage.GamePlay); // ⭐ 卸载按需加载的战神(游戏内) TurretResourcesData.UnloadAllZhanShen(ZhanShenUsage.GamePlay); // ⭐ 卸载按需加载的战神(游戏内)
TurretResourcesData.UnloadAllTurretPrefabs(); // ⭐ 卸载按需加载的炮台/翅膀 prefab TurretResourcesData.UnloadAllTurretPrefabs(); // ⭐ 卸载按需加载的炮台/翅膀 prefab
+2 -2
View File
@@ -160,7 +160,7 @@ MonoBehaviour:
m_MinValue: 0 m_MinValue: 0
m_MaxValue: 1 m_MaxValue: 1
m_WholeNumbers: 0 m_WholeNumbers: 0
m_Value: 1 m_Value: 0
m_OnValueChanged: m_OnValueChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
@@ -5849,7 +5849,7 @@ MonoBehaviour:
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_text: LV:211 m_text: LV:0
m_isRightToLeft: 0 m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 5d4a713fdd931db4c9ce49f068b54e0a, type: 2} m_fontAsset: {fileID: 11400000, guid: 5d4a713fdd931db4c9ce49f068b54e0a, type: 2}
m_sharedMaterial: {fileID: 3593458263369068374, guid: 5d4a713fdd931db4c9ce49f068b54e0a, m_sharedMaterial: {fileID: 3593458263369068374, guid: 5d4a713fdd931db4c9ce49f068b54e0a,