fix(enemy): 撞墙检测层默认 Platform+Wall(策划可配) + 修 Physics2D 层矩阵落盘

- EnemyMovement._wallMask:本就 [SerializeField] 暴露在 Inspector,补 Tooltip
  说明为策划可配的撞墙检测层(巡逻翻边/追击冲刺共用,按碰撞体前缘);脚手架
  PlaceE001 默认赋 Platform+Wall,prefab 同步。原先 Nothing→回退 groundMask,
  漏检 Wall 层墙;现显式含 Wall。回退逻辑保留作未配置兜底。
- Physics2DLayerReport.SavePhysicsSettings:原实现(AssetDatabase.SaveAssets+
  改 defaultContactOffset)不落盘层矩阵——实测 Physics2D.IgnoreLayerCollision 的
  改动 SaveToSerializedFileAndForget(单例) 也捕获不到;改用 File/Save Project
  (实测 hash 变化确认落盘,且不触动打开场景)。Auto Fix 的矩阵修正现能立即持久化。

(说明:Enemy×Player 碰撞矩阵与报告 ExpectedPairs 此前已正确=忽略,无需改动;
地图障碍物层管理/冲刺可穿透障碍另行整体规划。)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
This commit is contained in:
2026-07-20 10:32:07 +08:00
parent db55889088
commit 88fca8f9b0
4 changed files with 11 additions and 8 deletions
@@ -517,6 +517,7 @@ namespace BaseGames.Editor
AssignLayerMask(movement, "_groundMask",
new[] { "Platform", "OneWayPlatform", "MovingOneWayPlatform", "MidHeightOneWayPlatform" },
report);
AssignLayerMask(movement, "_wallMask", new[] { "Platform", "Wall" }, report); // 撞墙判定层(策划可调)
AssignAsset(chaseAbility, "_config", report, false, "ABL_E001_Chase");
AssignReference(chaseAbility, "_contactDamage", bodyContact, report);
@@ -201,15 +201,16 @@ namespace BaseGames.Editor
}
/// <summary>
/// 通过 SerializedObject 修改 ProjectSettings/Physics2DSettings.asset 以持久化 Physics2D 层矩阵
/// Unity 在退出时也会自动保存,但显式调用可立即落盘。
/// 立即把 Physics2D 层碰撞矩阵改动落盘到 ProjectSettings/Physics2DSettings.asset。
/// <see cref="Physics2D.IgnoreLayerCollision"/> 只改内存态,Unity 默认要等编辑器退出/进 Play/手动
/// Save Project 才持久化。经实测:SaveToSerializedFileAndForget(单例) 不会捕获运行时 IgnoreLayerCollision
/// 的改动;Save Project 会(且不触动打开的场景)。故此处触发 Save Project 强制落盘。
/// </summary>
private static void SavePhysicsSettings()
{
// Unity 内部会在下一次 AssetDatabase 刷新时持久化 Physics2D 设置
// 使用 Physics2DLayerMatrix 写入后刷新即可
AssetDatabase.SaveAssets();
Physics2D.defaultContactOffset = Physics2D.defaultContactOffset; // 强制标记 dirty
if (!EditorApplication.ExecuteMenuItem("File/Save Project"))
Debug.LogWarning("[Physics2DLayerReport] Save Project 执行失败,层矩阵改动未立即落盘" +
"Unity 仍会在退出/进 Play 时保存)。");
}
// ── 内部数据结构 ─────────────────────────────────────────────────────