You need to enable JavaScript to run this app. 如何在Unity中导入SVG文件并保留原有分组(图层)?
优惠活动
大模型
产品
解决方案
定价
更多

如何在Unity中导入SVG文件并保留原有分组(图层)?

Unity 2018.4.6f1 导入SVG保留图层分组的解决方案

Unity官方的Vector Graphics包默认导入逻辑会将整个SVG文件扁平化处理为单个Sprite,确实不会保留原始的group(图层)结构,可通过以下几种方式实现分层导入:

方案1:手动拆分导入(适合少量简单SVG)

  • 先在矢量编辑工具(如Inkscape、Adobe Illustrator)中打开原SVG文件,将每个需要保留的group单独导出为独立的SVG文件
  • 将所有拆分后的SVG文件批量导入Unity后,按照原图层的层级顺序、坐标位置在场景中重新排列,即可还原原始分组结构
  • 该方案无需编写代码,兼容性最高,适合资源量不大的场景

方案2:调用Vector Graphics API自定义导入逻辑(适合批量处理)

你可以通过包提供的底层API直接解析SVG节点树,自行提取每个group生成独立资源,参考实现代码如下:

using Unity.VectorGraphics;
using UnityEngine;
using System.IO;

public class SvgLayerImportTool
{
    // 导入SVG并按group生成独立Sprite对象
    public static void ImportSvgPreserveLayers(string svgFilePath, float ppu = 100f)
    {
        if (!File.Exists(svgFilePath)) return;
        
        // 解析SVG原始节点结构
        string svgContent = File.ReadAllText(svgFilePath);
        SVGParser.SceneInfo sceneInfo = SVGParser.ImportSVG(svgContent);
        Scene rootScene = sceneInfo.Scene;

        // 遍历根节点下的所有一级group,嵌套group可扩展递归逻辑处理
        foreach (SceneNode node in rootScene.Root.Children)
        {
            if (node is GroupNode groupNode)
            {
                // 为当前group单独构建场景并生成Sprite
                Scene groupScene = new Scene { Root = groupNode };
                Sprite groupSprite = VectorUtils.BuildSpriteFromScene(groupScene, ppu);
                
                // 生成对应GameObject,挂载SpriteRenderer
                GameObject layerObj = new GameObject(string.IsNullOrEmpty(groupNode.ID) ? "UnnamedLayer" : groupNode.ID);
                SpriteRenderer renderer = layerObj.AddComponent<SpriteRenderer>();
                renderer.sprite = groupSprite;
                
                // 同步group的变换属性到GameObject
                layerObj.transform.localPosition = new Vector3(groupNode.Transform.m03, groupNode.Transform.m13, 0);
                layerObj.transform.localScale = new Vector3(groupNode.Transform.m00, groupNode.Transform.m11, 1);
            }
        }
    }
}
  • 注意事项:
    • 需使用和Unity 2018.4.6f1兼容的Vector Graphics版本,推荐使用1.0.0-preview.20版本
    • 如果SVG存在嵌套group,需要增加递归遍历逻辑处理所有层级的分组
    • 包含复杂特效(剪切路径、渐变、滤镜)的group,需要额外调整BuildSpriteFromScene的参数保证渲染效果正确

方案3:使用第三方SVG导入插件

部分第三方Unity SVG导入插件原生支持分层导入功能,导入时会自动将每个group生成独立的SpriteRenderer对象,无需自行开发导入逻辑。


内容的提问来源于stack exchange,提问作者xjoeabc3x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 06:48:04