using Unity.Entities; #if RUKHANKA_WITH_NETCODE using Unity.NetCode; #endif using UnityEngine; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// namespace Rukhanka.Samples { public class PrefabSpawner: MonoBehaviour { public GameObject[] prefabPool; public int count; public float spawnRadius; public float spawnDelayInSeconds; public bool spawnUnityObjects; public bool initialSpawn; void Start() { if (spawnUnityObjects) Spawn(); } public void Spawn() { for (int i = 0; i < prefabPool.Length; ++i) { var scc = new SpawnCommandComponent() { spawnCount = count / prefabPool.Length }; var p = prefabPool[i]; for (int l = 0; l < scc.spawnCount; ++l) { var g = GameObject.Instantiate(p); var randomPos = new Vector2(Random.value, Random.value) * 2 - new Vector2(1, 1); var position = new Vector3(randomPos.x, 0, randomPos.y) * spawnRadius; var rot = Quaternion.Euler(new Vector3(0, Random.value * 360, 9)); g.transform.position += position; g.transform.rotation = rot; var a = g.GetComponent(); var randomSpeedVal = (Random.value * 2 - 1) * 0.5f + 1; a.SetFloat("Crowd_AnimationSpeed", randomSpeedVal); } } } } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public class PrefabSpawnerBaker: Baker { public override void Bake(PrefabSpawner a) { for (int i = 0; i < a.prefabPool.Length; ++i) { var p = a.prefabPool[i]; var spc = new SpawnPrefabComponent() { prefabToSpawn = GetEntity(p, TransformUsageFlags.Dynamic), spawnRadius = a.spawnRadius, }; var scc = new SpawnCommandComponent() { spawnCount = a.count / a.prefabPool.Length, spawnTime = Time.time + a.spawnDelayInSeconds, spawnerPos = a.transform.position, boneVisualizationOn = true }; if (!a.spawnUnityObjects) { var e = CreateAdditionalEntity(TransformUsageFlags.Dynamic); AddComponent(e, spc); if (a.initialSpawn) AddComponent(e, scc); #if RUKHANKA_WITH_NETCODE if (p.GetComponent() != null) { var netObjTag = default(NetworkedPrefab); AddComponent(e, netObjTag); } #endif } } } } }