CrowdSpawnerBehaviour.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using GPUECSAnimationBaker.Engine.AnimatorSystem;
  2. using Unity.Entities;
  3. using UnityEngine;
  4. using Random = Unity.Mathematics.Random;
  5. namespace GPUECSAnimationBaker.Samples.SampleScenes.Festival.CrowdSpawnerSystem
  6. {
  7. public class CrowdSpawnerBehaviour : MonoBehaviour
  8. {
  9. public float spacing;
  10. public GameObject[] gpuEcsAnimatorPrefabs;
  11. }
  12. public class CrowdSpawnerBaker : Baker<CrowdSpawnerBehaviour>
  13. {
  14. public override void Bake(CrowdSpawnerBehaviour authoring)
  15. {
  16. Entity entity = GetEntity(TransformUsageFlags.None);
  17. AddComponent(entity, new CrowdSpawnerComponent()
  18. {
  19. cols = 0,
  20. rows = 0,
  21. spacing = authoring.spacing
  22. });
  23. AddComponent(entity, new CrowdSpawnerUpdateComponent()
  24. {
  25. cols = 0,
  26. rows = 0,
  27. updateTime = 0,
  28. random = Random.CreateFromIndex((uint)Mathf.RoundToInt(Time.time))
  29. });
  30. DynamicBuffer<CrowdSpawnerAnimatorPrefabBufferElement> crowdSpawnerAnimatorPrefabs
  31. = AddBuffer<CrowdSpawnerAnimatorPrefabBufferElement>(entity);
  32. foreach(GameObject gpuEcsAnimatorPrefab in authoring.gpuEcsAnimatorPrefabs)
  33. {
  34. crowdSpawnerAnimatorPrefabs.Add(new CrowdSpawnerAnimatorPrefabBufferElement()
  35. {
  36. gpuEcsAnimatorPrefab = GetEntity(gpuEcsAnimatorPrefab,
  37. gpuEcsAnimatorPrefab.GetComponent<GpuEcsAnimatorBehaviour>().transformUsageFlags)
  38. });
  39. }
  40. AddBuffer<CrowdSpawnerAnimatorBufferElement>(entity);
  41. }
  42. }
  43. }