- Home /
Question by
kLip_7 · Apr 14, 2015 at 03:13 PM ·
c#pathfindingavoidance
need some help with basic pathfinding with obstacle avoidance
I have a simple project which includes pathfinding with obstacle avoidance. Now, I have void Steer
which steers the object around since the path is not straight. then I have void AvoidObstacles
which has raycast and the obstacle avoidance part basically.
Whenever the object steers, it calls the AvoidObstacles
function. The problem now is, at the start, whenever it hasn't call in the Steer
function yet, because it is a straigh line, it passes through the object not avoiding it.
Here are some of the codes used
public Vector3 Steer(Vector3 target, bool bFinalPoint = false)
{
//Calculate the directional vector from the current position towards the target point
Vector3 desiredVelocity = (target - transform.position);
float dist = desiredVelocity.magnitude;
AvoidObstacles(ref desiredVelocity);
//Normalise the desired Velocity
desiredVelocity.Normalize();
//Calculate the velocity according to the speed
if (bFinalPoint && dist < 10.0f)
desiredVelocity *= (curSpeed * (dist / 10.0f));
else
desiredVelocity *= curSpeed;
//Calculate the force Vector
Vector3 steeringForce = desiredVelocity - velocity;
Vector3 acceleration = steeringForce / mass;
return acceleration;
}
here is the other one
public void AvoidObstacles(ref Vector3 desiredVelocity)
{
RaycastHit hit;
Vector3 leftRay = transform.position;
Vector3 rightRay = transform.position;
//leftRay.x -= 2;
//rightRay.x += 2;
Debug.DrawLine(transform.position,(transform.forward * 5) + transform.position,Color.green);
if(Physics.Raycast(transform.position, transform.forward,out hit, minimumDistToAvoid))
{
Debug.DrawLine(transform.position,(transform.forward * 10) + transform.position,Color.red);
if(hit.transform != transform)
{
//dir += hit.normal * 50;
//Get the normal of the hit point to calculate the new direction
Vector3 hitNormal = hit.normal;
hitNormal.y = 0.0f; //Don't want to move in Y-Space
//Get the new directional vector by adding force to vehicle's current forward vector
desiredVelocity = transform.forward + hitNormal * force;
}
}
}
Maybe someone can help me out buy letting me know how can I call the AvoidObstacle
function outside of steer? Maybe in Update
or Start
perhaps. I can't really use other algorithms, just this one right here. TIA
Comment