为了账号安全,请及时绑定邮箱和手机立即绑定

如何在使用自定义编辑器移动一条贝塞尔曲线时更新一条贝塞尔曲线

如何在使用自定义编辑器移动一条贝塞尔曲线时更新一条贝塞尔曲线

C#
斯蒂芬大帝 2021-06-23 15:16:25
我正在使用下面的代码创建 Bézier 曲线,该代码是从 这里获得的。我还制作了一个BezierPair游戏对象,它有两条贝塞尔曲线作为子对象。从下面的相应图像和 BezierPair,其中points[0]...points[3]表示为P0... P3:我希望P0每条贝塞尔曲线在移动时始终保持不变。换句话说,我希望它们始终一起移动,并可以选择关闭此移动。说P1两条曲线是分开的。我怎样才能使P1每条曲线在相同的方向上移动,覆盖相同的距离?说P2两条曲线是分开的。如何沿连接和的线制作另 P2一条曲线的一个曲线镜像?请注意,镜像线将取自以下示例中的曲线 1,因为's已移动。如果's被移动,那么镜像线将从's 中取出。P2P0P3curve1P2curve2P2curve2P0P3我不想在运行时这样做。所以必须使用自定义编辑器。我尝试在下面的代码中解决 1. 但如果没有我在层次结构窗口中选择 BezierPair,第二条曲线的位置就不会更新贝塞尔:public static class Bezier {public static Vector3 GetPoint (Vector3 p0, Vector3 p1, Vector3 p2,   Vector3 p3, float t) {t = Mathf.Clamp01(t);float oneMinusT = 1f - t;return    oneMinusT * oneMinusT * oneMinusT * p0 +    3f * oneMinusT * oneMinusT * t * p1 +    3f * oneMinusT * t * t * p2 +    t * t * t * p3;}public static Vector3 GetFirstDerivative (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) {t = Mathf.Clamp01(t);float oneMinusT = 1f - t;return    3f * oneMinusT * oneMinusT * (p1 - p0) +    6f * oneMinusT * t * (p2 - p1) +    3f * t * t * (p3 - p2);}}贝塞尔曲线:[RequireComponent(typeof(LineRenderer))]public class BezierCurve : MonoBehaviour {public Vector3[] points;LineRenderer lr;public int numPoints = 49;bool controlPointsChanged = false;bool isMoving = false;public void Reset () {points = new Vector3[] {    new Vector3(1f, 0f, 0f),    new Vector3(2f, 0f, 0f),    new Vector3(3f, 0f, 0f),    new Vector3(4f, 0f, 0f)};}void Start()    {lr = GetComponent<LineRenderer> ();lr.positionCount = 0;DrawBezierCurve ();}public Vector3 GetPoint (float t) {return transform.TransformPoint(Bezier.GetPoint(points[0], points[1], points[2], points[3], t));}public void DrawBezierCurve ()  {lr = GetComponent<LineRenderer> ();lr.positionCount = 1;lr.SetPosition(0, points[0]);for (int i = 1; i < numPoints+1; i++) {    float t = i / (float)numPoints;    lr.positionCount = i+1;    lr.SetPosition(i, GetPoint(t));}}
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信