我正在使用下面的代碼創建 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 回答
- 0 關注
- 198 瀏覽
添加回答
舉報
0/150
提交
取消