- 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