PlayerSetting设置中确保.NET库在4.X以上
需要在Window->PackageManager中导入以下几个包
注意:Burst需要在Entites之后导入,不然会导入报错
全部导入之后没有报错就准备完毕了,没有修改什么文件之类的东西
说明:在ECS中属性字段跟逻辑是分开的,并且属性是写在结构体中
这里定义了一个level的属性,需要继承IComponentData
using Unity.Entities;
public struct LevelComponent : IComponentData
{
public float level;
}
相对应的逻辑System部分,需要继承ComponentSystem
using UnityEngine;
using Unity.Entities;
public class LevelUpSystem : ComponentSystem
{
protected override void OnUpdate()
{
//会自动调用这个,过滤出所有带LevelComponent组件的实体进行操作
ForEach((ref LevelComponent levelComponent) => {
levelComponent.level += 1f * Time.deltaTime;
});
}
}
总管理部分,这个脚本挂载在场景中
这里的MoveSpeedCompoent组件是另外又写的一个,跟上面方法一样,报错不会弄可以先删除掉
using UnityEngine;
using Unity.Entities;
using Unity.Transforms;
using Unity.Collections;
using Unity.Rendering;
public class Testing : MonoBehaviour
{
[SerializeField] private Mesh mesh;
[SerializeField] private Material material;
// Start is called before the first frame update
private void Start()
{
EntityManager entityManager = World.Active.GetOrCreateManager();
//这里是组件管理
EntityArchetype entityArchetype = entityManager.CreateArchetype(
typeof(LevelComponent),//关卡等级组件
typeof(Position),//位置
typeof(RenderMesh),//模型显示
typeof(LocalToWorld),//
typeof(MoveSpeedComponent),//移动速度组件
typeof(Scale)
);
//XXX实体数量
NativeArray entityArray = new NativeArray(1000,Allocator.Temp);
//创建的同时添加组件
entityManager.CreateEntity(entityArchetype, entityArray);
//设置默认值
for (int i = 0; i < entityArray.Length; i++)
{
Entity entity = entityArray[i];
entityManager.SetComponentData(entity, new LevelComponent { level = Random.Range(10,20) });
entityManager.SetComponentData(entity, new MoveSpeedComponent { moveSpeed = Random.Range(1f,2f) });
entityManager.SetComponentData(entity, new Position { Value= new Unity.Mathematics.float3 (Random.Range(-8f,8f), Random.Range(-5f, 5f),0f)});
entityManager.SetComponentData(entity, new Scale { Value = new Unity.Mathematics.float3(0.1f, 0.1f, 0.1f) });
entityManager.SetSharedComponentData(entity, new RenderMesh {
mesh = mesh,
material = material
});
}
//释放
entityArray.Dispose();
}
}
这些弄完之后就可以运行场景了,这里我是加载了1000个Quad,FPS在80左右还是可以的,
我们可以再Windows->Analysis->Entity Debugger中查看我们生成的物体,如图,点击实体会在Inspector中显示我们添加的组件信息