Exemple #1
0
        void Spawn()
        {
            while (objects.Count >= count)
            {
                // Destroy(objects.Dequeue());
            }

            if (prefabs.Count == 0)
            {
                return;
            }

            var e = Instantiate(prefabs[Random.Range(0, prefabs.Count)]);

            Vector3 pos = Random.insideUnitCircle * radius;

            pos.z = pos.y;
            pos.y = Random.Range(height, height * 4f);

            e.transform.parent     = transform;
            e.transform.position   = pos;
            e.transform.rotation   = Random.rotation;
            e.transform.localScale = Vector3.one * Random.Range(minSize, maxSize);

            var rb = e.GetComponent <Rigidbody>();

            if (rb != null)
            {
                rigidbodies.Add(rb);
            }

            GDOC.ProcessNewObject(e);
        }
Exemple #2
0
        IEnumerator RespawnC()
        {
            if (prefab == null)
            {
                yield break;
            }

            if (controlGDOC)
            {
                GDOC.Disable();
            }

            yield return(null);

            Clear();

            yield return(null);

            Random.InitState(seed);

            GameObject processedPrefab = null;

            for (var i = -n; i < currentN; i++)
            {
                for (var j = -n; j < currentN; j++)
                {
                    if (skipCenter && i == 0 && j == 0)
                    {
                        continue;
                    }

                    var scale    = Random.Range(minScale, maxScale);
                    var position = transform.position + new Vector3(i * step, Random.Range(minHeight, maxHeight) * scale, j * step);

                    var sample = processedPrefab == null ? prefab : processedPrefab;
                    var e      = Instantiate(sample, position, Quaternion.identity).transform;

                    if (processedPrefab == null)
                    {
                        GDOC.ProcessNewObject(e.gameObject);
                        processedPrefab = e.gameObject;
                    }

                    e.transform.SetParent(transform, true);
                    e.localScale = Vector3.one * scale;

                    if (randomAARotation)
                    {
                        e.localEulerAngles = Vector3.up * 90 * Random.Range(0, 4);
                    }

                    if (randomOffset)
                    {
                        e.localPosition += e.forward * Random.Range(0, step * 0.5f);
                    }

                    if (disableOnSpawn)
                    {
                        e.gameObject.SetActive(false);
                    }
                }

                var state = Random.state;

                Random.state = state;
            }

            if (controlGDOC)
            {
                GDOC.Enable();
            }
        }