【问题标题】:Unity Entities not rendering in play modeUnity实体不在播放模式下渲染
【发布时间】:2020-07-01 19:55:58
【问题描述】:

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

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

欢迎任何建议和想法

【问题讨论】:

  • 顾名思义,您要转换的是预制件还是层次结构中的游戏对象
  • 我正在转换预制件,而不是在层次结构中。我试图将预制件放在层次结构中,只是使用 ConvertToEntity 脚本,但也没有显示。尝试降级一些包以匹配现在确实显示实体的项目。
  • 它是 2D 还是 3D 预制件?你需要一些轮换吗?
  • 这是一个 3D 预制件。问题是它根本没有渲染。但是我发现了我的错误。谢谢。

标签: unity3d unity-dots unity-ecs


【解决方案1】:

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

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

它不设置 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 });        
}

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

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2019-05-20
    • 1970-01-01
    相关资源
    最近更新 更多