// Update is called once per frame void OnDrawGizmos() { List<Quaternion> rotList = new List<Quaternion> (); for (int i = 0; i < bPoints.Count; i++) { BezierPt b = bPoints [i]; rotList.Add (b.transform.rotation); } List<Vector3> nodes = new List<Vector3> (); for (int i = 0; i < bPoints.Count-1; i++) { BezierPt start = bPoints [i]; BezierPt end = bPoints [i + 1]; nodes.Add (start.transform.position); nodes.Add (end.inTrans.position); nodes.Add (start.outTrans.position); nodes.Add (end.transform.position); } path = new BezierPath (nodes.ToArray (), rotList.ToArray ()); // draw float delta = 1.0f / split; Gizmos.color = drawColor; for (int i = 0; i < split-1; i++) { float t0 = delta * i; float t1 = delta * (i + 1); Vector3 pos0 = this.GetPointAt (t0); Vector3 pos1 = this.GetPointAt (t1); Gizmos.DrawLine (pos0, pos1); } for (int i = 0; i < split; i++) { // float v = (float)i / split; float v = delta * i; BezierPointInfo pInfo = path.GetBezierPointInfo(v); Vector3 pt = pInfo.point; Gizmos.color = drawColor; Gizmos.DrawWireSphere (pt, 0.25f); // tangent Gizmos.color = Color.blue; Vector3 tangent = pInfo.tangent; Gizmos.DrawRay (pt, tangent); Quaternion quat = pInfo.rotation; Gizmos.color = Color.green; Gizmos.DrawRay (pt, quat* Vector3.up); Gizmos.color = Color.red; Gizmos.DrawRay (pt, quat* Vector3.right); } }