@
fix(scaffold): 兜底把 HurtBox/接触伤害节点所有碰撞体设为 trigger 脚手架原本只对自己创建的具体类型(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) <noreply@anthropic.com> @
This commit is contained in:
@@ -477,6 +477,7 @@ namespace BaseGames.Editor
|
||||
hurtCap.size = new Vector2(0.55f, 0.75f);
|
||||
AlignColliderBottomToPivot(hurtCap); // 底部对齐 y=0
|
||||
HurtBox hurtBox = GetOrAddComponent<HurtBox>(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<HitBox>(contactT.gameObject);
|
||||
BodyContactDamage bodyContact = GetOrAddComponent<BodyContactDamage>(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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 把节点上所有 Collider2D 设为 trigger。HurtBox/HitBox/接触伤害语义要求碰撞体为 trigger;
|
||||
/// 只对脚手架创建的具体类型(Capsule/Circle)设 isTrigger 不够——若碰撞体被手动换成别的类型
|
||||
/// (如 BoxCollider2D,默认 isTrigger=false),那条就漏掉。此助手对该节点全部碰撞体兜底设 trigger。
|
||||
/// </summary>
|
||||
private static void EnsureCollidersAreTriggers(GameObject go)
|
||||
{
|
||||
foreach (var c in go.GetComponents<Collider2D>())
|
||||
c.isTrigger = true;
|
||||
}
|
||||
|
||||
private static void AssignReference(Object target, string propName, Object value, List<string> report = null)
|
||||
{
|
||||
var so = new SerializedObject(target);
|
||||
|
||||
Reference in New Issue
Block a user