Unity实体不在播放模式下渲染
Unity Entities not rendering in play mode
我尝试使用代码实例化一个实体:
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
- Collections 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
欢迎提出任何建议和想法
我发现了问题,似乎即使这行代码创建了一个实体:
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));
我正在做一些更多的研究,以了解为什么会这样 post 这里有任何发现。
完整的代码现在看起来像这样:
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 });
}
我希望这对以后的人有所帮助。
我尝试使用代码实例化一个实体:
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
- Collections 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
欢迎提出任何建议和想法
我发现了问题,似乎即使这行代码创建了一个实体:
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));
我正在做一些更多的研究,以了解为什么会这样 post 这里有任何发现。 完整的代码现在看起来像这样:
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 });
}
我希望这对以后的人有所帮助。