diff --git a/Assets/_Game/Prefabs/Enemies/E001/ENM_CaoZhi.prefab b/Assets/_Game/Prefabs/Enemies/E001/ENM_CaoZhi.prefab index b15479df..e88ca626 100644 --- a/Assets/_Game/Prefabs/Enemies/E001/ENM_CaoZhi.prefab +++ b/Assets/_Game/Prefabs/Enemies/E001/ENM_CaoZhi.prefab @@ -344,7 +344,7 @@ MonoBehaviour: _ledgeCheckDownDist: 0.4 _wallMask: serializedVersion: 2 - m_Bits: 0 + m_Bits: 8388864 _dbg_FacingDirection: 0 _dbg_VelocityX: 0 _dbg_VelocityY: 0 diff --git a/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs b/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs index 30933ee7..f4ed8ead 100644 --- a/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs +++ b/Assets/_Game/Scripts/Editor/Scene/SceneObjectPlacerTool.cs @@ -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); diff --git a/Assets/_Game/Scripts/Editor/Tools/Physics2DLayerReport.cs b/Assets/_Game/Scripts/Editor/Tools/Physics2DLayerReport.cs index 721f794a..6ab94370 100644 --- a/Assets/_Game/Scripts/Editor/Tools/Physics2DLayerReport.cs +++ b/Assets/_Game/Scripts/Editor/Tools/Physics2DLayerReport.cs @@ -201,15 +201,16 @@ namespace BaseGames.Editor } /// - /// 通过 SerializedObject 修改 ProjectSettings/Physics2DSettings.asset 以持久化 Physics2D 层矩阵。 - /// Unity 在退出时也会自动保存,但显式调用可立即落盘。 + /// 立即把 Physics2D 层碰撞矩阵改动落盘到 ProjectSettings/Physics2DSettings.asset。 + /// 只改内存态,Unity 默认要等编辑器退出/进 Play/手动 + /// Save Project 才持久化。经实测:SaveToSerializedFileAndForget(单例) 不会捕获运行时 IgnoreLayerCollision + /// 的改动;Save Project 会(且不触动打开的场景)。故此处触发 Save Project 强制落盘。 /// 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 时保存)。"); } // ── 内部数据结构 ───────────────────────────────────────────────────── diff --git a/Assets/_Game/Scripts/Enemies/EnemyMovement.cs b/Assets/_Game/Scripts/Enemies/EnemyMovement.cs index d6125847..03d36d8e 100644 --- a/Assets/_Game/Scripts/Enemies/EnemyMovement.cs +++ b/Assets/_Game/Scripts/Enemies/EnemyMovement.cs @@ -58,7 +58,8 @@ namespace BaseGames.Enemies [SerializeField] private float _ledgeCheckFwdOffset = 0.1f; [Tooltip("悬崖检测:向下的射线长度;射线未命中地面则 IsLedgeAhead = true(0 = 禁用)")] [SerializeField] private float _ledgeCheckDownDist = 0.4f; - [Tooltip("墙体层 LayerMask;留空时复用地面 LayerMask")] + [Tooltip("墙体检测层(巡逻翻边/追击冲刺撞墙判定用,含碰撞体前缘)。策划可按怪配置;" + + "推荐默认 Platform + Wall。留空(Nothing)时回退复用地面层。")] [SerializeField] private LayerMask _wallMask; private Rigidbody2D _rb;