Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
2.2 kB
1
Indexable
Never
using UnityEngine;

public class SpawnObjectsAroundBounds : MonoBehaviour
{
    public Collider spawnArea;  // The collider whose bounds will be used as the spawn area
    public GameObject objectToSpawn;  // The object to be spawned

    public int numberOfObjectsToSpawn;  // The number of objects to spawn
    public float spawnOffset;  // The distance from the collider's bounds where objects should spawn

    void Start()
    {
        for (int i = 0; i < numberOfObjectsToSpawn; i++)
        {
            Vector3 spawnPoint = GetRandomPointOnBounds();

            // Instantiate the object at the spawn point
            Instantiate(objectToSpawn, spawnPoint, Quaternion.identity);
        }
    }

    private Vector3 GetRandomPointOnBounds()
    {
        // Get the bounds of the spawn area
        Bounds bounds = spawnArea.bounds;

        // Pick a random face of the collider bounds
        int faceIndex = Random.Range(0, 6);
        float x = 0f, y = 0f, z = 0f;

        switch (faceIndex)
        {
            case 0: // Front face
                x = Random.Range(bounds.min.x, bounds.max.x);
                y = Random.Range(bounds.min.y, bounds.max.y);
                z = bounds.min.z - spawnOffset;
                break;

            case 1: // Back face
            case 2: // Top face
                x = Random.Range(bounds.min.x, bounds.max.x);
                y = Random.Range(bounds.min.y, bounds.max.y);
                z = bounds.max.z + spawnOffset;
                break;
            case 3: // Bottom face
            case 4: // Left face
                x = bounds.min.x - spawnOffset;
                y = Random.Range(bounds.min.y, bounds.max.y);
                z = Random.Range(bounds.min.z, bounds.max.z);
                break;

            case 5: // Right face
                x = bounds.max.x + spawnOffset;
                y = Random.Range(bounds.min.y, bounds.max.y);
                z = Random.Range(bounds.min.z, bounds.max.z);
                break;
        }

        // Return the random point on the chosen face of the bounds
        return new Vector3(x, y, z);
    }
}