GenerateOrbs.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using TMPro.Examples;
  2. using Unity.VisualScripting;
  3. using UnityEngine;
  4. public class GenerateOrbs : MonoBehaviour
  5. {
  6. public GameObject orb;
  7. [SerializeField] int spawnRadius;
  8. [SerializeField] int maximumOrbs;
  9. public void GenerateOrb(Transform playerTransform)
  10. {
  11. int spawnedOrbCounter = 0;
  12. int attempts = 0;
  13. int maxAttempts = maximumOrbs * 10;
  14. while (spawnedOrbCounter < maxAttempts && attempts < maxAttempts)
  15. {
  16. attempts++;
  17. float spawnX = Random.Range(-spawnRadius, spawnRadius) + playerTransform.position.x;
  18. float spawnZ = Random.Range(-spawnRadius, spawnRadius) + playerTransform.position.z;
  19. Vector3 rayOrigin = new Vector3(spawnX, 50f, spawnZ);
  20. if(Physics.Raycast(rayOrigin, Vector3.down, out RaycastHit hit, 100f)){
  21. if (hit.collider.CompareTag("Floor"))
  22. {
  23. Vector3 spawnPosition = hit.point + new Vector3(0, 0.5f, 0);
  24. if(spawnedOrbCounter < maximumOrbs)
  25. {
  26. Instantiate(orb, spawnPosition, Quaternion.identity);
  27. spawnedOrbCounter++;
  28. }
  29. }
  30. }
  31. }
  32. }
  33. }