GenerateOrbs.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using TMPro.Examples;
  4. using Unity.VisualScripting;
  5. using UnityEngine;
  6. public class GenerateOrbs : MonoBehaviour
  7. {
  8. public GameObject orb;
  9. [SerializeField] int spawnRadius;
  10. [SerializeField] int maximumOrbs;
  11. public void StartGenerating(Transform playerTransform)
  12. {
  13. StartCoroutine(GenerateOrb(playerTransform));
  14. }
  15. IEnumerator GenerateOrb(Transform playerTransform)
  16. {
  17. int spawnedOrbCounter = 0;
  18. while (spawnedOrbCounter < maximumOrbs)
  19. {
  20. float spawnX = Random.Range(-spawnRadius, spawnRadius) + playerTransform.position.x;
  21. float spawnZ = Random.Range(-spawnRadius, spawnRadius) + playerTransform.position.z;
  22. Vector3 rayOrigin = new Vector3(spawnX, 500f, spawnZ);
  23. if(Physics.Raycast(rayOrigin, Vector3.down, out RaycastHit hit, 1000f)){
  24. if (hit.collider.CompareTag("Floor"))
  25. {
  26. Vector3 spawnPosition = hit.point + new Vector3(0, 1f, 0);
  27. GameObject orbObject = Instantiate(orb, spawnPosition, Quaternion.identity);
  28. spawnedOrbCounter++;
  29. yield return null;
  30. }
  31. if (spawnedOrbCounter < maximumOrbs)
  32. {
  33. yield return null;
  34. }
  35. Debug.Log("All orbs successfully spawned!");
  36. }
  37. else
  38. {
  39. Debug.DrawRay(rayOrigin, Vector3.down * 1000f, Color.red, 5f);
  40. Debug.Log($"No hit at {spawnX}, {spawnZ}");
  41. }
  42. }
  43. }
  44. }