先上源码
using System.Collections; using System.Collections.Generic; using UnityEngine; using Unity.Entities; using Unity.Collections; using Demo; using Unity.Rendering; using Unity.Transforms; using Unity.Mathematics; public class MainECS : MonoBehaviour { public MeshInstanceRendererComponent cube; public GameObject obj; [SerializeField] private NativeArray<Entity> entities; public bool ECS = true; void Start () { if (ECS) { //entities = new NativeArray<Entity>(100, Allocator.Persistent); EntityManager entityManager = World.Active.GetOrCreateManager<EntityManager>(); EntityArchetype archetype = entityManager.CreateArchetype(typeof(Position),typeof(Rotation), typeof(Count), typeof(TransformMatrix)); //entityManager.Instantiate(obj, entities); for (int j = 0; j < 300; j++) { for (int i = 0; i < 300; i++) { //entities[i] = entityManager.CreateEntity(archetype); Entity entity = entityManager.CreateEntity(archetype); entityManager.AddSharedComponentData(entity, cube.Value); entityManager.SetComponentData(entity, new Position { Value = new float3(-20 + j * 2, -20 + i * 2, 0) }); } } } else { for (int j = 0; j < 300; j++) { for (int i = 0; i < 300; i++) { Instantiate(obj, new Vector3(-20 + j * 2, -20 + i * 2, 0), Quaternion.Euler(Vector3.zero)); } } } } private void OnDestroy() { //if(ECS) // entities.Dispose(); } }
空场景时

使用ECS创建9万个Cube

使用传统Instantiate方式创建9万个
