using UnityEngine; namespace BaseGames.Enemies { /// /// 敌人移动组件(架构 07_EnemyModule §3)。 /// Phase 1 实现:水平移动、面向目标、击退。 /// ⚠️ 使用 Rigidbody2D.velocity(Unity 2022 LTS)。 /// [RequireComponent(typeof(Rigidbody2D))] public class EnemyMovement : MonoBehaviour { [SerializeField] private EnemyStatsSO _config; private Rigidbody2D _rb; private int _facingDir = 1; public bool IsGrounded { get; private set; } private void Awake() { _rb = GetComponent(); } /// 按 SO 配置速度水平移动。dir: +1 右 / -1 左 / 0 停止。 public void MoveHorizontal(float dir) { if (_config == null) return; float speed = _config.WalkSpeed; _rb.velocity = new Vector2(dir * speed, _rb.velocity.y); UpdateFacing(dir); } /// 显式指定速度(BD 追击任务调用)。 public void MoveWithSpeed(float dir, float speed) { _rb.velocity = new Vector2(dir * speed, _rb.velocity.y); UpdateFacing(dir); } public void FaceTarget(Vector2 targetPos) { float dir = targetPos.x < transform.position.x ? -1f : 1f; UpdateFacing(dir); } public void ApplyKnockback(Vector2 dir, float force) { _rb.velocity = dir.normalized * force; } public void StopHorizontal() { _rb.velocity = new Vector2(0f, _rb.velocity.y); } private void UpdateFacing(float dir) { if (Mathf.Approximately(dir, 0f)) return; int newDir = dir > 0f ? 1 : -1; if (newDir == _facingDir) return; _facingDir = newDir; Vector3 s = transform.localScale; transform.localScale = new Vector3(Mathf.Abs(s.x) * newDir, s.y, s.z); } } }