Files
zeling_v2/Assets/_Game/Scripts/Enemies/Boss/ChaoFengFloatController.cs

47 lines
1.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections;
using UnityEngine;
namespace BaseGames.Enemies.Boss
{
/// <summary>
/// 嘲风漂浮控制器:负责 Phase 2 进入时上浮、击落时下落的平滑位移。
/// 使用 Rigidbody2D.MovePosition 做帧级 Lerp 插值,避免物理穿墙。
/// </summary>
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;
/// <summary>上浮至悬空高度(切换为 Kinematic 后执行)。</summary>
public IEnumerator FloatUp()
{
_rb.bodyType = RigidbodyType2D.Kinematic;
_rb.velocity = Vector2.zero;
yield return TweenY(transform.position.y, _groundY + _floatHeight, _riseDuration);
}
/// <summary>下落回地面(落地后恢复 Dynamic。</summary>
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));
}
}
}