using System.Collections; using UnityEngine; namespace BaseGames.Enemies.Boss { /// /// 嘲风漂浮控制器:负责 Phase 2 进入时上浮、击落时下落的平滑位移。 /// 使用 Rigidbody2D.MovePosition 做帧级 Lerp 插值,避免物理穿墙。 /// public class ChaoFengFloatController : MonoBehaviour { [SerializeField] private float _floatHeight = 5f; [SerializeField] private float _riseDuration = 1.5f; [SerializeField] private float _fallDuration = 0.8f; [SerializeField] private Rigidbody2D _rb; private float _groundY; private void Start() => _groundY = transform.position.y; /// 上浮至悬空高度(切换为 Kinematic 后执行)。 public IEnumerator FloatUp() { _rb.bodyType = RigidbodyType2D.Kinematic; _rb.velocity = Vector2.zero; yield return TweenY(transform.position.y, _groundY + _floatHeight, _riseDuration); } /// 下落回地面(落地后恢复 Dynamic)。 public IEnumerator FallDown() { yield return TweenY(transform.position.y, _groundY, _fallDuration); _rb.bodyType = RigidbodyType2D.Dynamic; } private IEnumerator TweenY(float from, float to, float duration) { for (float t = 0f; t < duration; t += Time.deltaTime) { _rb.MovePosition(new Vector2(transform.position.x, Mathf.Lerp(from, to, t / duration))); yield return null; } _rb.MovePosition(new Vector2(transform.position.x, to)); } } }