你好,我试图使用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);
}
}
}
我在这里卡住了,因为我不明白为什么最后一个点会向主体倾斜,而不是像其他线一样被拉伸。
评论 (0)