Unity ECS:系统找不到实体
Unity ECS : System does not find entities
我在使用 Unity ECS 时遇到问题。我的系统没有通过查询找到我的实体。这是我的设置:我目前只使用一个实体进行测试,该实体由预制件创建,使用此功能:
Entity CreateEntity => GameObjectConversionUtility.ConvertGameObjectHierarchy(_parameters.carPrefab, _conversionSettings);
和
_assetStore = new BlobAssetStore();
_conversionSettings = GameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld, _assetStore);
我的实体已正确创建(我猜是基于实体 window):
我的系统使用这个查询:
Entities.ForEach((DynamicBuffer<EdgeBufferElement> pathBuffer, ref Translation position,
ref Rotation rotation, ref CarComponentData car) => {
//logic
}).Schedule(inputDeps);
但是我的系统逻辑没有得到执行。这可能是因为系统显示找不到实体:
我还尝试将查询更改为仅引用翻译,但结果相同。你知道这里出了什么问题吗?
提前感谢您的帮助!
这是因为带有 Prefab
标签的实体在默认情况下会在查询中被忽略(您可以轻松覆盖此 ofc)。
这促进了“预制实体”模式,因为调用 EntityManager.Instantiate( prefab_entity )
比 EntityManager.Instantiate( prefab_gameObject )
快很多
using Unity.Entities;
using Unity.Jobs;
public class LetsTestQuerySystem : SystemBase
{
protected override void OnCreate ()
{
Entity prefab = EntityManager.CreateEntity( typeof(Prefab) , typeof(MyComponent) );
Entity instance = EntityManager.Instantiate( prefab );// Instantiate removes Prefab tag
EntityManager.SetName( prefab , "prefab" );
EntityManager.SetName( instance , "instance" );
}
protected override void OnUpdate ()
{
Entities
// .WithAll<Prefab>()// query prefabs only
.ForEach( ( ref MyComponent component ) => component.Value += 1 )
.WithBurst().ScheduleParallel();
}
struct MyComponent : IComponentData { public int Value; }
}
我在使用 Unity ECS 时遇到问题。我的系统没有通过查询找到我的实体。这是我的设置:我目前只使用一个实体进行测试,该实体由预制件创建,使用此功能:
Entity CreateEntity => GameObjectConversionUtility.ConvertGameObjectHierarchy(_parameters.carPrefab, _conversionSettings);
和
_assetStore = new BlobAssetStore();
_conversionSettings = GameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld, _assetStore);
我的实体已正确创建(我猜是基于实体 window):
我的系统使用这个查询:
Entities.ForEach((DynamicBuffer<EdgeBufferElement> pathBuffer, ref Translation position,
ref Rotation rotation, ref CarComponentData car) => {
//logic
}).Schedule(inputDeps);
但是我的系统逻辑没有得到执行。这可能是因为系统显示找不到实体:
我还尝试将查询更改为仅引用翻译,但结果相同。你知道这里出了什么问题吗?
提前感谢您的帮助!
这是因为带有 Prefab
标签的实体在默认情况下会在查询中被忽略(您可以轻松覆盖此 ofc)。
这促进了“预制实体”模式,因为调用 EntityManager.Instantiate( prefab_entity )
比 EntityManager.Instantiate( prefab_gameObject )
using Unity.Entities;
using Unity.Jobs;
public class LetsTestQuerySystem : SystemBase
{
protected override void OnCreate ()
{
Entity prefab = EntityManager.CreateEntity( typeof(Prefab) , typeof(MyComponent) );
Entity instance = EntityManager.Instantiate( prefab );// Instantiate removes Prefab tag
EntityManager.SetName( prefab , "prefab" );
EntityManager.SetName( instance , "instance" );
}
protected override void OnUpdate ()
{
Entities
// .WithAll<Prefab>()// query prefabs only
.ForEach( ( ref MyComponent component ) => component.Value += 1 )
.WithBurst().ScheduleParallel();
}
struct MyComponent : IComponentData { public int Value; }
}