Last active
September 9, 2015 15:52
-
-
Save SLIB53/8b550ef3fdfa74499d14 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
[ExecuteInEditMode] | |
public class BezierTension : MonoBehaviour | |
{ | |
#region Pretend you never saw this | |
public Transform Initial; | |
public Transform Mid; | |
public Transform End; | |
[Range(0F, 1F)] | |
public float t; | |
[Range(0F, 1F)] | |
public float Tension; | |
public Transform TestObj; | |
private Vector3 StartPoint { get { return Initial.position; } } | |
private Vector3 MidPoint { get { return Mid.position; } } | |
private Vector3 EndPoint { get { return End.position; } } | |
private void Update() | |
{ | |
TestObj.position = | |
QuadraticBezier(StartPoint, MidPoint, EndPoint, t, Tension); | |
for (float tense = 0F; tense <= 1F; tense += 0.09F) | |
{ | |
float innerTension = tense * Tension; | |
const int numVertices = 50; | |
for (int i = 0; i < numVertices; i++) | |
{ | |
var vertsStart = (float)i / numVertices; | |
var vertsEnd = (float)(i + 1) / numVertices; | |
Debug.DrawLine( | |
QuadraticBezier(StartPoint, MidPoint, EndPoint, vertsStart, innerTension), | |
QuadraticBezier(StartPoint, MidPoint, EndPoint, vertsEnd, innerTension), | |
Color.red); | |
Debug.DrawLine( | |
QuadraticBezier(StartPoint, MidPoint, EndPoint, vertsStart, 0F), | |
QuadraticBezier(StartPoint, MidPoint, EndPoint, vertsStart, innerTension), | |
Color.blue); | |
} | |
} | |
} | |
#endregion | |
public static Vector3 QuadraticBezier( | |
Vector3 startPoint, | |
Vector3 midPoint, | |
Vector3 endPoint, | |
float t, | |
float tension) | |
{ | |
//// Calc Bezier | |
var a = Vector3.Lerp(startPoint, midPoint, t); | |
var b = Vector3.Lerp(midPoint, endPoint, t); | |
var normalBezierResult = Vector3.Lerp(a, b, t); | |
var finalTension = (-Mathf.Pow(2 * t - 1, 2F) + 1) * (0.85F * tension); | |
var tenseBezierResult = Vector3.Lerp(normalBezierResult, midPoint, finalTension); | |
return tenseBezierResult; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment