From b8360ec42648e67d30dd52e5f196f78c302f42d7 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Mon, 20 Jul 2026 14:50:00 +0800 Subject: [PATCH] =?UTF-8?q?@=20fix(scaffold):=20=E5=85=9C=E5=BA=95?= =?UTF-8?q?=E6=8A=8A=20HurtBox/=E6=8E=A5=E8=A7=A6=E4=BC=A4=E5=AE=B3?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=89=80=E6=9C=89=E7=A2=B0=E6=92=9E=E4=BD=93?= =?UTF-8?q?=E8=AE=BE=E4=B8=BA=20trigger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 脚手架原本只对自己创建的具体类型(Capsule/Circle)设 isTrigger=true;若碰撞体被 手动换成别的类型(如 BoxCollider2D,默认 isTrigger=false),那条就漏掉——E001 的 HurtBox/ContactDamageZone 被换成 Box 后 isTrigger 掉回 false,导致受击/接触伤害 的 trigger 判定失效。 新增 EnsureCollidersAreTriggers 助手,对节点全部 Collider2D 兜底设 trigger; PlaceE001 的 HurtBox 与 ContactDamageZone 建好后调用。 Co-Authored-By: Claude Opus 4.8 (1M context) @ --- .../Scripts/Editor/Scene/SceneObjectPlacerTool.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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);