| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- using System.Collections;
- using System.Collections.Generic;
- using TMPro.Examples;
- using Unity.VisualScripting;
- using UnityEngine;
- public class GenerateOrbs : MonoBehaviour
- {
- public GameObject orb;
- [SerializeField] int spawnRadius;
- [SerializeField] int maximumOrbs;
- public void StartGenerating(Transform playerTransform)
- {
- StartCoroutine(GenerateOrb(playerTransform));
- }
- IEnumerator GenerateOrb(Transform playerTransform)
- {
- int spawnedOrbCounter = 0;
- while (spawnedOrbCounter < maximumOrbs)
- {
- float spawnX = Random.Range(-spawnRadius, spawnRadius) + playerTransform.position.x;
- float spawnZ = Random.Range(-spawnRadius, spawnRadius) + playerTransform.position.z;
- Vector3 rayOrigin = new Vector3(spawnX, 500f, spawnZ);
- if(Physics.Raycast(rayOrigin, Vector3.down, out RaycastHit hit, 1000f)){
- if (hit.collider.CompareTag("Floor"))
- {
- Vector3 spawnPosition = hit.point + new Vector3(0, 1f, 0);
- GameObject orbObject = Instantiate(orb, spawnPosition, Quaternion.identity);
- spawnedOrbCounter++;
- yield return null;
- }
- if (spawnedOrbCounter < maximumOrbs)
- {
- yield return null;
- }
- Debug.Log("All orbs successfully spawned!");
- }
- else
- {
- Debug.DrawRay(rayOrigin, Vector3.down * 1000f, Color.red, 5f);
- Debug.Log($"No hit at {spawnX}, {spawnZ}");
- }
- }
- }
- }
|