//https://docs.unity3d.com/ScriptReference/Physics.Raycast.html?_ga=2.69651992.960042701.1515280206-1316818202.1483563338 public float checkRayFlipped(IGravityClient gameObject, Vector3 positionRay, float distance, float yAngle, float zAngle, out RaycastHit hit, Color color, int layersToIgnore = 0) { float result = float.MaxValue; Vector3 startRay = new Vector2(positionRay.x, positionRay.y); Vector3 endRay = new Vector2(positionRay.x + distance, positionRay.y); Vector3 dir = Vector3.left; Vector3 eulerVector = new Vector3(0.0f, 0.0f, 0.0f); startRay = Quaternion.Euler(eulerVector) * (startRay); endRay = Quaternion.Euler(eulerVector) * (endRay); dir = Quaternion.Euler(eulerVector) * (dir); eulerVector.z = zAngle; startRay = Quaternion.Euler(eulerVector) * (startRay); endRay = Quaternion.Euler(eulerVector) * (endRay); dir = Quaternion.Euler(eulerVector) * (dir); startRay += gameObject.getPosition(); endRay += gameObject.getPosition(); int layerMask = ~(1 << gameObject.getLayer() | layersToIgnore); if (yAngle > 0.0f) { dir = Vector3.back; } if (yAngle < 0.0f) { dir = Vector3.forward; } if (Physics.Raycast(startRay, dir, out hit, 1000000.0f, layerMask)) { result = hit.distance; } Debug.DrawRay(startRay, dir, color, 0.2f, false); return(result); }