Vector3 CollisionAvoidance()
    {
        //Vector3 offsetPosition;

        //for (int i = 0; i < collisionTesters.Count; i++)
        //{
        //    offsetPosition = collisionTesters[i].GetSteeringOffset();

        //    if (offsetPosition != Vector3.zero)
        //    {
        //        Vector3 desiredVelocity = (offsetPosition - transform.position).normalized * maxSpeed;
        //        return desiredVelocity - velocity;
        //    }
        //}

        TurningStatus turningStatus = collisionTester.DetectCollision();

        if (turningStatus == TurningStatus.CW)
        {
            return(transform.right * maxSpeed);
        }
        else if (turningStatus == TurningStatus.CCW)
        {
            return(-transform.right * maxSpeed);
        }
        else
        {
            return(transform.forward * maxSpeed);
        }
    }
Example #2
0
    public TurningStatus DetectCollision()
    {
        TurningStatus turningStatus = TurningStatus.None;

        RaycastHit centerHit;

        if (Physics.Raycast(centerLineTransform.position, centerLineTransform.forward, out centerHit, lineLength, collisionLayer))
        {
            centerLineRenderer.material = collisionMaterial;
        }
        else
        {
            centerLineRenderer.material = noCollisionMaterial;
        }

        RaycastHit leftHit;

        if (Physics.Raycast(leftLineTransform.position, leftLineTransform.forward, out leftHit, lineLength, collisionLayer))
        {
            leftLineRenderer.material = collisionMaterial;
        }
        else
        {
            leftLineRenderer.material = noCollisionMaterial;
        }

        RaycastHit rightHit;

        if (Physics.Raycast(rightLineTransform.position, rightLineTransform.forward, out rightHit, lineLength, collisionLayer))
        {
            rightLineRenderer.material = collisionMaterial;
        }
        else
        {
            rightLineRenderer.material = noCollisionMaterial;
        }

        if (leftHit.collider)
        {
            turningStatus = TurningStatus.CW;
        }
        else if (rightHit.collider)
        {
            turningStatus = TurningStatus.CCW;
        }
        else
        {
            turningStatus = TurningStatus.None;
        }

        return(turningStatus);
    }
 //turn right
 public void TurnRight()
 {
     currentTS = TurningStatus.TurnRight;
 }
 //turn maintain
 public void TurnMaitain()
 {
     currentTS = TurningStatus.Maintain;
 }
 //turn left
 public void TurnLeft()
 {
     currentTS = TurningStatus.TurnLeft;
 }
 //turn left
 public void TurnLeft()
 {
     currentTS = TurningStatus.TurnLeft;
 }
 //turn maintain
 public void TurnMaitain()
 {
     currentTS = TurningStatus.Maintain;
 }
 //turn right
 public void TurnRight()
 {
     currentTS = TurningStatus.TurnRight;
 }