1. Entity
与Mono的Gameobject相似,是任何数据挂载的媒介。Entity持有多个Component,通过上面的数据在ComponentSystem中进行运算。
2. Component
与Mono的Component相似,但是只持有数据,不会进行任何运算。根据Attribute,可实现类不同功能。
public struct RotationSpeed_ForEach : IComponentData
{
public float RadiansPerSecond;
}
GenerateAuthoringComponentAttribute : 使IComponentData挂载于GameObject上:
[GenerateAuthoringComponent]
3. ComponentSystem
ECS原生的运算类,与Entity相互独立,不需要挂载便自动运行(跨场景依旧可运行)。在各个方法中获取Entity上Component的数据,并对其进行运算和修改。
ComponentSystem的写法
DisableAutoCreationAttribute: 使ComponentSystem不会自动生成并运行。
[DisableAutoCreation]
UpdateAfterAttribute:定义ComponentSystem的Update执行顺序,有助于理清逻辑
[UpdateAfter(typeof(SpriteSheetAnimation_Animate))]
4. World
大量System的集合,ECS系统中自带一个默认的DefaultGameObjectInjectionWorld,部分系统功能相关的System都在其中,如SceneSystem,TransformSystem等等。同时也可以创建自定义的World。不同的World之间相互独立。
var defaultWorld=World.DefaultGameObjectInjectionWorld;
var newWorld = new World("World Name");
//查找,筛选
foreach(var tempWorld in World.All)
{
}