Unity3d 未在播放模式下渲染Unity实体
我尝试使用以下代码实例化实体:Unity3d 未在播放模式下渲染Unity实体,unity3d,unity-dots,unity-ecs,Unity3d,Unity Dots,Unity Ecs,我尝试使用以下代码实例化实体: blobAssetStore = new BlobAssetStore(); GameObjectConversionSettings settings = GameObjectConversionSettings.FromWorld(defaultWorld,blobAssetStore); Entity entity = GameObjectConversionUtility.ConvertGameObjectHierarchy(gameObjectPrefa
blobAssetStore = new BlobAssetStore();
GameObjectConversionSettings settings = GameObjectConversionSettings.FromWorld(defaultWorld,blobAssetStore);
Entity entity = GameObjectConversionUtility.ConvertGameObjectHierarchy(gameObjectPrefab, settings);
entityManager.SetComponentData(entity, new Translation { Value = position });
我尝试过使用ConvertToEntity脚本。我还创建了一个子场景,这三种方法都没有渲染。我可以在实体调试器中看到实体,所有实体都有转换,以及相关的渲染组件,一切看起来都很好。以下是我安装的ECS包:
突发事件1.3.3
集合0.9.0-预览。6
实体0.11.1-preview.4
混合渲染器0.5.2-preview.4
作业0.2.10-0.12
使用Unity 2020.1.0b12.3931
欢迎提出任何建议和想法我发现了这个问题,似乎即使这行代码创建了一个实体:
Entity entityPrefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(gameObjectPrefab, settings);
它不会按如下方式设置LocalToWorld坐标:
如果我在上面一行之后调用Instantiate,使用先前创建的实体:
Entity entity = entityManager.Instantiate(entityPrefab);
然后将LocalToWorld设置为正确的传入平移位置:
即使我尝试使用以下方法将LocalToWorld组件设置到正确的位置:
entityManager.SetComponentData(entityPrefab, new LocalToWorld { Value = new float4x4(quaternion.identity, position) });
它仍然没有显示,我目前唯一的猜测是它连接了一个预制组件,如下所示:
尽管即使尝试删除此组件也不会显示创建的实体:
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 });
}
我希望这对将来的人有所帮助。我发现了这个问题,似乎即使这行代码创建了一个实体:
Entity entityPrefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(gameObjectPrefab, settings);
它不会按如下方式设置LocalToWorld坐标:
如果我在上面一行之后调用Instantiate,使用先前创建的实体:
Entity entity = entityManager.Instantiate(entityPrefab);
然后将LocalToWorld设置为正确的传入平移位置:
即使我尝试使用以下方法将LocalToWorld组件设置到正确的位置:
entityManager.SetComponentData(entityPrefab, new LocalToWorld { Value = new float4x4(quaternion.identity, position) });
它仍然没有显示,我目前唯一的猜测是它连接了一个预制组件,如下所示:
尽管即使尝试删除此组件也不会显示创建的实体:
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 });
}
我希望这能对将来的人有所帮助。是你在转换一个预设,正如名字所暗示的,或者是一个来自层次结构的游戏对象。我在转换一个预设,而不是在层次结构中。我已经尝试将预置放在层次结构中,只是使用ConvertToEntity脚本,但这也没有显示出来。正在尝试降级某些包以与现在显示实体的项目相匹配。它是2D还是3D预制?你需要旋转吗?这是一个3D预制件。问题是它根本没有渲染。但是我发现了我的错误。谢谢。是你正在转换的一个预置,正如名字所暗示的,或者是一个来自层次结构的游戏对象。我正在转换一个预置,而不是在层次结构中。我已经尝试将预置放在层次结构中,只是使用ConvertToEntity脚本,但这也没有显示出来。正在尝试降级某些包以与现在显示实体的项目相匹配。它是2D还是3D预制?你需要旋转吗?这是一个3D预制件。问题是它根本没有渲染。但是我发现了我的错误。非常感谢。