你好,我试图使用Bezier曲线模拟一个轨道路径,但为什么最后一个点总是向主体倾斜,而不是像其他线一样被拉伸,我有点卡住了,能否请教一下呢?

以下是我的代码:

using UnityEngine;

public class Planet : MonoBehaviour
{
    Rigidbody rb;

    public Rigidbody GetRigidbody => rb;

    [SerializeField]
    float velocity;

    [SerializeField, Min(2)]
    int segments = 50;

    [SerializeField, Min(1)]
    float bezierLength;

    LineRenderer line;

    private void Start()
    {
        PlanetManager.singleton.planets.Add(this);

        rb = GetComponent<Rigidbody>();

        line = GetComponent<LineRenderer>();

        rb.linearVelocity = transform.forward * velocity;
    }

    private void Update()
    {
        DrawTrajectory();
    }

    private void FixedUpdate()
    {
        Vector3 target = MouseHelpers.MousePosition(transform);

        Vector3 direction = target - transform.position;

        rb.MoveRotation(Quaternion.LookRotation(direction));
    }

    private void DrawTrajectory()
    {
        line.positionCount = segments;

        Vector3 p0 = transform.position;

        float starDistance = Vector3.Distance(p0, PlanetManager.singleton.GetSun.transform.position);

        Vector3 towardSun = (PlanetManager.singleton.GetSun.transform.position - p0).normalized;

        Vector3 pull = towardSun * (PlanetManager.singleton.GetSun.GetRigidbody.mass / starDistance) * bezierLength;

        Vector3 p1 = p0 + transform.forward.normalized * (bezierLength * 0.33f);

        Vector3 p2 = p0 + transform.forward.normalized * (bezierLength * 0.66f) + pull;

        Vector3 p3 = p0 + transform.forward.normalized * bezierLength + pull;

        for (int i = 0; i < segments; i++)
        {
            float t = i / (float)(segments - 1);

            float u = 1f - t;

            Vector3 point = u * u * u * p0 + 3f * u * u * t * p1 + 3f * u * t * t * p2 + t * t * t * p3;

            line.SetPosition(i, point);
        }
    }
}

我在这里卡住了,因为我不明白为什么最后一个点会向主体倾斜,而不是像其他线一样被拉伸。