This commit is contained in:
2026-10-14 00:29:07 +08:00
parent 3ee5643e82
commit 383abd67bc
42 changed files with 105402 additions and 1352 deletions
@@ -621,7 +621,7 @@ MonoBehaviour:
drawLineSegments: 60
drawLineColor: {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
bossName: "\u6DF1\u6D77\u706F\u7B3C\u9C7C"
isToUI: 1
isToUI: 0
tMP_CurrBossScore: {fileID: 0}
currBossScoreValue: 0
bossScoreValue: 0
File diff suppressed because it is too large Load Diff
@@ -3411,7 +3411,7 @@ MonoBehaviour:
drawLineSegments: 60
drawLineColor: {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
bossName: "\u87E0\u6843\u6811"
isToUI: 1
isToUI: 0
tMP_CurrBossScore: {fileID: 0}
currBossScoreValue: 0
bossScoreValue: 0
@@ -9418,7 +9418,7 @@ MonoBehaviour:
- {fileID: 95139269106097999}
lockPoint: {fileID: 95425877480302237}
bingDongEffect:
- {fileID: 0}
- {fileID: 2880868020623575824}
needLockEvent: 0
createVideoClip: {fileID: 0}
rotationPY: 60
@@ -446,7 +446,7 @@ PrefabInstance:
- target: {fileID: 1023180166179066019, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_AnchoredPosition.x
value: -1628
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1023180166179066019, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
@@ -661,23 +661,28 @@ PrefabInstance:
- target: {fileID: 1889981257584575367, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_LocalScale.x
value: 0.98265
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1889981257584575367, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_LocalScale.y
value: 0.98265
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1889981257584575367, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_LocalScale.z
value: 0.98265
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1889981257584575367, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0.3470459
objectReference: {fileID: 0}
- target: {fileID: 1889981257584575367, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_ConstrainProportionsScale
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1963472460635600091, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_Layer
@@ -751,7 +756,7 @@ PrefabInstance:
- target: {fileID: 2314438954505263539, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 773
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2314438954505263539, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
@@ -1281,7 +1286,7 @@ PrefabInstance:
- target: {fileID: 4025161831505289402, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_AnchoredPosition.y
value: -733
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4025161831505289402, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
@@ -1466,7 +1471,7 @@ PrefabInstance:
- target: {fileID: 4605851393792301454, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 1582
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4605851393792301454, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
@@ -2571,22 +2576,27 @@ PrefabInstance:
- target: {fileID: 7563543857993696468, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_LocalScale.x
value: 0.34603
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7563543857993696468, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_LocalScale.y
value: 0.34603
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7563543857993696468, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_LocalScale.z
value: 0.34603
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7563543857993696468, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0.000030517578
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7563543857993696468, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
propertyPath: m_ConstrainProportionsScale
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7623169449076234796, guid: cf762c0a6428e1c42b456cb87803660f,
type: 3}
@@ -841,6 +841,7 @@ PrefabInstance:
m_RemovedComponents: []
m_RemovedGameObjects:
- {fileID: 1845000557373688, guid: 9af7049c3ad41f243aa0a4bd10e52a76, type: 3}
- {fileID: 5641633343447502574, guid: 9af7049c3ad41f243aa0a4bd10e52a76, type: 3}
m_AddedGameObjects:
- targetCorrespondingSourceObject: {fileID: 4899283280599034, guid: 9af7049c3ad41f243aa0a4bd10e52a76,
type: 3}
@@ -851,31 +852,7 @@ PrefabInstance:
type: 3}
insertIndex: -1
addedObject: {fileID: -4733550369863086327}
- targetCorrespondingSourceObject: {fileID: 5641633343447502574, guid: 9af7049c3ad41f243aa0a4bd10e52a76,
type: 3}
insertIndex: -1
addedObject: {fileID: 4172946809914628350}
m_SourcePrefab: {fileID: 100100000, guid: 9af7049c3ad41f243aa0a4bd10e52a76, type: 3}
--- !u!1 &371539028887473002 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 5641633343447502574, guid: 9af7049c3ad41f243aa0a4bd10e52a76,
type: 3}
m_PrefabInstance: {fileID: 5434968875948574084}
m_PrefabAsset: {fileID: 0}
--- !u!114 &4172946809914628350
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 371539028887473002}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5e9b2b25f1e632c4599192fca059c35a, type: 3}
m_Name:
m_EditorClassIdentifier:
subCamera: {fileID: 0}
isFishCamera: 0
--- !u!1 &5433616883065602458 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1397075024069662, guid: 9af7049c3ad41f243aa0a4bd10e52a76,
@@ -1767,34 +1744,11 @@ PrefabInstance:
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_RemovedGameObjects:
- {fileID: 5641633343447502574, guid: 9af7049c3ad41f243aa0a4bd10e52a76, type: 3}
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 5641633343447502574, guid: 9af7049c3ad41f243aa0a4bd10e52a76,
type: 3}
insertIndex: -1
addedObject: {fileID: 7070661682886030326}
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 9af7049c3ad41f243aa0a4bd10e52a76, type: 3}
--- !u!1 &1334074709306851950 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 5641633343447502574, guid: 9af7049c3ad41f243aa0a4bd10e52a76,
type: 3}
m_PrefabInstance: {fileID: 6685750068955401344}
m_PrefabAsset: {fileID: 0}
--- !u!114 &7070661682886030326
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1334074709306851950}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5e9b2b25f1e632c4599192fca059c35a, type: 3}
m_Name:
m_EditorClassIdentifier:
subCamera: {fileID: 0}
isFishCamera: 0
--- !u!4 &6690635580255591290 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4899283280599034, guid: 9af7049c3ad41f243aa0a4bd10e52a76,
@@ -1322,6 +1322,12 @@ Transform:
type: 3}
m_PrefabInstance: {fileID: 9207580813238453828}
m_PrefabAsset: {fileID: 0}
--- !u!4 &626808663193521478 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8607850993348922114, guid: d91ace63f3f1e264397418d302f4f473,
type: 3}
m_PrefabInstance: {fileID: 9207580813238453828}
m_PrefabAsset: {fileID: 0}
--- !u!1 &628297592807742963 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 8610826016451861431, guid: d91ace63f3f1e264397418d302f4f473,
@@ -1521,10 +1527,11 @@ MonoBehaviour:
forwordXYZ:
fishenum: 0
moveTime: 0
yzGroupTimeOffset: 0
isyz: 0
yzID:
colliderList: []
lockPoint: {fileID: 3331724537586777070}
lockPoint: {fileID: 626808663193521478}
bingDongEffect:
- {fileID: 0}
needLockEvent: 0
@@ -116,10 +116,11 @@ MonoBehaviour:
forwordXYZ:
fishenum: 0
moveTime: 0
yzGroupTimeOffset: 0
isyz: 0
yzID:
colliderList: []
lockPoint: {fileID: 0}
lockPoint: {fileID: 4666811669245313127}
bingDongEffect:
- {fileID: 0}
needLockEvent: 0
@@ -2110,6 +2111,12 @@ PrefabInstance:
addedObject: {fileID: 8062014956406667000}
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: f7541f449c9e29645aed5158851332c1, type: 3}
--- !u!4 &4666811669245313127 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4611579644537198, guid: f7541f449c9e29645aed5158851332c1,
type: 3}
m_PrefabInstance: {fileID: 4671282064657688841}
m_PrefabAsset: {fileID: 0}
--- !u!4 &4674039899128169141 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4007513189690300, guid: f7541f449c9e29645aed5158851332c1,
@@ -85,6 +85,7 @@ MonoBehaviour:
forwordXYZ:
fishenum: 2
moveTime: 0
yzGroupTimeOffset: 0
isyz: 0
yzID:
colliderList: []
@@ -205,10 +206,11 @@ MonoBehaviour:
forwordXYZ:
fishenum: 2
moveTime: 0
yzGroupTimeOffset: 0
isyz: 0
yzID:
colliderList: []
lockPoint: {fileID: 0}
lockPoint: {fileID: 1946658920249368719}
bingDongEffect:
- {fileID: 0}
needLockEvent: 0
@@ -85,6 +85,7 @@ MonoBehaviour:
forwordXYZ:
fishenum: 0
moveTime: 0
yzGroupTimeOffset: 0
isyz: 0
yzID:
colliderList: []
@@ -236,10 +237,11 @@ MonoBehaviour:
forwordXYZ:
fishenum: 0
moveTime: 0
yzGroupTimeOffset: 0
isyz: 0
yzID:
colliderList: []
lockPoint: {fileID: 0}
lockPoint: {fileID: 246731029409174289}
bingDongEffect:
- {fileID: 0}
needLockEvent: 0
@@ -1666,6 +1668,12 @@ PrefabInstance:
insertIndex: -1
addedObject: {fileID: 583745660319881253}
m_SourcePrefab: {fileID: 100100000, guid: bfe3df1769c87a94bb45857e06520ed2, type: 3}
--- !u!4 &246731029409174289 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4738892719839630, guid: bfe3df1769c87a94bb45857e06520ed2,
type: 3}
m_PrefabInstance: {fileID: 251152022574844575}
m_PrefabAsset: {fileID: 0}
--- !u!4 &247083506409716406 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4948132087033897, guid: bfe3df1769c87a94bb45857e06520ed2,
@@ -1878,6 +1878,22 @@ PrefabInstance:
propertyPath: m_Layer
value: 10
objectReference: {fileID: 0}
- target: {fileID: 5621521762977352413, guid: 947c6e603406a744cb3de57c401cc516,
type: 3}
propertyPath: m_SceneBindings.Array.size
value: 20
objectReference: {fileID: 0}
- target: {fileID: 5621521762977352413, guid: 947c6e603406a744cb3de57c401cc516,
type: 3}
propertyPath: m_SceneBindings.Array.data[19].key
value:
objectReference: {fileID: -3138409185041536067, guid: f2ee78a1b58273e4bb9a1d4dc9b668c1,
type: 2}
- target: {fileID: 5621521762977352413, guid: 947c6e603406a744cb3de57c401cc516,
type: 3}
propertyPath: m_SceneBindings.Array.data[19].value
value:
objectReference: {fileID: 2916323081134643384}
- target: {fileID: 5654754283984448227, guid: 947c6e603406a744cb3de57c401cc516,
type: 3}
propertyPath: m_Layer
@@ -2831,6 +2847,10 @@ PrefabInstance:
type: 3}
insertIndex: -1
addedObject: {fileID: 7631072287571022996}
- targetCorrespondingSourceObject: {fileID: 6110568047410905518, guid: 947c6e603406a744cb3de57c401cc516,
type: 3}
insertIndex: -1
addedObject: {fileID: 2916323081134643384}
m_SourcePrefab: {fileID: 100100000, guid: 947c6e603406a744cb3de57c401cc516, type: 3}
--- !u!114 &586262465613916856 stripped
MonoBehaviour:
@@ -2896,3 +2916,54 @@ MonoBehaviour:
idleIndexParam: IdleIndex
fireIndex: 0
idleIndex: 0
obj_Add: {fileID: 0}
obj_Down: {fileID: 0}
JGQiuStartPrefab: {fileID: 0}
JGStartFXPrefab: {fileID: 0}
JGHitFXPrefab: {fileID: 0}
laserFXDelay: 0
selfOffsetJGStart: {x: 0, y: 0}
buttomOffsetZSRotateInit: {x: 0, y: 0, z: 0}
topOffsetZSRotateInit: {x: 0, y: 0, z: 0}
laserAudio: {fileID: 0}
bulletAudio: {fileID: 0}
rotateTargetNode: {fileID: 8236032541228182874}
rotateSensitivity: 0.4
rotateLerpSpeed: 14
rotateByTimeline: 1
--- !u!114 &2916323081134643384
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4400983289994395771}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e52de21a22b6dd44c9cc19f810c65059, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Events:
m_Signals:
- {fileID: 11400000, guid: 84564cd25b9f00c4fbb4295f3e6358a9, type: 2}
m_Events:
- m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 7631072287571022996}
m_TargetAssemblyTypeName: ZhanShenTurretData, Assembly-CSharp
m_MethodName: RotateZhanShen
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!4 &8236032541228182874 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 1986707878949088399, guid: 947c6e603406a744cb3de57c401cc516,
type: 3}
m_PrefabInstance: {fileID: 7628666483438797269}
m_PrefabAsset: {fileID: 0}
@@ -571,6 +571,10 @@ MonoBehaviour:
tra_RotationPivot: {fileID: 0}
bulletPrefab_Two: {fileID: 0}
bulletPrefab: {fileID: 0}
laserPrefab: {fileID: 0}
laserWidth: 0.3
laserColor: {r: 1, g: 0.3, b: 0.3, a: 0.9}
laserLengthCorrect: 1
turretNumber: 0
turretType: 1
displayName:
@@ -589,3 +593,29 @@ MonoBehaviour:
laserStartAnim:
laserLoopAnim:
laserEndAnim:
playFireParam: PlayFire
fireIndexParam: FireIndex
idleIndexParam: IdleIndex
fireIndex: 0
idleIndex: 0
obj_Add: {fileID: 0}
obj_Down: {fileID: 0}
JGQiuStartPrefab: {fileID: 0}
JGStartFXPrefab: {fileID: 0}
JGHitFXPrefab: {fileID: 0}
laserFXDelay: 0
selfOffsetJGStart: {x: 0, y: 0}
buttomOffsetZSRotateInit: {x: 0, y: 0, z: 0}
topOffsetZSRotateInit: {x: 0, y: 0, z: 0}
laserAudio: {fileID: 0}
bulletAudio: {fileID: 0}
rotateTargetNode: {fileID: 7739146800519942698}
rotateSensitivity: 0.4
rotateLerpSpeed: 14
rotateByTimeline: 0
--- !u!4 &7739146800519942698 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2655471462680511432, guid: 7e0903bef36c5774aaf557493ed48469,
type: 3}
m_PrefabInstance: {fileID: 5745704973502894562}
m_PrefabAsset: {fileID: 0}
@@ -2070,7 +2070,7 @@ PrefabInstance:
- target: {fileID: 4317400798197432912, guid: b0b2f211485160f47b509fd3e92cd465,
type: 3}
propertyPath: m_SceneBindings.Array.size
value: 35
value: 36
objectReference: {fileID: 0}
- target: {fileID: 4317400798197432912, guid: b0b2f211485160f47b509fd3e92cd465,
type: 3}
@@ -2084,6 +2084,17 @@ PrefabInstance:
value:
objectReference: {fileID: -5854594703988967651, guid: 06e22d0e281429447b20d2fbfb075972,
type: 2}
- target: {fileID: 4317400798197432912, guid: b0b2f211485160f47b509fd3e92cd465,
type: 3}
propertyPath: m_SceneBindings.Array.data[35].key
value:
objectReference: {fileID: -1712017111606737446, guid: 06e22d0e281429447b20d2fbfb075972,
type: 2}
- target: {fileID: 4317400798197432912, guid: b0b2f211485160f47b509fd3e92cd465,
type: 3}
propertyPath: m_SceneBindings.Array.data[35].value
value:
objectReference: {fileID: 5277026802779756868}
- target: {fileID: 4344440748941751652, guid: b0b2f211485160f47b509fd3e92cd465,
type: 3}
propertyPath: m_Layer
@@ -4097,7 +4108,17 @@ PrefabInstance:
type: 3}
insertIndex: -1
addedObject: {fileID: -6372912813471141665}
- targetCorrespondingSourceObject: {fileID: 3013444685122459850, guid: b0b2f211485160f47b509fd3e92cd465,
type: 3}
insertIndex: -1
addedObject: {fileID: 5277026802779756868}
m_SourcePrefab: {fileID: 100100000, guid: b0b2f211485160f47b509fd3e92cd465, type: 3}
--- !u!4 &352161417902628344 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2171480997175603376, guid: b0b2f211485160f47b509fd3e92cd465,
type: 3}
m_PrefabInstance: {fileID: 1927970033502694728}
m_PrefabAsset: {fileID: 0}
--- !u!1 &3679548091494954370 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3013444685122459850, guid: b0b2f211485160f47b509fd3e92cd465,
@@ -4122,6 +4143,10 @@ MonoBehaviour:
tra_RotationPivot: {fileID: 0}
bulletPrefab_Two: {fileID: 0}
bulletPrefab: {fileID: 0}
laserPrefab: {fileID: 0}
laserWidth: 0.3
laserColor: {r: 1, g: 0.3, b: 0.3, a: 0.9}
laserLengthCorrect: 1
turretNumber: 0
turretType: 1
displayName:
@@ -4140,6 +4165,57 @@ MonoBehaviour:
laserStartAnim:
laserLoopAnim:
laserEndAnim:
playFireParam: PlayFire
fireIndexParam: FireIndex
idleIndexParam: IdleIndex
fireIndex: 0
idleIndex: 0
obj_Add: {fileID: 0}
obj_Down: {fileID: 0}
JGQiuStartPrefab: {fileID: 0}
JGStartFXPrefab: {fileID: 0}
JGHitFXPrefab: {fileID: 0}
laserFXDelay: 0
selfOffsetJGStart: {x: 0, y: 0}
buttomOffsetZSRotateInit: {x: 0, y: 0, z: 0}
topOffsetZSRotateInit: {x: 0, y: 0, z: 0}
laserAudio: {fileID: 0}
bulletAudio: {fileID: 0}
rotateTargetNode: {fileID: 352161417902628344}
rotateAxis: 1
rotateSensitivity: 0.4
rotateLerpSpeed: 14
rotateByTimeline: 1
--- !u!114 &5277026802779756868
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3679548091494954370}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e52de21a22b6dd44c9cc19f810c65059, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Events:
m_Signals:
- {fileID: 11400000, guid: 84564cd25b9f00c4fbb4295f3e6358a9, type: 2}
m_Events:
- m_PersistentCalls:
m_Calls:
- m_Target: {fileID: -6372912813471141665}
m_TargetAssemblyTypeName: ZhanShenTurretData, Assembly-CSharp
m_MethodName: RotateZhanShen
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!114 &8403537160108915102 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 7953033694872114390, guid: b0b2f211485160f47b509fd3e92cd465,
@@ -726,6 +726,22 @@ PrefabInstance:
propertyPath: m_Layer
value: 10
objectReference: {fileID: 0}
- target: {fileID: 2531847100539314626, guid: eb7cc0ebc66628846a0a5dcb05fee776,
type: 3}
propertyPath: m_SceneBindings.Array.size
value: 17
objectReference: {fileID: 0}
- target: {fileID: 2531847100539314626, guid: eb7cc0ebc66628846a0a5dcb05fee776,
type: 3}
propertyPath: m_SceneBindings.Array.data[16].key
value:
objectReference: {fileID: -1647403450035442783, guid: 95593402ed59a884c80ea83848e3497e,
type: 2}
- target: {fileID: 2531847100539314626, guid: eb7cc0ebc66628846a0a5dcb05fee776,
type: 3}
propertyPath: m_SceneBindings.Array.data[16].value
value:
objectReference: {fileID: 1460812197414631979}
- target: {fileID: 2532804347700057154, guid: eb7cc0ebc66628846a0a5dcb05fee776,
type: 3}
propertyPath: m_Layer
@@ -2734,6 +2750,10 @@ PrefabInstance:
type: 3}
insertIndex: -1
addedObject: {fileID: -9012517035053230575}
- targetCorrespondingSourceObject: {fileID: 5496570507378448893, guid: eb7cc0ebc66628846a0a5dcb05fee776,
type: 3}
insertIndex: -1
addedObject: {fileID: 1460812197414631979}
m_SourcePrefab: {fileID: 100100000, guid: eb7cc0ebc66628846a0a5dcb05fee776, type: 3}
--- !u!1 &4092126732376455684 stripped
GameObject:
@@ -2759,6 +2779,10 @@ MonoBehaviour:
tra_RotationPivot: {fileID: 0}
bulletPrefab_Two: {fileID: 0}
bulletPrefab: {fileID: 0}
laserPrefab: {fileID: 0}
laserWidth: 0.3
laserColor: {r: 1, g: 0.3, b: 0.3, a: 0.9}
laserLengthCorrect: 1
turretNumber: 0
turretType: 1
displayName:
@@ -2777,3 +2801,59 @@ MonoBehaviour:
laserStartAnim:
laserLoopAnim:
laserEndAnim:
playFireParam: PlayFire
fireIndexParam: FireIndex
idleIndexParam: IdleIndex
fireIndex: 0
idleIndex: 0
obj_Add: {fileID: 0}
obj_Down: {fileID: 0}
JGQiuStartPrefab: {fileID: 0}
JGStartFXPrefab: {fileID: 0}
JGHitFXPrefab: {fileID: 0}
laserFXDelay: 0
selfOffsetJGStart: {x: 0, y: 0}
buttomOffsetZSRotateInit: {x: 0, y: 0, z: 0}
topOffsetZSRotateInit: {x: 0, y: 0, z: 0}
laserAudio: {fileID: 0}
bulletAudio: {fileID: 0}
rotateTargetNode: {fileID: 6837491640916431250}
rotateSensitivity: 0.4
rotateLerpSpeed: 14
rotateByTimeline: 1
--- !u!114 &1460812197414631979
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4092126732376455684}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e52de21a22b6dd44c9cc19f810c65059, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Events:
m_Signals:
- {fileID: 11400000, guid: 84564cd25b9f00c4fbb4295f3e6358a9, type: 2}
m_Events:
- m_PersistentCalls:
m_Calls:
- m_Target: {fileID: -9012517035053230575}
m_TargetAssemblyTypeName: ZhanShenTurretData, Assembly-CSharp
m_MethodName: RotateZhanShen
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!4 &6837491640916431250 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3057447441122275947, guid: eb7cc0ebc66628846a0a5dcb05fee776,
type: 3}
m_PrefabInstance: {fileID: 8398538566153790457}
m_PrefabAsset: {fileID: 0}
@@ -77,6 +77,11 @@ PrefabInstance:
propertyPath: m_Layer
value: 10
objectReference: {fileID: 0}
- target: {fileID: 728462455589640085, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 740063969509039210, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_Layer
@@ -577,6 +582,11 @@ PrefabInstance:
propertyPath: m_Layer
value: 10
objectReference: {fileID: 0}
- target: {fileID: 4541926281952087237, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4570496277376253429, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_Layer
@@ -705,12 +715,22 @@ PrefabInstance:
- target: {fileID: 6076947607930570929, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_LocalRotation.w
value: -0.06383961
value: 0.095484376
objectReference: {fileID: 0}
- target: {fileID: 6076947607930570929, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_LocalRotation.x
value: 0.07106401
objectReference: {fileID: 0}
- target: {fileID: 6076947607930570929, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_LocalRotation.y
value: 0.7890956
objectReference: {fileID: 0}
- target: {fileID: 6076947607930570929, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_LocalRotation.z
value: 0.60679746
value: 0.6026283
objectReference: {fileID: 0}
- target: {fileID: 6104045944742156648, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
@@ -837,6 +857,11 @@ PrefabInstance:
propertyPath: m_Layer
value: 10
objectReference: {fileID: 0}
- target: {fileID: 7018613850427909376, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7053713736789555276, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_Layer
@@ -867,6 +892,11 @@ PrefabInstance:
propertyPath: m_Layer
value: 10
objectReference: {fileID: 0}
- target: {fileID: 7393055792523532059, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_Enabled
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7430998372387218580, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_Layer
@@ -972,6 +1002,36 @@ PrefabInstance:
propertyPath: m_Layer
value: 10
objectReference: {fileID: 0}
- target: {fileID: 8132092681826129082, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_LocalRotation.w
value: 0.047590416
objectReference: {fileID: 0}
- target: {fileID: 8132092681826129082, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_LocalRotation.x
value: -0.023402436
objectReference: {fileID: 0}
- target: {fileID: 8132092681826129082, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_LocalRotation.y
value: 0.8961072
objectReference: {fileID: 0}
- target: {fileID: 8132092681826129082, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_LocalRotation.z
value: 0.44065788
objectReference: {fileID: 0}
- target: {fileID: 8132092681826129082, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 232.371
objectReference: {fileID: 0}
- target: {fileID: 8132092681826129082, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: -6.08
objectReference: {fileID: 0}
- target: {fileID: 8141714381093864070, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
propertyPath: m_Layer
@@ -1142,7 +1202,25 @@ MonoBehaviour:
idleIndexParam: IdleIndex
fireIndex: 0
idleIndex: 0
obj_Add: {fileID: 0}
obj_Down: {fileID: 0}
JGQiuStartPrefab: {fileID: 0}
JGStartFXPrefab: {fileID: 0}
JGHitFXPrefab: {fileID: 0}
laserFXDelay: 0
selfOffsetJGStart: {x: -16, y: 234}
selfOffsetZSRotateInit: 0
otherOffsetZSRotateInit: 0
buttomOffsetZSRotateInit: {x: 0, y: 0, z: 0}
topOffsetZSRotateInit: {x: 0, y: 0, z: 0}
laserAudio: {fileID: 0}
bulletAudio: {fileID: 0}
rotateTargetNode: {fileID: 5093322947646999479}
rotateAxis: 1
rotateSensitivity: 0.4
rotateLerpSpeed: 14
rotateByTimeline: 0
--- !u!4 &5093322947646999479 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8132092681826129082, guid: 83df656fb865a1f4fa71a03b80f69f5a,
type: 3}
m_PrefabInstance: {fileID: 3924290080706174733}
m_PrefabAsset: {fileID: 0}
@@ -788,6 +788,22 @@ PrefabInstance:
propertyPath: m_Layer
value: 10
objectReference: {fileID: 0}
- target: {fileID: 2736199077502091845, guid: 5a049c75272666d4e841346408b004d9,
type: 3}
propertyPath: m_SceneBindings.Array.size
value: 29
objectReference: {fileID: 0}
- target: {fileID: 2736199077502091845, guid: 5a049c75272666d4e841346408b004d9,
type: 3}
propertyPath: m_SceneBindings.Array.data[28].key
value:
objectReference: {fileID: -6685673391800909720, guid: 7520209b0b57fa345a6aa52f1fa208a7,
type: 2}
- target: {fileID: 2736199077502091845, guid: 5a049c75272666d4e841346408b004d9,
type: 3}
propertyPath: m_SceneBindings.Array.data[28].value
value:
objectReference: {fileID: 6201132810631769503}
- target: {fileID: 2741246652997821880, guid: 5a049c75272666d4e841346408b004d9,
type: 3}
propertyPath: m_Name
@@ -2561,7 +2577,17 @@ PrefabInstance:
type: 3}
insertIndex: -1
addedObject: {fileID: -8064379128552912567}
- targetCorrespondingSourceObject: {fileID: 2741246652997821880, guid: 5a049c75272666d4e841346408b004d9,
type: 3}
insertIndex: -1
addedObject: {fileID: 6201132810631769503}
m_SourcePrefab: {fileID: 100100000, guid: 5a049c75272666d4e841346408b004d9, type: 3}
--- !u!4 &5824192346054987256 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2817298087507621746, guid: 5a049c75272666d4e841346408b004d9,
type: 3}
m_PrefabInstance: {fileID: 8631920249457834634}
m_PrefabAsset: {fileID: 0}
--- !u!1 &5890814918114320178 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 2741246652997821880, guid: 5a049c75272666d4e841346408b004d9,
@@ -2586,6 +2612,10 @@ MonoBehaviour:
tra_RotationPivot: {fileID: 0}
bulletPrefab_Two: {fileID: 0}
bulletPrefab: {fileID: 0}
laserPrefab: {fileID: 0}
laserWidth: 0.3
laserColor: {r: 1, g: 0.3, b: 0.3, a: 0.9}
laserLengthCorrect: 1
turretNumber: 0
turretType: 1
displayName:
@@ -2604,3 +2634,53 @@ MonoBehaviour:
laserStartAnim:
laserLoopAnim:
laserEndAnim:
playFireParam: PlayFire
fireIndexParam: FireIndex
idleIndexParam: IdleIndex
fireIndex: 0
idleIndex: 0
obj_Add: {fileID: 0}
obj_Down: {fileID: 0}
JGQiuStartPrefab: {fileID: 0}
JGStartFXPrefab: {fileID: 0}
JGHitFXPrefab: {fileID: 0}
laserFXDelay: 0
selfOffsetJGStart: {x: 0, y: 0}
buttomOffsetZSRotateInit: {x: 0, y: 0, z: 0}
topOffsetZSRotateInit: {x: 0, y: 0, z: 0}
laserAudio: {fileID: 0}
bulletAudio: {fileID: 0}
rotateTargetNode: {fileID: 5824192346054987256}
rotateSensitivity: 0.4
rotateLerpSpeed: 14
rotateByTimeline: 1
--- !u!114 &6201132810631769503
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5890814918114320178}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e52de21a22b6dd44c9cc19f810c65059, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Events:
m_Signals:
- {fileID: 11400000, guid: 84564cd25b9f00c4fbb4295f3e6358a9, type: 2}
m_Events:
- m_PersistentCalls:
m_Calls:
- m_Target: {fileID: -8064379128552912567}
m_TargetAssemblyTypeName: ZhanShenTurretData, Assembly-CSharp
m_MethodName: RotateZhanShen
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
@@ -0,0 +1,14 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d6fa2d92fc1b3f34da284357edf89c3b, type: 3}
m_Name: ZhanShenRotate
m_EditorClassIdentifier:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 84564cd25b9f00c4fbb4295f3e6358a9
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -1,6 +1,15 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem; // Pointer.current:鼠标拖动 / 屏幕滑动统一采样
/// <summary>战神跟手旋转的旋转轴(3D 模型按轴转身,各战神模型朝向不同,面板可选)</summary>
public enum ZhanShenRotateAxis
{
X = 0,
Y = 1,
Z = 2
}
public class ZhanShenTurretData : TurretData
{
@@ -23,4 +32,140 @@ public class ZhanShenTurretData : TurretData
public AudioClip laserAudio;
[Tooltip("战神普通开火音效(未锁定时):不锁定开炮时逐发播放;为空则回退普通炮台音效 bulletClip")]
public AudioClip bulletAudio;
[Tooltip("旋转目标对象:跟手旋转时被旋转的节点(只转它 rotateAxis 那一个轴,其他轴和位移都不动)。为空回退战神实例自身")]
public Transform rotateTargetNode;
[Tooltip("跟手旋转绕哪个轴:3D 模型转身一般是 Y,部分模型/特效用 X 或 Z")]
public ZhanShenRotateAxis rotateAxis = ZhanShenRotateAxis.Y;
[Tooltip("跟手灵敏度:指针每滑动 1 像素累积多少度旋转。正数=向右划模型向右转、向左划向左转;想反方向就填负数")]
public float rotateSensitivity = 0.4f;
[Tooltip("跟手平滑系数:越大越跟手(每帧按 系数×帧间隔 插值到目标角度)。0=立即到位,不平滑")]
public float rotateLerpSpeed = 14f;
[Tooltip("跟手旋转是否由 Timeline 事件触发:\n" +
"勾上(默认)= 等 Timeline 上的事件调 RotateZhanShen 才开始跟手;\n" +
"取消 = 战神一出现就自动开始跟手(特效简单的战神没有 Timeline,用这个直接展示)")]
public bool rotateByTimeline = true;
/// <summary>是否正在跟手旋转(由 Timeline 事件 RotateZhanShen 开始、StopRotateZhanShen 结束)</summary>
private bool _rotateFollowing;
private Coroutine _rotateRoutine;
/// <summary>累积的目标角度(原始值,可超过 360°,保证连续拖动不绕圈回跳)</summary>
private float _rotateTargetAngle;
/// <summary>平滑显示用的角度(原始值,与 _rotateTargetAngle 同坐标系)</summary>
private float _rotateShownAngle;
/// <summary>上一帧指针位置:按帧间位移量累加角度,所以按下时也要先把位置记准</summary>
private Vector2 _rotateLastPointerPos;
/// <summary>
/// ⭐ 旋转战神(Timeline 事件调用="开始点"):开始持续跟手旋转。
/// 调用后每帧按指针(鼠标点击拖动 / 屏幕滑动)的横向位移量累加到目标角度,
/// 节点再按 rotateLerpSpeed 平滑绕 rotateAxis 转到该角度;累加从节点当前角度起步,不会跳变。
/// 重复触发(Timeline 上多个事件)不会叠加协程。
/// </summary>
public void RotateZhanShen()
{
if (_rotateFollowing) return;
// 战神实例被隐藏时(特殊鱼炮台期间 SetActive(false))不能起协程,Unity 会直接报错
if (!isActiveAndEnabled) return;
var node = ResolveRotateTargetNode();
if (node == null) return;
_rotateFollowing = true;
_rotateTargetAngle = ReadAxisAngle(node.localEulerAngles); // 从当前角度开始累加
_rotateShownAngle = _rotateTargetAngle;
_rotateLastPointerPos = ReadPointerPos();
_rotateRoutine = StartCoroutine(FollowRotateRoutine());
}
/// <summary>停止跟手旋转(Timeline 结束事件调用;不调用则由 OnDisable 兜底停止)</summary>
public void StopRotateZhanShen()
{
_rotateFollowing = false;
if (_rotateRoutine != null)
{
StopCoroutine(_rotateRoutine);
_rotateRoutine = null;
}
}
private IEnumerator FollowRotateRoutine()
{
while (_rotateFollowing)
{
yield return null;
var node = ResolveRotateTargetNode();
if (node == null) break;
var pointer = Pointer.current;
if (pointer != null)
{
Vector2 cur = pointer.position.ReadValue();
// 按住(拖动中)才累加:松手保持当前角度
// ⚠ 这里用 -= 而不是 +=:Unity 绕 Y 轴的正角度在屏幕上看是"向左转"(相机朝 -Z 看时
// +θ 把模型的正面转向 -X),所以"向右划=向右转"必须把右移量反号。改回 += 方向就会反。
if (pointer.press.isPressed)
_rotateTargetAngle -= (cur.x - _rotateLastPointerPos.x) * rotateSensitivity;
// ⚠ 不管有没有按住都记录位置:否则按下那一帧会用"开始跟手时的旧位置"算出巨大跳变
_rotateLastPointerPos = cur;
}
_rotateShownAngle = rotateLerpSpeed > 0f
? Mathf.Lerp(_rotateShownAngle, _rotateTargetAngle, Mathf.Clamp01(rotateLerpSpeed * Time.deltaTime))
: _rotateTargetAngle;
// 只改 rotateAxis 那一个轴:其余两轴沿用节点当前值(模型只绕该轴转身)
Vector3 e = node.localEulerAngles;
switch (rotateAxis)
{
case ZhanShenRotateAxis.X: e.x = _rotateShownAngle; break;
case ZhanShenRotateAxis.Z: e.z = _rotateShownAngle; break;
default: e.y = _rotateShownAngle; break;
}
node.localEulerAngles = e;
}
_rotateRoutine = null;
}
/// <summary>取当前旋转轴上的角度(跟手累加的起点)</summary>
private float ReadAxisAngle(Vector3 euler)
{
switch (rotateAxis)
{
case ZhanShenRotateAxis.X: return euler.x;
case ZhanShenRotateAxis.Z: return euler.z;
default: return euler.y;
}
}
private Transform ResolveRotateTargetNode()
{
return rotateTargetNode != null ? rotateTargetNode : transform;
}
private static Vector2 ReadPointerPos()
{
var pointer = Pointer.current;
return pointer != null ? pointer.position.ReadValue() : Vector2.zero;
}
private void OnDisable()
{
// 战神实例被回收/隐藏时停止跟手,避免协程挂在已停用的对象上继续跑
StopRotateZhanShen();
}
/// <summary>
/// 战神出现/重新激活:不走 Timeline 的简单战神按面板开关直接开始跟手。
/// ⭐ 必须挂基类 OnEnable 的扩展点,不能自己写 OnEnable——Unity 只调最派生的那一个,
/// 自建会把基类的"状态复位 + 播 Idle + 绑定按钮"整段顶掉。
/// 走这里(而不是 Start)是因为战神实例会被反复 SetActive(false)/(true)(特殊鱼炮台期间),
/// Start 一生只跑一次,重新显示时不会再触发。
/// </summary>
protected override void OnTurretEnable()
{
if (!rotateByTimeline) RotateZhanShen();
}
}
@@ -1288,8 +1288,8 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 2dae17c3f3238644694b12e66eb98eb6, type: 2}
m_Type: 0
m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
@@ -420,12 +420,22 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
RoomJoinNotice roomJoinNotice = _pendingRoomJoinNotice;
if (roomJoinNotice == null) return;
// ⭐ 立即消费标记:本方法在 90% 确认点执行,100% 处的兜底调用不会再重复跑
// (重复执行会把所有座位 JoinGame 两遍:金币/装备/入场标记全部错乱)
_pendingFirstShowInit = false;
string roomId = GameManager.Instance.gameData.currRoomData.roomId;
// 诊断:100% 卡的耗时分解(每个玩家 JoinGame 各多少 ms、合计多少 ms)
var swAll = System.Diagnostics.Stopwatch.StartNew();
var players = GameManager.Instance.gameData.currRoomData.players;
Debug.Log($"[XJMH首屏] 开始初始化:玩家 {players?.Count ?? 0} 名");
foreach (var item in GameManager.Instance.gameData.currRoomData.players)
foreach (var item in players)
{
var swOne = System.Diagnostics.Stopwatch.StartNew();
JoinGame(item.position, item.gold, item.diamond, item.cannonMultiple, 0, item.userId, item.cannonId, item.wingsId, item.warGodId);
Debug.Log($"[XJMH首屏] JoinGame 座位={item.position} ({item.userName}) 耗时 {swOne.ElapsedMilliseconds}ms");
// ⭐ 优先用后端 isBot 字段,兼容 userId.StartsWith("bot_")
var sit = list_Sits.Find(s => s.posID == item.position);
if (sit != null)
@@ -474,6 +484,9 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
// ⭐ 进入游戏圆圈:6 秒后自动消失(点击屏幕立即消失的逻辑在 HandleInput)
StartCoroutine(HideMySitAnimAfter(6f));
}
// 诊断:100% 这一下的总耗时(配合每条 JoinGame 的 ms 看是哪一步重)
Debug.Log($"[XJMH首屏] ApplyFirstShowInit 总耗时 {swAll.ElapsedMilliseconds}ms");
}
/// <summary>
@@ -540,7 +553,9 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
// (这一帧只扛"座位整层 OnEnable",把炮台骨架首建推到下一帧)
sit.deferDefaultTurretLightUp = true;
LoadingStallWatchdog.Phase = "预热·座位外壳激活帧";
var swSeat = System.Diagnostics.Stopwatch.StartNew();
sit.gameObject.SetActive(true);
Debug.Log($"[XJMH预热] 座位外壳激活 {swSeat.ElapsedMilliseconds}ms");
}
yield return null; // 座位外壳首帧
@@ -550,7 +565,9 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
if (willActivate && !sit.HasActiveXJMHTurret())
{
LoadingStallWatchdog.Phase = "预热·炮台骨架激活帧";
var swTurret = System.Diagnostics.Stopwatch.StartNew();
sit.ActivateDefaultXJMHTurretForPrewarm();
Debug.Log($"[XJMH预热] 炮台骨架激活 {swTurret.ElapsedMilliseconds}ms");
}
yield return null; // 炮台骨架首帧网格
@@ -623,17 +640,25 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
private static IEnumerator ChunkEnableParticles(List<GameObject> nodes)
{
const double budgetMs = 8.0;
var sw = System.Diagnostics.Stopwatch.StartNew();
var frameSw = System.Diagnostics.Stopwatch.StartNew(); // 帧内预算
var oneSw = System.Diagnostics.Stopwatch.StartNew(); // 单个粒子点亮耗时(诊断)
double enabledMs = 0;
int frames = 1;
for (int i = 0; i < nodes.Count; i++)
{
if (nodes[i] != null) nodes[i].SetActive(true);
if (sw.Elapsed.TotalMilliseconds >= budgetMs)
if (nodes[i] == null) continue;
oneSw.Restart();
nodes[i].SetActive(true);
enabledMs += oneSw.Elapsed.TotalMilliseconds;
if (frameSw.Elapsed.TotalMilliseconds >= budgetMs)
{
sw.Restart();
frameSw.Restart();
frames++;
yield return null;
}
}
yield return null;
Debug.Log($"[XJMH预热] 粒子分帧点亮 {nodes.Count} 个 / {frames} 帧 / 净耗时 {enabledMs:F0}ms(平均 {(nodes.Count > 0 ? enabledMs / nodes.Count : 0):F1}ms/个)");
}
/// <summary>
@@ -662,6 +687,49 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
}
}
/// <summary>
/// ⭐ 提前解析 XJMH 炮台/入场飞机的"骨架数据"(在鱼包加载段调用,与鱼包加载并行)。
/// 背景:SkeletonGraphic 首次激活时(Spine 源码 SkeletonGraphic.Initialize → GetSkeletonData)
/// 要解析 .skel/.json + 建图集对象 + 应用融合材质——这是首激活里最重的一块(几十~几百 ms),
/// 而且 GetSkeletonData 的结果按 SkeletonDataAsset 缓存。
/// 这里提前在主线程调用一次把它缓存掉:60% 处的"炮台骨架帧/飞机骨架帧"就只剩建网格/渲染器
/// 这类轻活(源码里 Initialize 其余部分只有 AnimationState/Skeleton 构造 + 网格缓冲分配)。
/// 放在鱼包段执行:本段主线程本来就在解包/反序列化(有加载卡顿),解析耗时混在这里最不显眼。
/// 解析用的是同一份缓存,同一把炮台预制体的所有实例(其它玩家座位)也一并受益。
/// </summary>
private void WarmUpXJMHSkeletonData()
{
if (!_pendingFirstShowInit || _pendingRoomJoinNotice == null) return;
if (list_Sits == null || list_Sits.Count == 0) return;
var sit = list_Sits.Find(s => s != null && s.posID == SeatMirror.ToDisplay(_pendingRoomJoinNotice.Position));
if (sit == null || sit.turretControlMode != TurretControlMode.XJMH) return;
var defaultTurret = GetDefaultXJMHTurret(sit);
if (defaultTurret == null) return;
var sw = System.Diagnostics.Stopwatch.StartNew();
int warmed = 0;
// 默认炮台子树(含挂在它下面的入场飞机实例)里的所有 SkeletonGraphic:逐个把骨架数据解析缓存掉
var graphs = defaultTurret.transform.GetComponentsInChildren<SkeletonGraphic>(true);
for (int i = 0; i < graphs.Length; i++)
{
var sg = graphs[i];
if (sg == null || sg.skeletonDataAsset == null) continue;
try
{
if (sg.skeletonDataAsset.GetSkeletonData(true) != null) warmed++;
}
catch (Exception e)
{
// 解析失败不影响流程:60% 激活时 SkeletonGraphic 会按正常路径自己再解析
Debug.LogWarning($"[XJMH预热] 骨架数据预解析失败(不影响流程): {e.Message}");
}
}
Debug.Log($"[XJMH预热] 骨架数据预解析:{warmed} 个 / 共 {sw.ElapsedMilliseconds}ms");
LoadingStallWatchdog.Phase = "30~60 鱼包"; // 恢复阶段名(诊断用)
}
private void RefreshGGKCount()
{
var user = GameManager.Instance.user;
@@ -1539,22 +1607,25 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
// 鱼包:30~60,内部子进度实时上报(预估进度兜底 LZMA 解压阻塞段,不再卡在 30)
LoadingStallWatchdog.Phase = "30~60 鱼包";
StartCreepProgress(0.30f, 0.60f);
await FishResourcesData.LoadFishAssetsData(p =>
var fishLoadTask = FishResourcesData.LoadFishAssetsData(p =>
{
if (flow == _resourceFlowToken) SetLoadProgress(Mathf.Max(_loadProgress, Mathf.Lerp(0.30f, 0.60f, p)));
});
// ⭐ 借鱼包加载这段(主线程本来就在解包/反序列化、有加载卡顿),先把 XJMH 炮台/飞机的
// "骨架数据解析"提前做掉并缓存(SkeletonGraphic 首激活里最重的一块,见方法注释):
// 60% 的炮台/飞机激活帧就只剩建网格/渲染器这类轻活,不再扛解析耗时
WarmUpXJMHSkeletonData();
await fishLoadTask;
if (flow != _resourceFlowToken) return;
// 玩法音频:60~78
LoadingStallWatchdog.Phase = "60~78 音频";
StartCreepProgress(0.60f, 0.78f);
// ⭐ XJMH 座位/飞机预热:把"首次实例化"的活提前到加载期做(这些活反正躲不掉,不做就会
// 堆到 100% 入座/入场动画那一帧卡——已确认注释掉它 100% 会卡一下)。
// 放在音频段起点:本段是真实加载耗时段(大量小包 IO,本来就有加载卡顿),混在里面的小帧不显眼。
// 重活已全部按帧拆开:座位外壳 1 帧 / 炮台骨架 1 帧 / 座位·炮台·飞机粒子逐帧点亮(每帧 8ms 预算)。
// 如果你更愿意"加载顺滑、接受 100% 卡一下",把下面这行注释回去即可。
PrewarmXJMHForLocalSeat();
// ⭐ XJMH 预热:方案已定——不在 60% 分帧做(每次 SetActive = 一次全 Canvas Rebuild,
// 分帧摊开总时长暴涨,实测 61% 卡好久好久)。改为 90% 确认点一次性完成
// (见下方"90 首屏初始化"),本处不再调用。骨架数据预解析仍在 30% 段(WarmUpXJMHSkeletonData)。
//PrewarmXJMHForLocalSeat();
await AudioResourcesData.LoadAudioGame(p =>
{
@@ -1617,9 +1688,20 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
AudioManager.Instance.ChangeBG(GameBgmAudioId);
// ⭐ 90% 确认点:走到这里所有资源加载都已完成(上面全是 await 顺序执行)
// (XJMH 座位/飞机预热已挪到 60% 音频段起点——这里是纯净的平滑收尾,不再有重活)
LoadingStallWatchdog.Phase = "90~100 收尾";
// ⭐ 首屏初始化(座位/炮台/入场飞机的全部"首次激活")在 90% 一次性完成:
// 进度条还开着 → 单帧大尖峰被加载页遮住 → 90~100 只剩平滑推进 →
// 100% 收掉进度条的瞬间画面完整出现、入场动画立即开播,不再"进游戏卡一下"。
// ⚠️ 不能分帧摊开:每次 SetActive 都会把整个大 Canvas 标脏 → 每帧一次全量
// Rebuild(Unity 官方:重建成本 ∝ Canvas 元素数)→ 总时长暴涨(61% 卡顿教训)
LoadingStallWatchdog.Phase = "90 首屏初始化(座位/炮台一次性)";
SetLoadProgress(0.9f);
if (_pendingFirstShowInit)
{
ApplyFirstShowInit();
// 入场飞机预热:刚激活的座位上 currentTurret 已就绪 → 一次性激活(缩0隐藏)→初始化→还原;
// 100% 入场动画再激活它 = 重启用,零成本。非 XJMH 的炮台不是 FlyTurretData,自动跳过
(currSitData?.currentTurret as FlyTurretData)?.PrewarmEnterPlane();
}
// ⭐ 90→100 平滑收尾:约 1 秒走完,进度条持续在动(替代原 2 秒死等;
// 保留这段缓冲是等出鱼首帧/场景渲染稳定,比原来快 1 秒+)
@@ -1636,9 +1718,9 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
else if (JinDuTiao != null)
JinDuTiao.Hide();
// ⭐ 加载到 100%(进度条已隐藏):标记完成 + 执行挂起的进房初始化(座位/房间信息)。
// 入场动画等表现由初始化链路在此之后触发——玩家可见、位置已就绪
LoadingStallWatchdog.Phase = "100 首屏初始化";
// ⭐ 加载到 100%(进度条已隐藏):标记完成。首屏初始化已在 90% 完成(见上);
// 这里只做兜底(正常流程标记已消费,不会重复执行)
LoadingStallWatchdog.Phase = "100 入场动画启动";
IsGameLoadCompleted = true;
if (_pendingFirstShowInit)
{
@@ -17606,7 +17606,7 @@ PrefabInstance:
- target: {fileID: 224349892793438657, guid: 6f077aa14d1a8e34687a3af5f0f1eae5,
type: 3}
propertyPath: m_SizeDelta.x
value: 6
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224349892793438657, guid: 6f077aa14d1a8e34687a3af5f0f1eae5,
type: 3}
@@ -17636,7 +17636,7 @@ PrefabInstance:
- target: {fileID: 224448299783411175, guid: 6f077aa14d1a8e34687a3af5f0f1eae5,
type: 3}
propertyPath: m_SizeDelta.x
value: 6
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224448299783411175, guid: 6f077aa14d1a8e34687a3af5f0f1eae5,
type: 3}
+33 -3
View File
@@ -193,11 +193,21 @@ PrefabInstance:
propertyPath: m_SortingLayer
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1417506109326689604, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1417506109326689604, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_SortingLayer
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1485328347163940881, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1485328347163940881, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_SortingLayer
@@ -248,6 +258,11 @@ PrefabInstance:
propertyPath: m_TargetTexture
value:
objectReference: {fileID: 8400000, guid: 1216f2131e32c3b4a90a456cad8b5833, type: 2}
- target: {fileID: 2011635074377795611, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2011635074377795611, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_SortingLayer
@@ -421,17 +436,17 @@ PrefabInstance:
- target: {fileID: 3745304765716925570, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_LocalScale.x
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3745304765716925570, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_LocalScale.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3745304765716925570, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_LocalScale.z
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3828036928016589604, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
@@ -558,6 +573,11 @@ PrefabInstance:
propertyPath: m_AnchoredPosition.y
value: 68.3
objectReference: {fileID: 0}
- target: {fileID: 4441870259444223699, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4441870259444223699, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_SortingLayer
@@ -613,6 +633,11 @@ PrefabInstance:
propertyPath: m_SortingLayer
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4631305018637868312, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4631305018637868312, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_SortingLayer
@@ -643,6 +668,11 @@ PrefabInstance:
propertyPath: m_SortingLayer
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4891912095876186530, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4911258892021538539, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_LocalScale.y
File diff suppressed because it is too large Load Diff
@@ -208,17 +208,38 @@ public class UIHome_BY_EmailPanel : SubUIBase
foreach (var prop in email.rewardItems)
{
if (prop == null) continue;
string url = ResolveItemImageUrl(prop);
list.Add(new BackPackPropItemData
{
giftType = 3,
url = APIManager.baseURL + prop.imageUrl,
url = string.IsNullOrEmpty(url) ? "" : APIManager.baseURL + url,
count = prop.count,
propEnum = (PropEnum)ResolveItemPropType(prop),
});
}
}
return list;
}
/// <summary>
/// 解析邮件道具图片相对地址:优先用后端下发的 imageUrl,
/// 未下发时按约定格式补全 /uploads/{编号}.png。
/// </summary>
private static string ResolveItemImageUrl(RewardItem prop)
{
if (prop == null) return "";
if (!string.IsNullOrEmpty(prop.imageUrl)) return prop.imageUrl;
return string.IsNullOrEmpty(prop.number) ? "" : $"/uploads/{prop.number}.png";
}
/// <summary>通过 number 在 propConfig 中查找道具类型(用于背景框)</summary>
private static int ResolveItemPropType(RewardItem prop)
{
if (prop == null || string.IsNullOrEmpty(prop.number)) return prop?.type ?? 0;
var match = GameManager.Instance?.gameConfig?.propConfig?.Find(p => p.number == prop.number);
return match?.type ?? prop.type;
}
protected override void OnShow(object args = null)
{
base.OnShow(args);
@@ -354,10 +375,15 @@ public class UIHome_BY_EmailPanel : SubUIBase
foreach (var prop in item.rewardItems)
{
GameObject obj = Instantiate(propPrefab, propPrefabParent);
WebTool.DownImage(APIManager.baseURL+ prop.imageUrl, (texture) =>
string itemUrl = ResolveItemImageUrl(prop);
if (!string.IsNullOrEmpty(itemUrl))
{
obj.transform.GetChild(0).GetComponent<Image>().sprite = Sprite.Create(texture,new Rect(0f,0f,texture.width,texture.height),Vector2.one*0.5f);
});
WebTool.DownImage(APIManager.baseURL + itemUrl, (texture) =>
{
if (obj == null) return;
obj.transform.GetChild(0).GetComponent<Image>().sprite = Sprite.Create(texture,new Rect(0f,0f,texture.width,texture.height),Vector2.one*0.5f);
});
}
obj.transform.GetChild(0).GetChild(0).GetComponent<TextMeshProUGUI>().text = prop.count.ToString();
if (item.isReward)
{