How do i create Tangents on a spline??
Hello i tried to implement Tangents on to a spline and Display them in the Scene View, but as inexperience i am in programming i couldn't do it, as you can see in Pic1 this is what i am trying to achieve.
Does anyone know how to do this?
-Pic1 
Here is the Spline code.
  using UnityEngine;
  using System.Collections.Generic;
  
  public class Spline : MonoBehaviour {
  
      public List<Transform> controlPointsList = new List<Transform>();
  
      public bool isLooping = true;
  
      void OnDrawGizmos()
      {
          for (int i = 0; i < controlPointsList.Count; i++)
          {
              //Cant draw between the endpoints
              //Neither do we need to draw from the second to the last endpoint
              //...if we are not making a looping line
              if ((i == 0 || i == controlPointsList.Count - 2 || i == controlPointsList.Count - 1) && !isLooping)
              {
                  continue;
              }
  
              DisplayCatmullRomSpline(i);
          }
          Gizmos.color = Color.white;
  
          //Draw a sphere at each control point
          for (int i = 0; i < controlPointsList.Count; i++)
          {
              Gizmos.DrawWireSphere(controlPointsList[i].position, 0.3f);
          }
      }
      Vector3 ReturnCatmullRom(float t, Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3)
      {
          Vector3 a = 0.5f * (2f * p1);
          Vector3 b = 0.5f * (p2 - p0);
          Vector3 c = 0.5f * (2f * p0 - 5f * p1 + 4f * p2 - p3);
          Vector3 d = 0.5f * (-p0 + 3f * p1 - 3f * p2 + p3);
  
          Vector3 pos = a + (b * t) + (c * t * t) + (d * t * t * t);
  
          return pos;
      }
  
  void DisplayCatmullRomSpline(int pos)
  {
      //Clamp to allow looping
      Vector3 p0 = controlPointsList[ClampListPos(pos - 1)].position;
      Vector3 p1 = controlPointsList[pos].position;
      Vector3 p2 = controlPointsList[ClampListPos(pos + 1)].position;
      Vector3 p3 = controlPointsList[ClampListPos(pos + 2)].position;
  
  
      //Just assign a tmp value to this
      Vector3 lastPos = Vector3.zero;
  
      //t is always between 0 and 1 and determines the resolution of the spline
      //0 is always at p1
      for (float t = 0; t < 1; t += 0.1f)
      {
          //Find the coordinates between the control points with a Catmull-Rom spline
          Vector3 newPos = ReturnCatmullRom(t, p0, p1, p2, p3);
  
          //Cant display anything the first iteration
          if (t == 0)
          {
              lastPos = newPos;
              continue;
          }
  
          Gizmos.DrawLine(lastPos, newPos);
          lastPos = newPos;
      }
  
      //Also draw the last line since it is always less than 1, so we will always miss it
      Gizmos.DrawLine(lastPos, p2);
  }
  
  
  //Clamp the list positions to allow looping
  //start over again when reaching the end or beginning
  int ClampListPos(int pos)
  {
      if (pos < 0)
      {
          pos = controlPointsList.Count - 1;
      }
  
      if (pos > controlPointsList.Count)
      {
          pos = 1;
      }
      else if (pos > controlPointsList.Count - 1)
      {
          pos = 0;
      }
  
      return pos;
  }
  }
@Bunny83 i tried to Implement the Tangent's with your advice but i couldn't fit the puzzles.
 
                 
                catmullromtangents.png 
                (19.9 kB) 
               
 
              
               Comment
              
 
               
              Your answer
 
 
             Follow this Question
Related Questions
How do i have game object in the middle of a Catmull spline? 0 Answers
How do i calculate mesh on a spline?? 0 Answers
I'm having a few issues with (Catmull)Splines that i need help with. 1 Answer
Character move speed not working 1 Answer
How do I optimize my code?,How do I optimize my script? 1 Answer
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                