void Raycast(RayTransform rayTransform) { if (raycastLine != null) { raycastLine.useWorldSpace = true; } StartCoroutine(RaycastLoop(rayTransform)); }
public void StartRaycastloop(RayTransform rayTransform) { if (rayTransform != null) { Raycast(rayTransform); } else { StartRaycastloop(); } }
IEnumerator RaycastLoop(RayTransform rayTransform) { int bounces = 0; while (bounces < maxRayBounces || maxRayBounces == -1) { rayTransform = ShootRay(rayTransform); yield return(new WaitForSeconds(rayBounceDelay)); } }
RayTransform ShootRay(RayTransform currentRayTransform) { RaycastHit rayHit; // Ray hit if (Physics.Raycast(currentRayTransform.rayPosition, currentRayTransform.rayDirection, out rayHit, currentRayTransform.rayDistance, raycastLayers, QueryTriggerInteraction.Ignore)) { Debug.DrawRay(currentRayTransform.rayPosition, currentRayTransform.rayDirection * rayHit.distance, Color.red); if (onRayHittingTarget != null) { onRayHittingTarget.Invoke(rayHit.point, Quaternion.LookRotation(rayHit.normal)); } //rayHit.collider.gameObject.GetComponent... //ray visuals StartCoroutine(MoveTrailAlongTheRay(currentRayTransform.rayPosition, rayHit.point, rayHit.normal)); SetLineRendererPoints(currentRayTransform.rayPosition, rayHit.point); // add score if (rayHit.collider.tag == "sphere") { scoreNum++; print("scorenum " + scoreNum); scoreText.text = scoreNum.ToString(); audioSource.Play(); } else { bouncesNum++; print("bouncesnum " + bouncesNum); bouncesText.text = bouncesNum.ToString(); } // current ray transform for gizmo gizmoRayTransform = new RayTransform(currentRayTransform.rayPosition, currentRayTransform.rayDirection, rayHit.distance); // next ray transform return(new RayTransform(rayHit.point, Vector3.Reflect(currentRayTransform.rayDirection, rayHit.normal).normalized, currentRayTransform.rayDistance)); } else // Ray didn't hit { // current ray transform for gizmo gizmoRayTransform = new RayTransform(currentRayTransform.rayPosition, currentRayTransform.rayDirection, rayHit.distance); // next ray transform return(new RayTransform(currentRayTransform.rayPosition + currentRayTransform.rayDirection * currentRayTransform.rayDistance, currentRayTransform.rayDirection, currentRayTransform.rayDistance)); } }