I've been trying to bake a entity with the necessary redering component using RenderMeshUtility. I managed to make it work in the start() of a Monobehavior but I have been unsuccessful doing it at baking.
Here is the relevant part of my code so far:
public override void Bake(SpriteAuthoring authoring)
{
Entity entity = GetEntity(TransformUsageFlags.Renderable);
var world = World.DefaultGameObjectInjectionWorld;
var entityManager = world.EntityManager;
var spriteMeshAsset = authoring.spriteMeshAsset;
var SpriteTexture = authoring.SpriteTexture;
var spriteMaterial = authoring.spriteMaterial;
var spriteMesh = new Mesh
{
vertices = (Vector3[])spriteMeshAsset.vertices.Clone(),
triangles = (int[])spriteMeshAsset.triangles.Clone(),
normals = (Vector3[])spriteMeshAsset.normals.Clone(),
uv = (Vector2[])spriteMeshAsset.uv.Clone()
};
spriteMesh.RecalculateBounds();
Material materialInstance = new Material(spriteMaterial);
var renderMeshArray = new RenderMeshArray(
new Material[] { materialInstance },
new Mesh[] { spriteMesh }
);
var desc = new RenderMeshDescription(
shadowCastingMode: ShadowCastingMode.Off,
receiveShadows: false);
RenderMeshUtility.AddComponents(
entity,
entityManager,
desc,
renderMeshArray,
MaterialMeshInfo.FromRenderMeshArrayIndices(0, 0)
);
entityManager.AddComponentData(entity, new LocalToWorld());
entityManager.AddComponentData(entity, new LocalToWorld { Value = float4x4.Translate(float3.zero) });
var spriteTransfrom = LocalTransform.FromPosition(0, 0, 0);
spriteTransfrom.Rotation = Quaternion.Euler(0, 0, 0);
entityManager.AddComponentData(entity, spriteTransfrom);
}