1

我尝试使用代码实例化一个实体:

blobAssetStore = new BlobAssetStore();
GameObjectConversionSettings settings = GameObjectConversionSettings.FromWorld(defaultWorld,blobAssetStore);
Entity entity = GameObjectConversionUtility.ConvertGameObjectHierarchy(gameObjectPrefab, settings);      
entityManager.SetComponentData(entity, new Translation { Value = position });

我尝试使用 ConvertToEntity 脚本。我还创建了一个子场景,所有三种方法都没有渲染。我可以在 Entity Debugger 中看到实体,所有实体都有一个 Translation,以及相关的渲染组件,一切看起来都不错。这些是我安装的 ECS 包:

  • 爆发 1.3.3
  • 集合 0.9.0-preview.6
  • 实体 0.11.1-preview.4
  • 混合渲染器 0.5.2-preview.4
  • 乔布斯 0.2.10-preview.12

使用 Unity 2020.1.0b12.3931

欢迎任何建议和想法

4

1 回答 1

2

我发现了这个问题,似乎即使这行代码创建了一个实体:

Entity entityPrefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(gameObjectPrefab, settings);

它不设置 LocalToWorld 坐标如下: Enity Prefab LocalToWorld 的片段

如果我在上述行之后使用先前创建的实体调用 Instantiate:

Entity entity = entityManager.Instantiate(entityPrefab);

然后将 LocalToWorld 正确设置为传入的 Translation 位置: 在此处输入图像描述

即使我尝试使用以下方法将 LocalToWorld 组件设置为正确的位置:

 entityManager.SetComponentData(entityPrefab, new LocalToWorld { Value = new float4x4(quaternion.identity, position) });

它仍然没有显示,我目前唯一的猜测是它附加了一个 Prefab 组件,如下所示:

在此处输入图像描述

尽管即使尝试删除此组件也不会显示创建的实体:

 entityManager.RemoveComponent(entityPrefab, typeof(Prefab));

我正在对为什么会这样进行更多研究,并将在此处发布任何发现。完整的代码现在看起来像这样:

private void InstantiateEntity(float3 position)
{
    blobAssetStore = new BlobAssetStore();
    GameObjectConversionSettings settings = GameObjectConversionSettings.FromWorld(defaultWorld, blobAssetStore);        
    Entity entityPrefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(gameObjectPrefab, settings);
    Entity entity = entityManager.Instantiate(entityPrefab);
    entityManager.SetComponentData(entity, new Translation { Value = position });        
}

我希望这对将来的人有所帮助。

于 2020-07-02T21:13:41.673 回答