跳转到内容

2D精灵导出

  • 入口GetSpriteRendererComponentData
  • 组件UI3D.lh(Mesh2DRender)
  • 图集.atlas(子图时)

外层结构——SpriteRenderer 导为 UI3D(节点仍是 Sprite3D、保留 3D 变换),UI3D 引用一个 2D 预制。 SpriteRenderer 导出成 UI3D 组件(节点仍是 Sprite3D,保留 3D 变换,localScale.x 取负做左右手坐标补偿)。UI3D 引用一个 .lh 2D 预制,预制里是带 Mesh2DRender 的精灵:贴图来自导出的图,颜色取自 SpriteRenderer.color,2D 材质用自动生成的默认材质 Mesh2DRender_DefaultMaterial.lmat(一次生成、复用)。

Unity SpriteRenderer

导出前 · Unity: SpriteRenderer——精灵 EllenHealth Empty、颜色、绘制模式(简单)、材质 Sprites-Default。

Laya UI3D 组件

导出后 · LayaAir: 同一节点带 3D UI(UI3D) 组件,预制体指向 ..._sprite,UI3D 渲染模式 = 透明(AlphaBlend)——精灵在 3D 场景中渲染。

确定贴图引用方式——精灵占满整图则直引,精灵为大图子区域则导出 .atlas 并按子区域引用。

情况导出方式
精灵占满整张贴图直接用贴图 UUID 引用
精灵是贴图的一部分(spritesheet)导出一个 .atlas 文件(记录各子图在母图里的像素 rect)+ 用子贴图 URL 引用,并预加载该图集

本例 EllenHealth 是 spritesheet → 走图集模式,导出 EllenHealth.atlas,同母图的多个子图累加到同一个 atlas

导出的 atlas

导出后 · LayaAir: EllenHealth.atlas 的帧列表——Empty / Full / Gaining00–03 / Losing00–02 共 9 个子图,都映射到母图 EllenHealth.png

UI3D 所引用的 2D 预制的内部结构(带 Mesh2DRender 的精灵)。 UI3D 引用的 .lh 预制就是一个标准的 Laya 2D 节点(带 Mesh2DRender 的精灵)。世界尺寸按精灵自然边界(像素 / pixelsPerUnit,Simple 绘制模式)或 size 属性换算,另算渲染分辨率。

导出的 2D 预制

导出后 · LayaAir: 2D 预制 EllenHealth_EllenHealth_Empty_sprite.lh——一个带 Mesh2DRender 的精灵节点,UI3D 把它当画面内容渲染到 3D 场景里。

多个相同精灵复用同一预制与图集;色彩动画接入 Animator2D。

  • A · 变体去重:同一精灵复用同一个 .lh 预制(多个物体引用同一精灵不重复导);图集模式下同母图的多个子图累加进同一个 .atlas
  • B · 色彩动画 → Animator2D:SpriteRenderer 的颜色动画导成 2D .mc + Animator2D,附到 2D 预制上(详见动画导出 ③)。

能力边界——空 SpriteRenderer(未挂精灵或精灵无贴图)被跳过,属预期行为。


本页基于插件 1.1.7 源码与实测整理。