コード例 #1
0
ファイル: Raycaster.cs プロジェクト: jannesoik/mathass2
    void Raycast(RayTransform rayTransform)
    {
        if (raycastLine != null)
        {
            raycastLine.useWorldSpace = true;
        }

        StartCoroutine(RaycastLoop(rayTransform));
    }
コード例 #2
0
ファイル: Raycaster.cs プロジェクト: jannesoik/mathass2
 public void StartRaycastloop(RayTransform rayTransform)
 {
     if (rayTransform != null)
     {
         Raycast(rayTransform);
     }
     else
     {
         StartRaycastloop();
     }
 }
コード例 #3
0
ファイル: Raycaster.cs プロジェクト: jannesoik/mathass2
    IEnumerator RaycastLoop(RayTransform rayTransform)
    {
        int bounces = 0;

        while (bounces < maxRayBounces || maxRayBounces == -1)
        {
            rayTransform = ShootRay(rayTransform);

            yield return(new WaitForSeconds(rayBounceDelay));
        }
    }
コード例 #4
0
ファイル: Raycaster.cs プロジェクト: jannesoik/mathass2
    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));
        }
    }