Spawning collections of objects based on spawned center points
Hi!
New here, hustling around with Unity and I see that the community is great, so I thought I would try to get some answers from smarter people in regards of a problem I am facing.
I have two scripts, one for spawning system positions SystemPositionsSpawner and then one for spawning actual objects based on those positions SystemSpawner. I cannot get them to communicate properly, that is using the Vector3 list from SystemPositionsSpawner to interact with the SystemSpawner. Both scripts work fine on their own, although the code is dubious at best.
The end result I want to achieve is the use that Vector3 list as the center for each system.
Finding bits and bobs and I am sure I could get it to work eventually, but perhaps someone can help. Thanks up front and do not mind the notes in the code. :)
using System.Collections;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SystemSpawner : MonoBehaviour
{
string holderName = "Spawned System Objects";
public Transform[] prefabsToSpawn;
public int objectCount = 50;
public float spawnRadius;
public Vector3 center;
public List<Transform> systemCentersList;
private float spawnCollisionCheckRadius;
private float spawnedObjectInscribingSphereSolutionMissingLegSquared;
private int randomPrefabSelector;
void Start ()
{
SpawnSystem();
}
public void SpawnSystem ()
{
systemCentersList = new List<Transform>();
for (int i = 0; i < GetComponent<SystemPositionsSpawner>().systemPositionsList.Count; i++)
{
Transform spawnedObjects = new GameObject(holderName).transform;
spawnedObjects.parent = transform;
spawnedObjects.position = GetComponent<SystemPositionsSpawner>().systemPositionsList[i];
for (int s = 0; s < objectCount; s++)
{
randomPrefabSelector = Random.Range(0, prefabsToSpawn.Length);
Vector3 spawnPoint = transform.position + Random.insideUnitSphere * spawnRadius;
//
//GetComponent<SystemPositionsSpawner>().systemPositionsList[loop]
spawnedObjectInscribingSphereSolutionMissingLegSquared = Mathf.Pow(transform.localScale.x,2) + Mathf.Pow(transform.localScale.z,2);
spawnCollisionCheckRadius = Mathf.Sqrt(spawnedObjectInscribingSphereSolutionMissingLegSquared + Mathf.Pow(transform.localScale.y,2));
if (!Physics.CheckSphere(spawnPoint, spawnCollisionCheckRadius + 3.5f))
{
Transform newObject = Instantiate(prefabsToSpawn[randomPrefabSelector], spawnPoint, Random.rotation);
newObject.parent = spawnedObjects;
}
}
}
}
private void OnDrawGizmosSelected()
{
Gizmos.color = new Color(1, 0, 0, 0.3f);
Gizmos.DrawSphere(center, spawnRadius);
}
}
using System.Collections.Generic;
using UnityEngine;
public class SystemPositionsSpawner : MonoBehaviour
{
public float positionsCount = 5;
public float spawnRadius;
public List<Vector3> systemPositionsList;
void Start()
{
systemPositionsList = new List<Vector3>();
CreateSystemPositions();
}
public void CreateSystemPositions()
{
for (int loop = 0; loop < positionsCount; loop++)
{
Vector3 spawnPoint = transform.position + Random.insideUnitSphere * spawnRadius;
systemPositionsList.Add(spawnPoint);
}
}
public void OnDrawGizmos()
{
for (int loop = 0; loop < systemPositionsList.Count; loop++)
{
Gizmos.color = Color.red;
Gizmos.DrawSphere(systemPositionsList[loop], 1f);
}
}
}