- Home /
 
 
               Question by 
               groovyMyserioso · Oct 15, 2013 at 08:35 PM · 
                transform.vector3.slerp  
              
 
              Steering to avoid objects, problem with Raycasts
I've a script that makes raycasts to see which rough angle has the greatest distance in front of us. It's making the car spin around and I imagine it has to do with me not understanding local vs global transforms. :/ Anyways here it is:
Vector3 SteerThing(){
 RaycastHit hitInfo;
 float i = 0;    
 Vector3 nextVector;
 float dist= Mathf.Infinity;
 Vector3 returnDirection= Vector3.zero;
 for(i=0 ; i<7; i++)
     {
         nextVector=        Vector3.Lerp(transform.TransformDirection(Vector3.right),transform.TransformDirection(Vector3.left),i);
         Physics.Raycast(
         transform.position,
         nextVector,
         out hitInfo,
         Mathf.Infinity,
         myLayerMask);
         if(hitInfo.distance<dist)
         {
             dist=hitInfo.distance;
             returnDirection =nextVector;
             Debug.DrawRay(transform.position,nextVector*50);
         
         }
     }
 return returnDirection;
 
               }
               Comment
              
 
               
              Answer by groovyMyserioso · Oct 16, 2013 at 07:24 PM
 Vector3 SteerThing(){
     
 RaycastHit hitInfo;
 int i = 0;    
 int res =5;
 Vector3 nextVector;
 float dist= 0f;
 Vector3 returnDirection= Vector3.zero;
     distancesList.Clear ();
     distDict.Clear ();
     
 for(i=0 ; i<res; i++)
     {
         nextVector=    Vector3.Lerp (-transform.right,transform.forward,(float)i/res);
         Physics.SphereCast(transform.position,.3f,    nextVector,    out hitInfo,Mathf.Infinity,    myLayerMask);
         Debug.DrawRay(transform.position,nextVector*5);
         
         distances[i]=hitInfo.distance;
         distDict[hitInfo.distance]=nextVector;
         
     }for(i=0 ; i<res; i++)
     {
         nextVector=    Vector3.Lerp (transform.forward,transform.right,(float)i/res);
         Physics.SphereCast(transform.position,.3f,    nextVector,    out hitInfo,Mathf.Infinity,    myLayerMask);
         Debug.DrawRay(transform.position,nextVector*5);
         
         distances[i+res]=hitInfo.distance;
         distDict[hitInfo.distance]=nextVector;
         
                 
     }
 
             var list= distDict.Keys.ToList ();
         list.Sort ();
         returnDirection=distDict[list.Last()];// list.Last().Key;
         //Debug.Log (distDict[list.Last()]+" "+distDict[list.First()]);
         //    returnDirection=Vector3.Lerp (-transform.right,transform.right,(float)discancesList/res)+transform.forward;
         
 return returnDirection;
 }
 
              Your answer
 
             Follow this Question
Related Questions
My character isn't moving 0 Answers
Check if transform is in trigger 1 Answer
2D Shooting right only. Doesn't flip direction with character 1 Answer
Monster AI chase and collider 0 Answers
How to instantiate gameobject as a child without scaling 1 Answer