diff --git a/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs b/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs index ca3d11c4..ec2a8b6e 100644 --- a/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs +++ b/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs @@ -477,6 +477,7 @@ namespace BaseGames.Editor hurtCap.size = new Vector2(0.55f, 0.75f); AlignColliderBottomToPivot(hurtCap); // 底部对齐 y=0 HurtBox hurtBox = GetOrAddComponent(hurtBoxT.gameObject); + EnsureCollidersAreTriggers(hurtBoxT.gameObject); // 兜底:无论碰撞体类型都为 trigger Transform contactT = GetOrCreateChild(go.transform, "ContactDamageZone"); SetLayer(contactT.gameObject, "EnemyHitBox", report); @@ -487,6 +488,7 @@ namespace BaseGames.Editor HitBox contactHitBox = GetOrAddComponent(contactT.gameObject); BodyContactDamage bodyContact = GetOrAddComponent(contactT.gameObject); bodyContact.enabled = false; // 伪装/待机期不伤人;由 e001_chase 能力在追击期开启 + EnsureCollidersAreTriggers(contactT.gameObject); // 兜底:无论碰撞体类型都为 trigger // Model A:AI 只决策触发哪个能力(Idle/Patrol/Alert 已改为纯移动意图,由 EnemyLocomotion 执行,无需挂能力组件) Transform abilitiesT = GetOrCreateChild(go.transform, "Abilities"); @@ -2291,6 +2293,17 @@ namespace BaseGames.Editor go.layer = layer; } + /// + /// 把节点上所有 Collider2D 设为 trigger。HurtBox/HitBox/接触伤害语义要求碰撞体为 trigger; + /// 只对脚手架创建的具体类型(Capsule/Circle)设 isTrigger 不够——若碰撞体被手动换成别的类型 + /// (如 BoxCollider2D,默认 isTrigger=false),那条就漏掉。此助手对该节点全部碰撞体兜底设 trigger。 + /// + private static void EnsureCollidersAreTriggers(GameObject go) + { + foreach (var c in go.GetComponents()) + c.isTrigger = true; + } + private static void AssignReference(Object target, string propName, Object value, List report = null) { var so = new SerializedObject(target);