From d09bc95c3f84899c000000a583625041d9c3b173 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Thu, 21 May 2026 11:08:14 +0800 Subject: [PATCH] Refactor event channels and update layer specifications - Removed StatusEffectEventChannelSO and its associated meta file. - Updated CreateEventChannelAssets to handle new shield-related events. - Added CharmModule for managing charm assets in the DataHub. - Introduced CharmEventChannelSO for charm equipped/unequipped events. - Changed layer references from "Ground" to "Platform" in various scripts. - Updated documentation to reflect changes in layer specifications. - Created new event assets for ShieldBroken, ShieldRestored, StatusEffectApplied, and StatusEffectExpired. --- .../Data/Events/Boss/EVT_StatusEffect.asset | 2 +- .../Data/Events/Combat/EVT_EnemyDied.asset | 2 +- .../Data/Events/Combat/EVT_ShieldBroken.asset | 15 + .../Events/Combat/EVT_ShieldBroken.asset.meta | 8 + .../Events/Combat/EVT_ShieldRestored.asset | 15 + .../Combat/EVT_ShieldRestored.asset.meta | 8 + .../Combat/EVT_StatusEffectApplied.asset | 15 + .../Combat/EVT_StatusEffectApplied.asset.meta | 8 + .../Combat/EVT_StatusEffectExpired.asset | 15 + .../Combat/EVT_StatusEffectExpired.asset.meta | 8 + .../Data/Events/Player/EVT_FormChanged.asset | 15 + .../Events/Player/EVT_FormChanged.asset.meta | 8 + .../Events/Player/EVT_SkillSetChanged.asset | 15 + .../Player/EVT_SkillSetChanged.asset.meta | 8 + .../Progression/EVT_CharmEquipped.asset | 4 +- .../Progression/EVT_CharmUnequipped.asset | 4 +- .../Progression/EVT_EquipmentChanged.asset | 15 + .../EVT_EquipmentChanged.asset.meta | 8 + Assets/_Game/Scenes/Testings/TestRoomA.unity | 706 ++++++++++++++++++ .../Core/Events/StatusEffectEventChannelSO.cs | 7 - .../Editor/Events/CreateEventChannelAssets.cs | 10 + .../_Game/Scripts/Editor/Hub/DataHubWindow.cs | 1 + .../Scripts/Editor/Modules/CharmModule.cs | 211 ++++++ .../Modules/CharmModule.cs.meta} | 2 +- .../Editor/Scene/SceneObjectPlacerTool.cs | 20 +- .../Editor/Scene/SceneScaffoldTools.cs | 4 +- .../Editor/Tools/Physics2DLayerReport.cs | 16 +- .../Scripts/Equipment/CharmEventChannelSO.cs | 11 + .../Equipment/CharmEventChannelSO.cs.meta | 11 + Assets/_Game/Scripts/Equipment/CharmSO.cs | 7 - .../Scripts/Player/PlayerWallDetector.cs | 6 +- Docs/Standards/LayerSpec.md | 18 +- 32 files changed, 1151 insertions(+), 52 deletions(-) create mode 100644 Assets/_Game/Data/Events/Combat/EVT_ShieldBroken.asset create mode 100644 Assets/_Game/Data/Events/Combat/EVT_ShieldBroken.asset.meta create mode 100644 Assets/_Game/Data/Events/Combat/EVT_ShieldRestored.asset create mode 100644 Assets/_Game/Data/Events/Combat/EVT_ShieldRestored.asset.meta create mode 100644 Assets/_Game/Data/Events/Combat/EVT_StatusEffectApplied.asset create mode 100644 Assets/_Game/Data/Events/Combat/EVT_StatusEffectApplied.asset.meta create mode 100644 Assets/_Game/Data/Events/Combat/EVT_StatusEffectExpired.asset create mode 100644 Assets/_Game/Data/Events/Combat/EVT_StatusEffectExpired.asset.meta create mode 100644 Assets/_Game/Data/Events/Player/EVT_FormChanged.asset create mode 100644 Assets/_Game/Data/Events/Player/EVT_FormChanged.asset.meta create mode 100644 Assets/_Game/Data/Events/Player/EVT_SkillSetChanged.asset create mode 100644 Assets/_Game/Data/Events/Player/EVT_SkillSetChanged.asset.meta create mode 100644 Assets/_Game/Data/Events/Progression/EVT_EquipmentChanged.asset create mode 100644 Assets/_Game/Data/Events/Progression/EVT_EquipmentChanged.asset.meta delete mode 100644 Assets/_Game/Scripts/Core/Events/StatusEffectEventChannelSO.cs create mode 100644 Assets/_Game/Scripts/Editor/Modules/CharmModule.cs rename Assets/_Game/Scripts/{Core/Events/StatusEffectEventChannelSO.cs.meta => Editor/Modules/CharmModule.cs.meta} (83%) create mode 100644 Assets/_Game/Scripts/Equipment/CharmEventChannelSO.cs create mode 100644 Assets/_Game/Scripts/Equipment/CharmEventChannelSO.cs.meta diff --git a/Assets/_Game/Data/Events/Boss/EVT_StatusEffect.asset b/Assets/_Game/Data/Events/Boss/EVT_StatusEffect.asset index 2db3bf7..aadcfab 100644 --- a/Assets/_Game/Data/Events/Boss/EVT_StatusEffect.asset +++ b/Assets/_Game/Data/Events/Boss/EVT_StatusEffect.asset @@ -9,7 +9,7 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 933f8f3ce17ee54409502057bd1a8138, type: 3} + m_Script: {fileID: 11500000, guid: e2aa7161466b28442acab31ae092166b, type: 3} m_Name: EVT_StatusEffect m_EditorClassIdentifier: description: diff --git a/Assets/_Game/Data/Events/Combat/EVT_EnemyDied.asset b/Assets/_Game/Data/Events/Combat/EVT_EnemyDied.asset index d39d2b8..e9957cb 100644 --- a/Assets/_Game/Data/Events/Combat/EVT_EnemyDied.asset +++ b/Assets/_Game/Data/Events/Combat/EVT_EnemyDied.asset @@ -9,7 +9,7 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Script: {fileID: 11500000, guid: 23dad55c2f7bcc54a92ed61cc6f27c5b, type: 3} m_Name: EVT_EnemyDied m_EditorClassIdentifier: description: diff --git a/Assets/_Game/Data/Events/Combat/EVT_ShieldBroken.asset b/Assets/_Game/Data/Events/Combat/EVT_ShieldBroken.asset new file mode 100644 index 0000000..8ae4eb4 --- /dev/null +++ b/Assets/_Game/Data/Events/Combat/EVT_ShieldBroken.asset @@ -0,0 +1,15 @@ +%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: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_ShieldBroken + m_EditorClassIdentifier: + description: diff --git a/Assets/_Game/Data/Events/Combat/EVT_ShieldBroken.asset.meta b/Assets/_Game/Data/Events/Combat/EVT_ShieldBroken.asset.meta new file mode 100644 index 0000000..c083815 --- /dev/null +++ b/Assets/_Game/Data/Events/Combat/EVT_ShieldBroken.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7a0c8af06b9f6cd43a91c5bebf16c02e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Data/Events/Combat/EVT_ShieldRestored.asset b/Assets/_Game/Data/Events/Combat/EVT_ShieldRestored.asset new file mode 100644 index 0000000..992278e --- /dev/null +++ b/Assets/_Game/Data/Events/Combat/EVT_ShieldRestored.asset @@ -0,0 +1,15 @@ +%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: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_ShieldRestored + m_EditorClassIdentifier: + description: diff --git a/Assets/_Game/Data/Events/Combat/EVT_ShieldRestored.asset.meta b/Assets/_Game/Data/Events/Combat/EVT_ShieldRestored.asset.meta new file mode 100644 index 0000000..a206faf --- /dev/null +++ b/Assets/_Game/Data/Events/Combat/EVT_ShieldRestored.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 06d4a7d44ce8bb0499aabf79ba7c556c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Data/Events/Combat/EVT_StatusEffectApplied.asset b/Assets/_Game/Data/Events/Combat/EVT_StatusEffectApplied.asset new file mode 100644 index 0000000..9dea9fc --- /dev/null +++ b/Assets/_Game/Data/Events/Combat/EVT_StatusEffectApplied.asset @@ -0,0 +1,15 @@ +%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: e2aa7161466b28442acab31ae092166b, type: 3} + m_Name: EVT_StatusEffectApplied + m_EditorClassIdentifier: + description: diff --git a/Assets/_Game/Data/Events/Combat/EVT_StatusEffectApplied.asset.meta b/Assets/_Game/Data/Events/Combat/EVT_StatusEffectApplied.asset.meta new file mode 100644 index 0000000..d57c716 --- /dev/null +++ b/Assets/_Game/Data/Events/Combat/EVT_StatusEffectApplied.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c997085e0266fa54b9fa0af69e233acf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Data/Events/Combat/EVT_StatusEffectExpired.asset b/Assets/_Game/Data/Events/Combat/EVT_StatusEffectExpired.asset new file mode 100644 index 0000000..04fd700 --- /dev/null +++ b/Assets/_Game/Data/Events/Combat/EVT_StatusEffectExpired.asset @@ -0,0 +1,15 @@ +%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: e2aa7161466b28442acab31ae092166b, type: 3} + m_Name: EVT_StatusEffectExpired + m_EditorClassIdentifier: + description: diff --git a/Assets/_Game/Data/Events/Combat/EVT_StatusEffectExpired.asset.meta b/Assets/_Game/Data/Events/Combat/EVT_StatusEffectExpired.asset.meta new file mode 100644 index 0000000..a4a169e --- /dev/null +++ b/Assets/_Game/Data/Events/Combat/EVT_StatusEffectExpired.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22c7ddc89ed054845951143148cd3671 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Data/Events/Player/EVT_FormChanged.asset b/Assets/_Game/Data/Events/Player/EVT_FormChanged.asset new file mode 100644 index 0000000..8d9d05f --- /dev/null +++ b/Assets/_Game/Data/Events/Player/EVT_FormChanged.asset @@ -0,0 +1,15 @@ +%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: ce6e33f4353535944a0d2573df0a08d4, type: 3} + m_Name: EVT_FormChanged + m_EditorClassIdentifier: + description: diff --git a/Assets/_Game/Data/Events/Player/EVT_FormChanged.asset.meta b/Assets/_Game/Data/Events/Player/EVT_FormChanged.asset.meta new file mode 100644 index 0000000..6f76f60 --- /dev/null +++ b/Assets/_Game/Data/Events/Player/EVT_FormChanged.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e1af94c61bb1c04ebc829f3838714f4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Data/Events/Player/EVT_SkillSetChanged.asset b/Assets/_Game/Data/Events/Player/EVT_SkillSetChanged.asset new file mode 100644 index 0000000..cbf2823 --- /dev/null +++ b/Assets/_Game/Data/Events/Player/EVT_SkillSetChanged.asset @@ -0,0 +1,15 @@ +%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: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_SkillSetChanged + m_EditorClassIdentifier: + description: diff --git a/Assets/_Game/Data/Events/Player/EVT_SkillSetChanged.asset.meta b/Assets/_Game/Data/Events/Player/EVT_SkillSetChanged.asset.meta new file mode 100644 index 0000000..1683424 --- /dev/null +++ b/Assets/_Game/Data/Events/Player/EVT_SkillSetChanged.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 249630b7ebe7a094299413cc67c4f3d1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Data/Events/Progression/EVT_CharmEquipped.asset b/Assets/_Game/Data/Events/Progression/EVT_CharmEquipped.asset index 27efab3..3087514 100644 --- a/Assets/_Game/Data/Events/Progression/EVT_CharmEquipped.asset +++ b/Assets/_Game/Data/Events/Progression/EVT_CharmEquipped.asset @@ -9,7 +9,7 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 0} + m_Script: {fileID: 11500000, guid: 2700003909ad60e4ba4b04d06f97805e, type: 3} m_Name: EVT_CharmEquipped - m_EditorClassIdentifier: BaseGames.Equipment:BaseGames.Equipment:CharmEventChannelSO + m_EditorClassIdentifier: description: diff --git a/Assets/_Game/Data/Events/Progression/EVT_CharmUnequipped.asset b/Assets/_Game/Data/Events/Progression/EVT_CharmUnequipped.asset index 8bd3bb8..b66debc 100644 --- a/Assets/_Game/Data/Events/Progression/EVT_CharmUnequipped.asset +++ b/Assets/_Game/Data/Events/Progression/EVT_CharmUnequipped.asset @@ -9,7 +9,7 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 0} + m_Script: {fileID: 11500000, guid: 2700003909ad60e4ba4b04d06f97805e, type: 3} m_Name: EVT_CharmUnequipped - m_EditorClassIdentifier: BaseGames.Equipment:BaseGames.Equipment:CharmEventChannelSO + m_EditorClassIdentifier: description: diff --git a/Assets/_Game/Data/Events/Progression/EVT_EquipmentChanged.asset b/Assets/_Game/Data/Events/Progression/EVT_EquipmentChanged.asset new file mode 100644 index 0000000..ac01502 --- /dev/null +++ b/Assets/_Game/Data/Events/Progression/EVT_EquipmentChanged.asset @@ -0,0 +1,15 @@ +%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: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_EquipmentChanged + m_EditorClassIdentifier: + description: diff --git a/Assets/_Game/Data/Events/Progression/EVT_EquipmentChanged.asset.meta b/Assets/_Game/Data/Events/Progression/EVT_EquipmentChanged.asset.meta new file mode 100644 index 0000000..f0ec9b4 --- /dev/null +++ b/Assets/_Game/Data/Events/Progression/EVT_EquipmentChanged.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 29e6d061ce1f5c84d97e7c922de612b5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Scenes/Testings/TestRoomA.unity b/Assets/_Game/Scenes/Testings/TestRoomA.unity index 527bd6a..bdc9d65 100644 --- a/Assets/_Game/Scenes/Testings/TestRoomA.unity +++ b/Assets/_Game/Scenes/Testings/TestRoomA.unity @@ -1683,6 +1683,37 @@ MonoBehaviour: _noiseFrequency: 1 _dedicatedCamera: {fileID: 1927356012} _dedicatedPriority: 20 +--- !u!1 &93002960 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 93002961} + m_Layer: 0 + m_Name: SkillHitBox_Slot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &93002961 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 93002960} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 810054649} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &97891550 GameObject: m_ObjectHideFlags: 0 @@ -9585,6 +9616,37 @@ Transform: m_Children: [] m_Father: {fileID: 975324245} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &499342000 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 499342001} + m_Layer: 0 + m_Name: '[WeaponSocket]' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &499342001 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 499342000} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 810054649} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &501567083 GameObject: m_ObjectHideFlags: 0 @@ -9959,6 +10021,37 @@ PolygonCollider2D: - {x: -4.5, y: 2.5} - {x: -9, y: 2.5} m_UseDelaunayMesh: 0 +--- !u!1 &515876610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 515876611} + m_Layer: 0 + m_Name: CameraFollowTarget + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &515876611 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515876610} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 810054649} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &522010460 GameObject: m_ObjectHideFlags: 0 @@ -14461,6 +14554,495 @@ Transform: - {fileID: 1652340852} m_Father: {fileID: 325293347} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &810054628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 810054649} + - component: {fileID: 810054648} + - component: {fileID: 810054647} + - component: {fileID: 810054646} + - component: {fileID: 810054645} + - component: {fileID: 810054644} + - component: {fileID: 810054643} + - component: {fileID: 810054642} + - component: {fileID: 810054641} + - component: {fileID: 810054640} + - component: {fileID: 810054639} + - component: {fileID: 810054638} + - component: {fileID: 810054637} + - component: {fileID: 810054636} + - component: {fileID: 810054635} + - component: {fileID: 810054634} + - component: {fileID: 810054633} + - component: {fileID: 810054632} + - component: {fileID: 810054631} + - component: {fileID: 810054630} + - component: {fileID: 810054629} + m_Layer: 9 + m_Name: Player + m_TagString: Player + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &810054629 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e20d2200567c4ca4d8fa1a047c7bbd58, type: 3} + m_Name: + m_EditorClassIdentifier: + _movementConfig: {fileID: 11400000, guid: aaeed7ed77ef4834ab211f378120f275, type: 2} + _animConfig: {fileID: 11400000, guid: 01fef0a964bfffd478226e04bbe3aeef, type: 2} + _inputReader: {fileID: 11400000, guid: 88fadef8bc554e04483edd7418d20aa2, type: 2} + _formConfig: {fileID: 11400000, guid: 8f33c49c9bd20ac47a6867f1f19f24a9, type: 2} + _combat: {fileID: 810054641} + _formController: {fileID: 810054640} + _weaponManager: {fileID: 810054639} + _skillManager: {fileID: 810054638} + _springSystem: {fileID: 810054637} + _parrySystem: {fileID: 810054636} + _hurtBox: {fileID: 2035363631} + _shield: {fileID: 810054635} + _wallDetector: {fileID: 810054634} + _onPlayerDied: {fileID: 11400000, guid: 7e1624bde83886d40b32f43e84a65a75, type: 2} + _onPlayerSpawned: {fileID: 11400000, guid: 7e2c7e614f6627b449a244ab44443adf, type: 2} + _debugValidateTransitions: 1 + _dbg_CurrentState: + _dbg_IsGrounded: 0 + _dbg_AirJumpsLeft: 0 + _dbg_CanDash: 0 + _dbg_IsInvincible: 0 +--- !u!114 &810054630 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 323fa3d8339022e4bbd37c12332f151a, type: 3} + m_Name: + m_EditorClassIdentifier: + _jumpBufferDuration: 0.15 + _attackBufferDuration: 0.12 + _dashBufferDuration: 0.1 + _dbg_JumpBuffer: 0 + _dbg_AttackBuffer: 0 + _dbg_DashBuffer: 0 +--- !u!114 &810054631 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 708938b7c3d75b244abcbd30ed589461, type: 3} + m_Name: + m_EditorClassIdentifier: + _onStatusEffectApplied: {fileID: 11400000, guid: c997085e0266fa54b9fa0af69e233acf, type: 2} + _onStatusEffectExpired: {fileID: 11400000, guid: 22c7ddc89ed054845951143148cd3671, type: 2} +--- !u!114 &810054632 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fab214bcdee30844bb3399c3b487cffa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &810054633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 04d451c14acfa56429344271570fa468, type: 3} + m_Name: + m_EditorClassIdentifier: + _config: {fileID: 11400000, guid: f167dd4c0f40ff7499127f917066994a, type: 2} + _charmCatalog: {fileID: 11400000, guid: 62b057558c311d649ba7d5d91633b544, type: 2} + _onCharmEquipped: {fileID: 11400000, guid: ee78daff0aae5d64786323b1924fa103, type: 2} + _onCharmUnequipped: {fileID: 11400000, guid: d0a080ccb93b4cb4e9a4cbe8e96a7007, type: 2} + _onEquipmentChanged: {fileID: 11400000, guid: 29e6d061ce1f5c84d97e7c922de612b5, type: 2} + _onAchievementNotchGranted: {fileID: 11400000, guid: 80a81891f339dce4096ac6ea88b3de84, type: 2} +--- !u!114 &810054634 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 03bafd68d1793e44f9650296d658a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + _config: {fileID: 11400000, guid: aaeed7ed77ef4834ab211f378120f275, type: 2} + _wallLayer: + serializedVersion: 2 + m_Bits: 8388608 +--- !u!114 &810054635 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f362045054d7c1945841c4ccbcb356e8, type: 3} + m_Name: + m_EditorClassIdentifier: + _config: {fileID: 11400000, guid: 3550acd79ad72c743942cbacb3c25c97, type: 2} + _onShieldBrokenChannel: {fileID: 11400000, guid: 7a0c8af06b9f6cd43a91c5bebf16c02e, type: 2} + _onShieldRestoredChannel: {fileID: 11400000, guid: 06d4a7d44ce8bb0499aabf79ba7c556c, type: 2} +--- !u!114 &810054636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 14872ec0b53eece49a121f13ca519009, type: 3} + m_Name: + m_EditorClassIdentifier: + _config: {fileID: 11400000, guid: f65119f9e65b51b4db2b17a0ae3d0fd3, type: 2} + _onParrySuccess: {fileID: 11400000, guid: 076c05f6f5c5cf6459a804ed2e61dc1b, type: 2} +--- !u!114 &810054637 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1f57bdff3327d2d478779d844b114c83, type: 3} + m_Name: + m_EditorClassIdentifier: + _stats: {fileID: 810054643} + _onEnemyDied: {fileID: 11400000, guid: def849e2c5ec8204eae6b083b02307aa, type: 2} +--- !u!114 &810054638 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb39b928827b10245aeab5ea41f862a5, type: 3} + m_Name: + m_EditorClassIdentifier: + _stats: {fileID: 810054643} + _animancer: {fileID: 810054645} + _input: {fileID: 11400000, guid: 88fadef8bc554e04483edd7418d20aa2, type: 2} + _formController: {fileID: 810054640} + _modifiers: {fileID: 810054632} + _skillSocket: {fileID: 93002961} + _formSkillSets: [] +--- !u!114 &810054639 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6620d87234b5a9b4c811905861cd32fd, type: 3} + m_Name: + m_EditorClassIdentifier: + _formController: {fileID: 810054640} + _startingWeapon: {fileID: 0} + _weaponSocket: {fileID: 499342001} +--- !u!114 &810054640 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cbcc6974256e3fb40879694b4bf2d2dc, type: 3} + m_Name: + m_EditorClassIdentifier: + _config: {fileID: 11400000, guid: 8f33c49c9bd20ac47a6867f1f19f24a9, type: 2} + _input: {fileID: 11400000, guid: 88fadef8bc554e04483edd7418d20aa2, type: 2} + _onFormChanged: {fileID: 11400000, guid: 9e1af94c61bb1c04ebc829f3838714f4, type: 2} + _onSkillSetChanged: {fileID: 11400000, guid: 249630b7ebe7a094299413cc67c4f3d1, type: 2} +--- !u!114 &810054641 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d978725c6a901c4da85041223e2b0ee, type: 3} + m_Name: + m_EditorClassIdentifier: + _weaponManager: {fileID: 810054639} +--- !u!114 &810054642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 263a07a0eb148924cbcf284def379a3f, type: 3} + m_Name: + m_EditorClassIdentifier: + _config: {fileID: 11400000, guid: aaeed7ed77ef4834ab211f378120f275, type: 2} + _groundCheck: {fileID: 1852300736} + _groundCheckSize: {x: 0.8, y: 0.05} + _groundLayer: + serializedVersion: 2 + m_Bits: 0 + _dbg_Position: + _dbg_VelocityX: 0 + _dbg_VelocityY: 0 + _dbg_IsGrounded: 0 + _dbg_HasCoyoteTime: 0 + _dbg_IsWallLeft: 0 + _dbg_IsWallRight: 0 + _dbg_CancelWindowOpen: 0 + _dbg_FacingDirection: 0 +--- !u!114 &810054643 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edd28a350d3cebe46a72e7550ffb1b93, type: 3} + m_Name: + m_EditorClassIdentifier: + _config: {fileID: 11400000, guid: eaaee0817c0cc9e449142241ad75827e, type: 2} + _onHPChanged: {fileID: 11400000, guid: b5a2264ba6cf6544ebc53a67b5074d89, type: 2} + _onMaxHPChanged: {fileID: 11400000, guid: 34f14924fad74884aac7b2bd6fbad649, type: 2} + _onSoulPowerChanged: {fileID: 11400000, guid: 3694bb359f4ba5f40a6cba067478578c, type: 2} + _onSpiritPowerChanged: {fileID: 11400000, guid: 0f20a330a4808d24e808e6978151dbc4, type: 2} + _onSpringChargesChanged: {fileID: 11400000, guid: bb26bdee697c4b64682cf30d02579ca4, type: 2} + _onLingZhuChanged: {fileID: 11400000, guid: c83ba0a4579d72c449930ee9c57318df, type: 2} + _onAbilityUnlocked: {fileID: 11400000, guid: a8b3a59db23ed8d48970b73c8c2e3092, type: 2} + _onDifficultyChanged: {fileID: 11400000, guid: 156874a2ffc17694e91e949abbf97fee, type: 2} + _dbg_HP: + _dbg_Soul: + _dbg_Spirit: + _dbg_Spring: + _dbg_IsInvincible: 0 + _dbg_InvincibleTimer: 0 + _dbg_GodMode: 0 + _dbg_Abilities: +--- !u!212 &810054644 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &810054645 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0ad50f81b1d25c441943c37a89ba23f6, type: 3} + m_Name: + m_EditorClassIdentifier: + _Animator: {fileID: 810054646} + _Transitions: {fileID: 0} + _ActionOnDisable: 0 +--- !u!95 &810054646 +Animator: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 0} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!61 &810054647 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0.5, y: 0.5} + oldSize: {x: 1, y: 1} + newSize: {x: 1, y: 1} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!50 &810054648 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 2 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_Interpolate: 1 + m_SleepingMode: 1 + m_CollisionDetection: 1 + m_Constraints: 4 +--- !u!4 &810054649 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810054628} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -23.547367, y: 3.988164, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2035363633} + - {fileID: 499342001} + - {fileID: 1852300736} + - {fileID: 93002961} + - {fileID: 515876611} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &811095057 GameObject: m_ObjectHideFlags: 0 @@ -29293,6 +29875,37 @@ Transform: m_Children: [] m_Father: {fileID: 2015266179} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1852300735 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1852300736} + m_Layer: 0 + m_Name: GroundCheck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1852300736 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1852300735} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.75, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 810054649} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1855767594 GameObject: m_ObjectHideFlags: 0 @@ -32466,6 +33079,98 @@ Transform: m_CorrespondingSourceObject: {fileID: 7501110767542530711, guid: e9d9216d17e7b684096c94e8c347d46f, type: 3} m_PrefabInstance: {fileID: 1627895894} m_PrefabAsset: {fileID: 0} +--- !u!1 &2035363630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2035363633} + - component: {fileID: 2035363632} + - component: {fileID: 2035363631} + m_Layer: 15 + m_Name: HurtBox + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2035363631 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2035363630} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7b7a233d7f70aa4f86b473412b826de, type: 3} + m_Name: + m_EditorClassIdentifier: + _onDamageDealt: {fileID: 0} + _onHitConfirmed: {fileID: 11400000, guid: a67d56f5124e0db4f98f326c74be8091, type: 2} +--- !u!61 &2035363632 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2035363630} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!4 &2035363633 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2035363630} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 810054649} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2043241451 GameObject: m_ObjectHideFlags: 0 @@ -34099,3 +34804,4 @@ SceneRoots: - {fileID: 1865796631} - {fileID: 1354690328} - {fileID: 783576435} + - {fileID: 810054649} diff --git a/Assets/_Game/Scripts/Core/Events/StatusEffectEventChannelSO.cs b/Assets/_Game/Scripts/Core/Events/StatusEffectEventChannelSO.cs deleted file mode 100644 index 9c1c4d0..0000000 --- a/Assets/_Game/Scripts/Core/Events/StatusEffectEventChannelSO.cs +++ /dev/null @@ -1,7 +0,0 @@ -using UnityEngine; - -namespace BaseGames.Core.Events -{ - [CreateAssetMenu(menuName = "BaseGames/Events/StatusEffect")] - public class StatusEffectEventChannelSO : BaseEventChannelSO { } -} diff --git a/Assets/_Game/Scripts/Editor/Events/CreateEventChannelAssets.cs b/Assets/_Game/Scripts/Editor/Events/CreateEventChannelAssets.cs index a8d39b7..e4b9c6e 100644 --- a/Assets/_Game/Scripts/Editor/Events/CreateEventChannelAssets.cs +++ b/Assets/_Game/Scripts/Editor/Events/CreateEventChannelAssets.cs @@ -2,6 +2,7 @@ using UnityEngine; using UnityEditor; using BaseGames.Core.Events; using BaseGames.Combat; +using BaseGames.Combat.StatusEffects; using BaseGames.Equipment; using BaseGames.Parry; using BaseGames.Player; @@ -54,6 +55,8 @@ namespace BaseGames.Editor CreateAsset ("Combat", "EVT_CheckpointRespawn"); CreateAsset ("Combat", "EVT_StatusEffectApplied"); CreateAsset ("Combat", "EVT_StatusEffectExpired"); + CreateAsset ("Combat", "EVT_ShieldBroken"); + CreateAsset ("Combat", "EVT_ShieldRestored"); // ── Boss ────────────────────────────────────────────────────────── CreateAsset ("Boss", "EVT_BossSkill"); @@ -180,6 +183,13 @@ namespace BaseGames.Editor return; } + // 存在但类型不匹配(如旧版残留),先删除再重建 + if (AssetDatabase.LoadMainAssetAtPath(fullPath) != null) + { + AssetDatabase.DeleteAsset(fullPath); + Debug.Log($"[CreateEventChannelAssets] 已删除旧类型资产: {fullPath}"); + } + T asset = ScriptableObject.CreateInstance(); AssetDatabase.CreateAsset(asset, fullPath); Debug.Log($"[CreateEventChannelAssets] 已创建: {fullPath}"); diff --git a/Assets/_Game/Scripts/Editor/Hub/DataHubWindow.cs b/Assets/_Game/Scripts/Editor/Hub/DataHubWindow.cs index a6d8aa9..7045fd9 100644 --- a/Assets/_Game/Scripts/Editor/Hub/DataHubWindow.cs +++ b/Assets/_Game/Scripts/Editor/Hub/DataHubWindow.cs @@ -75,6 +75,7 @@ namespace BaseGames.Editor _modules.Add(new EnemyModule()); _modules.Add(new FormModule()); _modules.Add(new BossSkillModule()); + _modules.Add(new CharmModule()); } // ── 布局 ───────────────────────────────────────────────────────────── diff --git a/Assets/_Game/Scripts/Editor/Modules/CharmModule.cs b/Assets/_Game/Scripts/Editor/Modules/CharmModule.cs new file mode 100644 index 0000000..4f45392 --- /dev/null +++ b/Assets/_Game/Scripts/Editor/Modules/CharmModule.cs @@ -0,0 +1,211 @@ +using System; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; +using BaseGames.Equipment; + +namespace BaseGames.Editor.Modules +{ + /// + /// DataHub 护符模块 —— Tab 切换管理 CharmCatalogSO(目录)和 CharmSO(护符)资产。 + /// + public class CharmModule : IDataModule + { + private const string CharmFolder = "Assets/_Game/Data/Progression/Charms"; + private const string CatalogPrefix = "CHM_Catalog"; + private const string CharmPrefix = "CHM_"; + + public string ModuleId => "charm"; + public string DisplayName => "护符"; + public string IconName => null; + + private int _activeTab = 0; // 0 = 目录, 1 = 护符 + + private SoListPane _catalogPane; + private SoListPane _charmPane; + private Action _onSelected; + + private DetailHeader _header; + private CharmCatalogSO _selectedCatalog; + private CharmSO _selectedCharm; + + public void Initialize() + { + _catalogPane = new SoListPane(CharmFolder, CatalogPrefix); + _catalogPane.SelectionChanged = s => { _selectedCatalog = s; _onSelected?.Invoke(s); }; + + _charmPane = new SoListPane(CharmFolder, CharmPrefix, + c => $"{c.notchCost}格"); + _charmPane.SelectionChanged = s => { _selectedCharm = s; _onSelected?.Invoke(s); }; + } + + public void BuildListPane(VisualElement container, Action onSelected) + { + _onSelected = onSelected; + container.style.flexDirection = FlexDirection.Column; + + // Tab bar + var tabBar = new VisualElement(); + tabBar.style.flexDirection = FlexDirection.Row; + tabBar.style.borderBottomWidth = 1; + tabBar.style.borderBottomColor = new StyleColor(new Color(0.5f, 0.5f, 0.5f, 0.3f)); + container.Add(tabBar); + + var btnCatalog = BuildTabBtn("目录", 0, tabBar); + var btnCharms = BuildTabBtn("护符", 1, tabBar); + + var listArea = new VisualElement(); + listArea.style.flexGrow = 1; + container.Add(listArea); + + var tabs = new[] { btnCatalog, btnCharms }; + ShowTab(0, listArea, tabs); + btnCatalog.clicked += () => ShowTab(0, listArea, tabs); + btnCharms.clicked += () => ShowTab(1, listArea, tabs); + + _catalogPane.Refresh(); + _charmPane.Refresh(); + } + + public void BuildDetailPane(VisualElement container, UnityEngine.Object selected) + { + _header = new DetailHeader(); + _header.SetAsset(selected); + _header.RenameRequested += name => OnRenameRequested(selected, name); + container.Add(_header); + + if (selected == null) return; + + if (selected is CharmCatalogSO catalog) + { + container.Add(BuildCatalogActionBar(catalog)); + container.Add(SkillModule.MakeDivider()); + container.Add(new InspectorElement(catalog)); + } + else if (selected is CharmSO charm) + { + container.Add(BuildCharmCard(charm)); + container.Add(BuildCharmActionBar(charm)); + container.Add(SkillModule.MakeDivider()); + container.Add(new InspectorElement(charm)); + } + } + + public void OnActivated() + { + _catalogPane?.Refresh(); + _charmPane?.Refresh(); + } + + // ── Tab UI ──────────────────────────────────────────────────────────── + + private Button BuildTabBtn(string text, int tabIdx, VisualElement bar) + { + var btn = new Button { text = text }; + btn.style.flexGrow = 1; + btn.style.paddingTop = 5; + btn.style.paddingBottom = 5; + btn.style.borderTopLeftRadius = 0; + btn.style.borderTopRightRadius = 0; + btn.style.borderBottomLeftRadius = 0; + btn.style.borderBottomRightRadius = 0; + btn.style.borderLeftWidth = 0; + btn.style.borderRightWidth = 0; + btn.style.borderTopWidth = 0; + btn.style.borderBottomWidth = 0; + btn.style.backgroundColor = new StyleColor(Color.clear); + btn.userData = tabIdx; + bar.Add(btn); + return btn; + } + + private void ShowTab(int tab, VisualElement area, Button[] tabBtns) + { + _activeTab = tab; + area.Clear(); + for (int i = 0; i < tabBtns.Length; i++) + { + if (i == tab) + { + tabBtns[i].style.borderBottomWidth = 2; + tabBtns[i].style.borderBottomColor = new StyleColor(new Color(0.4f, 0.65f, 1f, 1f)); + tabBtns[i].style.opacity = 1f; + } + else + { + tabBtns[i].style.borderBottomWidth = 0; + tabBtns[i].style.opacity = 0.65f; + } + } + if (tab == 0) { _catalogPane.style.flexGrow = 1; area.Add(_catalogPane); } + else { _charmPane.style.flexGrow = 1; area.Add(_charmPane); } + } + + // ── 重命名 ──────────────────────────────────────────────────────────── + + private void OnRenameRequested(UnityEngine.Object asset, string newName) + { + var (ok, err) = AssetOperations.Rename(asset, newName); + if (!ok) EditorUtility.DisplayDialog("重命名失败", err, "确定"); + else + { + _header.SetAsset(asset); + if (_activeTab == 0) _catalogPane.Invalidate(); + else _charmPane.Invalidate(); + } + } + + // ── CharmCatalogSO 详情 ─────────────────────────────────────────────── + + private VisualElement BuildCatalogActionBar(CharmCatalogSO catalog) + { + var bar = SkillModule.MakeActionBar(); + new Button(() => { EditorGUIUtility.PingObject(catalog); Selection.activeObject = catalog; }) + { text = "定位" }.AlsoAddTo(bar); + return bar; + } + + // ── CharmSO 详情 ────────────────────────────────────────────────────── + + private static VisualElement BuildCharmCard(CharmSO c) + { + var card = SkillModule.MakeCard(); + SkillModule.AddChip(card, "ID", string.IsNullOrEmpty(c.charmId) ? "-" : c.charmId); + SkillModule.AddChip(card, "格数", $"{c.notchCost}"); + SkillModule.AddChip(card, "效果数", $"{c.effects?.Count ?? 0}"); + if (c.isUnique) + SkillModule.AddChip(card, "限定", "唯一"); + return card; + } + + private VisualElement BuildCharmActionBar(CharmSO charm) + { + var bar = SkillModule.MakeActionBar(); + new Button(() => { EditorGUIUtility.PingObject(charm); Selection.activeObject = charm; }) + { text = "定位" }.AlsoAddTo(bar); + new Button(() => { var c = AssetOperations.Clone(charm, CharmFolder); if (c != null) _charmPane.Refresh(c); }) + { text = "克隆..." }.AlsoAddTo(bar); + var del = new Button(() => { if (AssetOperations.Delete(charm)) _charmPane.Refresh(null); }) { text = "删除" }; + ApplyDeleteStyle(del); + del.AlsoAddTo(bar); + return bar; + } + + // ── 共用 ───────────────────────────────────────────────────────────── + + private static void ApplyDeleteStyle(Button btn) + { + var c = new StyleColor(new Color(0.8f, 0.3f, 0.3f, 0.6f)); + btn.style.borderLeftColor = c; + btn.style.borderRightColor = c; + btn.style.borderTopColor = c; + btn.style.borderBottomColor = c; + btn.style.borderLeftWidth = 1; + btn.style.borderRightWidth = 1; + btn.style.borderTopWidth = 1; + btn.style.borderBottomWidth = 1; + btn.style.marginLeft = 8; + } + } +} diff --git a/Assets/_Game/Scripts/Core/Events/StatusEffectEventChannelSO.cs.meta b/Assets/_Game/Scripts/Editor/Modules/CharmModule.cs.meta similarity index 83% rename from Assets/_Game/Scripts/Core/Events/StatusEffectEventChannelSO.cs.meta rename to Assets/_Game/Scripts/Editor/Modules/CharmModule.cs.meta index 38b9b7a..bf4d3ed 100644 --- a/Assets/_Game/Scripts/Core/Events/StatusEffectEventChannelSO.cs.meta +++ b/Assets/_Game/Scripts/Editor/Modules/CharmModule.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 933f8f3ce17ee54409502057bd1a8138 +guid: e5ccd6c2a03bdd144b0a6351e2b90803 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs b/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs index 5d7d9cd..9533174 100644 --- a/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs +++ b/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs @@ -95,7 +95,7 @@ namespace BaseGames.Editor Transform groundCheckT = GetOrCreateChild(root.transform, "GroundCheck"); groundCheckT.localPosition = new Vector3(0f, -0.75f, 0f); AssignReference(playerMovement, "_groundCheck", groundCheckT, report); - AssignLayerMask(playerMovement, "_groundLayer", "Ground", report); + AssignLayerMask(playerMovement, "_groundLayer", "Platform", report); // ── SkillHitBox_Slot 子节点(技能 HitBox 实例化挂点)──────────────── Transform skillSocketT = GetOrCreateChild(root.transform, "SkillHitBox_Slot"); @@ -129,11 +129,11 @@ namespace BaseGames.Editor AssignReference(skillManager, "_modifiers", GetOrAddComponent(root), report); AssignReference(skillManager, "_skillSocket", skillSocketT, report); - // PlayerWallDetector 墙壁检测层(Wall + Ground 组合) + // PlayerWallDetector 墙壁检测层(Wall + Platform 组合) { int wallMask = 0; int wallL = LayerMask.NameToLayer("Wall"); - int groundL = LayerMask.NameToLayer("Ground"); + int groundL = LayerMask.NameToLayer("Platform"); if (wallL != -1) wallMask |= 1 << wallL; if (groundL != -1) wallMask |= 1 << groundL; if (wallMask != 0) @@ -143,7 +143,7 @@ namespace BaseGames.Editor if (wsp != null) { wsp.intValue = wallMask; wso.ApplyModifiedPropertiesWithoutUndo(); } } else - report.Add("★ Layer 'Wall'/'Ground' 不存在,PlayerWallDetector._wallLayer 未赋值。"); + report.Add("★ Layer 'Wall'/'Platform' 不存在,PlayerWallDetector._wallLayer 未赋值。"); } // ── 事件频道(可选,缺失时跳过) ─────────────────────────────────── @@ -169,6 +169,8 @@ namespace BaseGames.Editor AssignAsset(equipmentManager, "_onAchievementNotchGranted", report, false, "EVT_AchievementNotchGranted"); AssignAsset(statusEffectManager, "_onStatusEffectApplied", report, false, "EVT_StatusEffectApplied"); AssignAsset(statusEffectManager, "_onStatusEffectExpired", report, false, "EVT_StatusEffectExpired"); + AssignAsset(shield, "_onShieldBrokenChannel", report, false, "EVT_ShieldBroken"); + AssignAsset(shield, "_onShieldRestoredChannel", report, false, "EVT_ShieldRestored"); // ── Config SO 自动查找(资产存在时自动绑定)────────────────────── Object statsConfig = FindFirstAsset("PLY_PlayerStats"); @@ -178,7 +180,7 @@ namespace BaseGames.Editor Object shieldConfig = FindFirstAsset("PLY_ShieldConfig"); Object inputReader = FindFirstAsset("InputReader"); Object equipmentConfig = FindFirstAsset("PLY_EquipmentConfig"); - Object charmCatalog = FindFirstAsset("PLY_CharmCatalog"); + Object charmCatalog = FindFirstAsset("CHM_Catalog"); Object animConfig = FindFirstAsset("PLY_PlayerAnimationConfig"); if (statsConfig != null) AssignReference(playerStats, "_config", statsConfig, report); @@ -752,7 +754,7 @@ namespace BaseGames.Editor GameObject go = new GameObject("GroundPlatform"); Undo.RegisterCreatedObjectUndo(go, "Place Ground Platform"); go.transform.position = GetDropPosition(); - SetLayer(go, "Ground", report); + SetLayer(go, "Platform", report); // 2D Sprite:用 localScale 设定尺寸,让 SpriteRenderer 和 BoxCollider2D 同步缩放 go.transform.localScale = new Vector3(8f, 0.5f, 1f); @@ -774,7 +776,7 @@ namespace BaseGames.Editor GameObject go = new GameObject("MovingPlatform"); Undo.RegisterCreatedObjectUndo(go, "Place Moving Platform"); go.transform.position = GetDropPosition(); - SetLayer(go, "Ground", report); + SetLayer(go, "Platform", report); Rigidbody2D rb = GetOrAddComponent(go); rb.bodyType = RigidbodyType2D.Kinematic; @@ -820,7 +822,7 @@ namespace BaseGames.Editor GetOrAddComponent(gridGo); GameObject groundGo = GetOrCreateChild(gridGo.transform, "Ground").gameObject; - SetLayer(groundGo, "Ground", report); + SetLayer(groundGo, "Platform", report); GetOrAddComponent(groundGo); GetOrAddComponent(groundGo); TilemapCollider2D tilemapCollider = GetOrAddComponent(groundGo); @@ -859,7 +861,7 @@ namespace BaseGames.Editor GameObject go = new GameObject("Obstacle"); Undo.RegisterCreatedObjectUndo(go, "Place Obstacle"); go.transform.position = GetDropPosition(); - SetLayer(go, "Ground", report); + SetLayer(go, "Platform", report); // 2D Sprite:用 localScale 设定尺寸,让 SpriteRenderer 和 BoxCollider2D 同步缩放 go.transform.localScale = new Vector3(1f, 1f, 1f); diff --git a/Assets/_Game/Scripts/Editor/Scene/SceneScaffoldTools.cs b/Assets/_Game/Scripts/Editor/Scene/SceneScaffoldTools.cs index 198bf10..28bbdcb 100644 --- a/Assets/_Game/Scripts/Editor/Scene/SceneScaffoldTools.cs +++ b/Assets/_Game/Scripts/Editor/Scene/SceneScaffoldTools.cs @@ -352,9 +352,9 @@ namespace BaseGames.Editor GetOrAddComponent(gridGo); GameObject groundTileGo = GetOrCreateChild(gridGo.transform, "Ground").gameObject; - int groundLayer = LayerMask.NameToLayer("Ground"); + int groundLayer = LayerMask.NameToLayer("Platform"); if (groundLayer >= 0) groundTileGo.layer = groundLayer; - else report.Add("Layer 'Ground' 不存在,请在 Tags and Layers 中创建。"); + else report.Add("Layer 'Platform' 不存在,请在 Tags and Layers 中创建。"); GetOrAddComponent(groundTileGo); GetOrAddComponent(groundTileGo); diff --git a/Assets/_Game/Scripts/Editor/Tools/Physics2DLayerReport.cs b/Assets/_Game/Scripts/Editor/Tools/Physics2DLayerReport.cs index 5f35e52..aebb1ec 100644 --- a/Assets/_Game/Scripts/Editor/Tools/Physics2DLayerReport.cs +++ b/Assets/_Game/Scripts/Editor/Tools/Physics2DLayerReport.cs @@ -14,14 +14,14 @@ namespace BaseGames.Editor /// · PlayerHitBox ↔ EnemyHurtBox → 应碰撞(玩家攻击伤害敌人) /// · EnemyHitBox ↔ PlayerHurtBox → 应碰撞(敌人攻击伤害玩家) /// · EnemyHitBox ↔ EnemyHurtBox → 应碰撞(敌人可互相伤害,HitBox 运行时排除自身根节点) - /// · Player ↔ Ground → 应碰撞(玩家站在地面上) - /// · Enemy ↔ Ground → 应碰撞(敌人站在地面上) + /// · Player ↔ Platform → 应碰撞(玩家站在平台上) + /// · Enemy ↔ Platform → 应碰撞(敌人站在平台上) /// · PlayerProjectile ↔ EnemyHurtBox → 应碰撞(玩家投射物伤害敌人) /// · PlayerProjectile ↔ PlayerHurtBox → 应忽略(玩家投射物不自伤) - /// · PlayerProjectile ↔ Ground → 应碰撞(玩家投射物命中地形) + /// · PlayerProjectile ↔ Platform → 应碰撞(玩家投射物命中地形) /// · EnemyProjectile ↔ PlayerHurtBox → 应碰撞(敌人投射物伤害玩家) /// · EnemyProjectile ↔ EnemyHurtBox → 应忽略(敌人投射物不自伤) - /// · EnemyProjectile ↔ Ground → 应碰撞(敌人投射物命中地形) + /// · EnemyProjectile ↔ Platform → 应碰撞(敌人投射物命中地形) /// · PlayerHitBox ↔ PlayerHurtBox → 应忽略(玩家不自伤) /// · PlayerProjectile ↔ EnemyProjectile → 应忽略(子弹不互相碰撞,Clash 系统单独处理) /// · HazardHitBox ↔ PlayerHurtBox → 应碰撞(环境危险伤害玩家) @@ -37,14 +37,14 @@ namespace BaseGames.Editor new("PlayerHitBox", "EnemyHurtBox", true, "玩家攻击伤害敌人"), new("EnemyHitBox", "PlayerHurtBox", true, "敌人攻击伤害玩家"), new("EnemyHitBox", "EnemyHurtBox", true, "敌人可互相伤害(HitBox 运行时排除自身根节点)"), - new("Player", "Ground", true, "玩家站在地面上"), - new("Enemy", "Ground", true, "敌人站在地面上"), + new("Player", "Platform", true, "玩家站在平台上"), + new("Enemy", "Platform", true, "敌人站在平台上"), new("PlayerProjectile", "EnemyHurtBox", true, "玩家投射物伤害敌人"), new("PlayerProjectile", "PlayerHurtBox", false, "玩家投射物不自伤"), - new("PlayerProjectile", "Ground", true, "玩家投射物命中地形"), + new("PlayerProjectile", "Platform", true, "玩家投射物命中地形"), new("EnemyProjectile", "PlayerHurtBox", true, "敌人投射物伤害玩家"), new("EnemyProjectile", "EnemyHurtBox", false, "敌人投射物不自伤"), - new("EnemyProjectile", "Ground", true, "敌人投射物命中地形"), + new("EnemyProjectile", "Platform", true, "敌人投射物命中地形"), new("PlayerHitBox", "PlayerHurtBox", false, "玩家不自伤"), new("PlayerProjectile", "EnemyProjectile", false, "子弹不互相碰撞(Clash 系统单独处理)"), new("HazardHitBox", "PlayerHurtBox", true, "环境危险伤害玩家"), diff --git a/Assets/_Game/Scripts/Equipment/CharmEventChannelSO.cs b/Assets/_Game/Scripts/Equipment/CharmEventChannelSO.cs new file mode 100644 index 0000000..08403d8 --- /dev/null +++ b/Assets/_Game/Scripts/Equipment/CharmEventChannelSO.cs @@ -0,0 +1,11 @@ +using UnityEngine; +using BaseGames.Core.Events; + +namespace BaseGames.Equipment +{ + /// + /// 护符事件频道(EVT_CharmEquipped / EVT_CharmUnequipped)。 + /// + [CreateAssetMenu(menuName = "BaseGames/Events/CharmEvent")] + public class CharmEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/_Game/Scripts/Equipment/CharmEventChannelSO.cs.meta b/Assets/_Game/Scripts/Equipment/CharmEventChannelSO.cs.meta new file mode 100644 index 0000000..f93cf72 --- /dev/null +++ b/Assets/_Game/Scripts/Equipment/CharmEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2700003909ad60e4ba4b04d06f97805e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Scripts/Equipment/CharmSO.cs b/Assets/_Game/Scripts/Equipment/CharmSO.cs index f8bd8fd..2a6cbf6 100644 --- a/Assets/_Game/Scripts/Equipment/CharmSO.cs +++ b/Assets/_Game/Scripts/Equipment/CharmSO.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using UnityEngine; -using BaseGames.Core.Events; namespace BaseGames.Equipment { @@ -33,10 +32,4 @@ namespace BaseGames.Equipment public bool isUnique; public string unlockHint; } - - /// - /// 护符事件频道(EVT_CharmEquipped / EVT_CharmUnequipped)。 - /// - [CreateAssetMenu(menuName = "BaseGames/Events/CharmEvent")] - public class CharmEventChannelSO : BaseEventChannelSO { } } diff --git a/Assets/_Game/Scripts/Player/PlayerWallDetector.cs b/Assets/_Game/Scripts/Player/PlayerWallDetector.cs index c7c8557..6acd090 100644 --- a/Assets/_Game/Scripts/Player/PlayerWallDetector.cs +++ b/Assets/_Game/Scripts/Player/PlayerWallDetector.cs @@ -13,7 +13,7 @@ namespace BaseGames.Player { [SerializeField] private PlayerMovementConfigSO _config; - [Header("墙壁 Layer(默认使用 \"Wall\" + \"Ground\")")] + [Header("墙壁 Layer(默认使用 \"Wall\" + \"Platform\")")] [SerializeField] private LayerMask _wallLayer; /// 当前是否正在触碰墙壁。 @@ -69,7 +69,7 @@ namespace BaseGames.Player private bool CheckPhysicalContact(int direction) { if (_rb == null) return false; - LayerMask mask = _wallLayer != 0 ? _wallLayer : LayerMask.GetMask("Wall", "Ground"); + LayerMask mask = _wallLayer != 0 ? _wallLayer : LayerMask.GetMask("Wall", "Platform"); var filter = new ContactFilter2D(); filter.SetLayerMask(mask); filter.useTriggers = false; @@ -94,7 +94,7 @@ namespace BaseGames.Player Vector2 center = transform.position; float len = _config.WallRayLength; float oy = _config.WallRayOffsetY; - int layer = _wallLayer != 0 ? (int)_wallLayer : LayerMask.GetMask("Wall", "Ground"); + int layer = _wallLayer != 0 ? (int)_wallLayer : LayerMask.GetMask("Wall", "Platform"); bool top = Physics2D.Raycast(center + Vector2.up * oy, dir, len, layer); bool bot = Physics2D.Raycast(center + Vector2.down * oy, dir, len, layer); diff --git a/Docs/Standards/LayerSpec.md b/Docs/Standards/LayerSpec.md index 27609e5..d09e147 100644 --- a/Docs/Standards/LayerSpec.md +++ b/Docs/Standards/LayerSpec.md @@ -34,23 +34,23 @@ | `Player` | 玩家根节点 GameObject | 玩家物理碰撞体(含 Rigidbody2D);地面检测、存档点、检查点触发器通过此 Layer 筛选玩家 | | `PlayerHurtBox` | 玩家子节点 `HurtBox` | 接收伤害的碰撞体(isTrigger);`EnemyHitBox` / `EnemyProjectile` 命中此 Layer 时对玩家造成伤害 | | `PlayerHitBox` | 玩家武器 / 技能 HitBox | 发出伤害的碰撞体;命中 `EnemyHurtBox` 时触发对敌人的伤害判定 | -| `PlayerProjectile` | 玩家发射的投射物 | 玩家子弹;不与 `PlayerHurtBox`、`EnemyProjectile` 碰撞,命中 `EnemyHurtBox` 或 `Ground` 时有效 | +| `PlayerProjectile` | 玩家发射的投射物 | 玩家子弹;不与 `PlayerHurtBox`、`EnemyProjectile` 碰撞,命中 `EnemyHurtBox` 或 `Platform` 时有效 | ### 2.2 敌人相关 | Layer 名称 | 挂载对象 | 用途说明 | |---|---|---| -| `Enemy` | 敌人根节点 GameObject | 敌人物理碰撞体(含 Rigidbody2D);与 `Ground` 碰撞实现站立 | +| `Enemy` | 敌人根节点 GameObject | 敌人物理碰撞体(含 Rigidbody2D);与 `Platform` 碰撞实现站立 | | `EnemyHurtBox` | 敌人子节点 `HurtBox` | 接收伤害的碰撞体(isTrigger);`PlayerHitBox` / `PlayerProjectile` 命中此 Layer 时对敌人造成伤害;`EnemyHitBox` 也可命中此 Layer(敌人互伤,HitBox 运行时排除自身根节点) | | `EnemyHitBox` | 敌人武器 HitBox / `LethalTrap` 主体 | 发出伤害的碰撞体;命中 `PlayerHurtBox` 时触发对玩家的伤害判定 | -| `EnemyProjectile` | 敌人发射的投射物 | 敌人子弹;不与 `EnemyHurtBox` 碰撞,命中 `PlayerHurtBox` 或 `Ground` 时有效 | +| `EnemyProjectile` | 敌人发射的投射物 | 敌人子弹;不与 `EnemyHurtBox` 碰撞,命中 `PlayerHurtBox` 或 `Platform` 时有效 | ### 2.3 地形相关 | Layer 名称 | 挂载对象 | 用途说明 | |---|---|---| -| `Ground` | 静态地面、移动平台、Tilemap 地形、障碍物 | 玩家与敌人站立的实体地面;`PlayerMovement` 的 `_groundLayer`、`PlayerWallDetector` 的 `_wallLayer`(默认)均包含此 Layer;投射物命中后销毁 | -| `Wall` | 墙壁碰撞体(垂直面) | 玩家攀墙检测(`PlayerWallDetector` 默认掩码包含 `Wall` 和 `Ground`);若地形使用统一的 Tilemap 则墙壁可合并到 `Ground` Layer | +| `Platform` | 静态地面、移动平台、Tilemap 地形、障碍物 | 玩家与敌人站立的实体平台;`PlayerMovement` 的 `_groundLayer`、`PlayerWallDetector` 的 `_wallLayer`(默认)均包含此 Layer;投射物命中后销毁 | +| `Wall` | 墙壁碰撞体(垂直面) | 玩家攀墙检测(`PlayerWallDetector` 默认掩码包含 `Wall` 和 `Platform`);若地形使用统一的 Tilemap 则墙壁可合并到 `Platform` Layer | ### 2.4 触发区域 @@ -81,14 +81,14 @@ | `PlayerHitBox` | `EnemyHurtBox` | ✅ | 玩家攻击伤害敌人 | | `EnemyHitBox` | `PlayerHurtBox` | ✅ | 敌人攻击伤害玩家 | | `EnemyHitBox` | `EnemyHurtBox` | ✅ | 敌人可互相伤害(HitBox 运行时排除自身根节点) | -| `Player` | `Ground` | ✅ | 玩家站在地面上 | -| `Enemy` | `Ground` | ✅ | 敌人站在地面上 | +| `Player` | `Platform` | ✅ | 玩家站在平台上 | +| `Enemy` | `Platform` | ✅ | 敌人站在平台上 | | `PlayerProjectile` | `EnemyHurtBox` | ✅ | 玩家投射物伤害敌人 | | `PlayerProjectile` | `PlayerHurtBox` | ❌ | 玩家投射物不自伤 | -| `PlayerProjectile` | `Ground` | ✅ | 玩家投射物命中地形 | +| `PlayerProjectile` | `Platform` | ✅ | 玩家投射物命中地形 | | `EnemyProjectile` | `PlayerHurtBox` | ✅ | 敌人投射物伤害玩家 | | `EnemyProjectile` | `EnemyHurtBox` | ❌ | 敌人投射物不自伤 | -| `EnemyProjectile` | `Ground` | ✅ | 敌人投射物命中地形 | +| `EnemyProjectile` | `Platform` | ✅ | 敌人投射物命中地形 | | `PlayerHitBox` | `PlayerHurtBox` | ❌ | 玩家不自伤 | | `PlayerProjectile` | `EnemyProjectile` | ❌ | 子弹不互相碰撞(Clash 系统单独处理) | | `HazardHitBox` | `PlayerHurtBox` | ✅ | 环境危险伤害玩家 |