void EvaluateObstacleInFront() { Vector3 position = transform.position; Vector3 forward = transform.forward; BoxCastDrawer.DrawBoxCastBox(new Vector3(position.x, 0, position.z) + forward * 2, new Vector3(2, 1, 1), transform.rotation, forward, distanceRayCast, Color.blue); if (Physics.BoxCast(new Vector3(position.x, 0, position.z) + forward * 2, new Vector3(2, 1, 1), forward, out RaycastHit hitInfo, transform.rotation, distanceRayCast, layerMaskRayCast)) { Vector3 targetDir = hitInfo.transform.position - position; Vector2 force; if (Vector3.Cross(targetDir, forward).z < 0) { force = new Vector2(-forward.z, forward.x).normalized * 5.0f; } else { force = new Vector2(forward.z, -forward.x).normalized * 5.0f; } movementVector += force; Debug.DrawLine(position + Vector3.up, position + Vector3.up + new Vector3(force.x, 0, force.y)); } }
// quick little method to create and draw a boxcast private RaycastHit2D BoxCast(Vector2 origin, Vector2 size, float angle, Vector2 direction, float distance, int layerMask) { // creates the raycast RaycastHit2D boxCast = Physics2D.BoxCast(origin, size, angle, direction, distance, layerMask); // draws the raycast BoxCastDrawer.Draw(boxCast, origin, size, angle, direction, distance); return(boxCast); }