private void RaycastBeam() { Ray beamRay = new Ray(transform.position, transform.forward); RaycastHit beamHit; if (raycaster.ParabolicRaycast(out beamHit, transform.position, transform.eulerAngles, raycastTravelDistance, raycastVelocity, raycastSegments)) { beamRenderer.enabled = true; beamRenderer.SetVertexCount(raycastSegments + 2); beamRenderer.SetPositions(ParabolicRaycaster.ParabolicPointsList(transform.position, transform.eulerAngles, beamHit.distance, raycastVelocity, raycastSegments)); beamRenderer.SetPosition(raycastSegments + 1, hitPosition); if (beamHit.normal.y > 0.01f) //If the surface has a positive slope { hitPosition = beamHit.point; validTeleport = true; PlaceTargetMarker(hitPosition, beamHit.normal); } else { hitPosition = beamHit.point; validTeleport = false; RemoveTargetMarker(); //Draw an invalid teleport marker } } else { beamRenderer.enabled = false; hitPosition = Vector3.zero; validTeleport = false; RemoveTargetMarker(); } }