public static RayCollisionPoint GetCollision(Ray ray, PlaneCollision plane, out float scale1, out float scale2) { try { // transformation matrix 2 Vector3 eq = VectorMathHelper.SolveLinearEquation(-ray.Direction, plane.SpanVector1, plane.SpanVector2, ray.Position - plane.Origin); // point of collision Vector3 poc = ray.Position + eq.X * ray.Direction; scale1 = eq.Y; scale2 = eq.Z; return(new RayCollisionPoint(poc, plane.Normal, eq.X)); } catch (Exception ex) { // equation could not be solved or an error occured. //Console.WriteLine($"Unable to collide ray with plane."); scale1 = 0.0f; scale2 = 0.0f; return(new RayCollisionPoint()); } }
public static Boolean GetCollision(SphereCollision collidableA, PlaneCollision collidableB, out Vector3 position, out Vector3 normal, out float scale1, out float scale2) { Vector3 eq = VectorMathHelper.SolveLinearEquation(collidableB.Normal / collidableB.Normal.Length(), collidableB.SpanVector1, collidableB.SpanVector2, collidableA.Position - collidableB.Origin); // get the point of collision position = collidableB.Origin + eq.Y * collidableB.SpanVector1 + eq.Z * collidableB.SpanVector2; normal = (eq.X < 0 ? -1 : 1) * collidableB.Normal; // invert normal if the scalar is negative scale1 = eq.Y; scale2 = eq.Z; return(Math.Abs(eq.X) < collidableA.Radius); }
public static Vector3 HandleCollision(SphereCollision collider, PlaneCollision collidable, Vector3 position, Vector3 normal) { return(position + normal * collider.Radius); }
public static Boolean GetCollision(SphereCollision collidableA, PlaneCollision collidableB, out Vector3 position, out Vector3 normal) { return(GetCollision(collidableA, collidableB, out position, out normal, out var f1, out var f2)); }
public static RayCollisionPoint GetCollision(Ray ray, PlaneCollision plane) { return(GetCollision(ray, plane, out float s1, out float s2)); }
protected override void Start() { base.Start(); sphereCollider = gameObject.AddComponent <SphereCollision>(); planeCollider = gameObject.AddComponent <PlaneCollision>(); }