最近也是离职了,总结下上次工作使用的技术,并写个文章帮大家快速入门这个技术(背景:多单位下Mono模式开发发的开销较大,所以使用Ecs是个不错的选择,),多单位下不建议使用物理相关的组件,当然碰撞盒子可以使用,用来检测碰撞,废话不多说,现在开始入门,哈哈 1.打开你的unity,新建一个空项目 2.导入所需要的包,找不到的建议看下官网docs.unity3d.com/Packages/co…
按照包名添加 com.unity.entities ,和com.unity.entities.graphics 如下图
在项目中点击 窗口-->包管理器, 然后安装
3.安装成功后会在顶部出现job的选项
4.在你的测试场景中 右键---> New Sub Scene -->Empty Scene , 自定义名字,然后你的场景会变成这样
- 在你的主场景中新建一个cube
- 开始写脚本 创建一个名为 TestAuthoring.cs 的脚本,继承自MonoBehaviour,代码如下,其中baker是烘培的意思,也就是将一些东西烘培到Ecs中来,先照着代码写
using Unity.Entities;
using UnityEngine;
namespace Script
{
public class TestAuthoring : MonoBehaviour
{
private class TestBaker : Baker<TestAuthoring>
{
public override void Bake(TestAuthoring authoring)
{
}
}
}
}
- 然后写一个data类, 继承自 IComponentData, ,代码如下
public struct TestData : IComponentData
{
public float Speed;
}
- 将第六步的代码改成如下
public class TestAuthoring : MonoBehaviour
{
public float Speed;
private class TestBaker : Baker<TestAuthoring>
{
public override void Bake(TestAuthoring authoring)
{
Entity entity = GetEntity(TransformUsageFlags.Dynamic);
//添加组件
AddComponent(entity, new TestData
{
Speed = authoring.Speed
});
}
}
}
- 将第五步用的cube挂载TestAuthoring.cs脚本
10.准备工作完成,现在我们去创建一个单例的mono,
using Unity.Entities;
using UnityEngine;
using UTools;
namespace Script
{
public class Root : MonoBehaviour
{
public GameObject cube;
private class RootBaker : Baker<Root>
{
public override void Bake(Root authoring)
{
Entity entity = GetEntity(TransformUsageFlags.Dynamic);
AddComponent<RootData>(entity, new RootData()
{
TestCube = GetEntity(authoring.cube,TransformUsageFlags.Dynamic)
});
}
}
}
public struct RootData : IComponentData
{
public Entity TestCube;
}
}
11.挂载root, 将之前做的cube放进去
12.编写system
using Unity.Entities;
using UnityEngine;
namespace Script
{
public partial class CubeSystem : SystemBase
{
protected override void OnUpdate()
{
RootData data = SystemAPI.GetSingleton<RootData>();
Entity entity = EntityManager.Instantiate(data.TestCube);
}
}
}
13.之后这样就可以每帧在ecs的场景下创建一个物体了,对了,项目一定要是urp项目哦