- create a prefab,
- drag-and-drop your custom Component script (MonoBehavior, not a struct that inherited from IComponentData, so must be exactly one class per file) to the prefab,
- then add the GameObjectEntity script to the prefab.
- Next, you can instantiate the prefab as usual.
- Use a class inherited from ComponentSystem to manipulate the values of those components.
class SomeSystem1 : ComponentSystem {
ComponentGroup group;
protected override void OnUpdate() {
if(group == null || group.CalculateLength() < 1) {
group = GetComponentGroup(typeof(Direction2D), typeof(Coord2D), typeof(Health)); // must be cached as data member }
var dirs = group.GetComponentArray<Coord2D>();
// do something with it,
// note that if you want to use Job/Schedule,
// you must use [Inject]
}
}
class SomeSystem2 : ComponentSystem {
struct Data {
public GameObjectArray gameObjects;
public ComponentArray<Position2D> Positions;
public ComponentArray<Heading2D> Headings;
public ComponentArray<Health> Healths;
}
[Inject] Data data;
protected override void OnUpdate() {
// do something with data.*
// inherit from JobComponentSystem
// if you want to use Job/Schedule
// also read this
}
}
One of the biggest benefit of using Hybrid ECS than Pure ECS is that you don't have to wait/implement missing component/system (Animation for example) that not yet implemented by Unity to make stuff works correctly.
This is the example the difference between creating hybrid ECS way and standard/normal way (btw this is not using a correct composition of component, just minimal conversion between those two):
Difference between prefab in Hybrid ECS way and in normal way:
Example code for the system:
For more info, see this slide Unity ECS Intro.