Skip to content

Instantly share code, notes, and snippets.

@NuarkNoir
Created July 14, 2018 06:38
Show Gist options
  • Save NuarkNoir/6aa965fb811d08e1c6a5b81cd450e672 to your computer and use it in GitHub Desktop.
Save NuarkNoir/6aa965fb811d08e1c6a5b81cd450e672 to your computer and use it in GitHub Desktop.
Draw Bezier curve between two transforms/objects in Unity3D
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bezier : MonoBehaviour {
public Transform firstObject;
public Transform secondObject;
Vector2 P0;
public Vector2 P1;
public Vector2 P2;
Vector2 P3;
public LineRenderer drawer;
public Vector2 Evaluate(float t)
{
float t1 = 1 - t;
return t1 * t1 * t1 * P0 + 3 * t * t1 * t1 * P1 +
3 * t * t * t1 * P2 + t * t * t * P3;
}
public void Render()
{
P0 = new Vector2(firstObject.position.x, firstObject.position.y);
P3 = new Vector2(secondObject.position.x, secondObject.position.y);
drawer = gameObject.GetComponent<LineRenderer>();
if (!drawer) {
gameObject.AddComponent<LineRenderer>();
drawer = gameObject.GetComponent<LineRenderer>();
}
drawer.positionCount = 0;
for (int i = 1; i < 50; i++)
{
float t = (i - 1f) / 49f;
float t1 = i / 49f;
var v = Evaluate(t);
var v1 = Evaluate(t1);
drawer.SetPosition(drawer.positionCount++, v);
drawer.SetPosition(drawer.positionCount++, v1);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment