Unity3D 修改动画,资源文件设置

本文介绍了如何使用YamlDoNet插件批量修改Unity项目的.meta文件,以实现对动画文件等资源的设置批量更新。通过解析和编辑.yaml格式的.meta文件,可以精确并快速地更改资源设置,避免了通过Unity接口逐个修改的繁琐过程。示例展示了修改动画片段名称的过程,包括读取.meta文件、修改Yaml数据、保存并替换原文件,最终实现设置的修改并重新导入资源。
摘要由CSDN通过智能技术生成

导出到项目中的动画文件,或者其他类型的资源文件(图片,音频...),通常是需要在面板中修改一下设置的。少量修改可以手动处理,当需要批量修改设置时,就会想到做个工具批量修改。

之前做过批量修改动画文件得一些设置的工具,发现一部分设置代码修改相对简单,而很多设置代码很难修改,或者说改完的结构不尽人意。

通过观察可以发现,这些设置改动基最终都修改的是文件对应.meta文件。然后就有了一个想法,与其费时费力找unity提供的接口修改面板中的参数,为什么不直接修改.meta文件呢,最终结果是一样的呀。

.meta是个格式化文本文件,普通的修改方式,很难按照原来格式修改,也难以读取。

经过一系列查资料发现:.meta文件是yaml格式的,这就引出了YamlDoNet插件。利用这个c#的插件,可以快速精准的修改.meta了。

使用yaml工具修改meta大概过程如下(一个修改动画片段名称的示例)

ModelImporter importer = AssetImporter.GetAtPath(GetAssetPath(sModelPath)) as ModelImporter;

//读取meta文件到yaml数据
string sMetaPath = sModelPath + ".meta"; 
string content = File.ReadAllText(sMetaPath); 
var input = new StringReader(content); 
var yaml = new YamlStream();
yaml.Load(input);

//修改yaml数据
var mapping = (YamlMappingNode)yaml.Documents[0].RootNode;
foreach (var entry in mapping.Children)
{
    if (((YamlScalarNode)(entry.Key)).Value == "ModelImporter")
    { 
	ModeifyClip((YamlMappingNode)entry.Value, 0, importer.clipAnimations[0].name, sNewName);
	break;
    }
}

//保存yaml数据到临时文件
string sTmpMeta = sMetaPath + ".tmp";
StreamWriter writer = new StreamWriter(sTmpMeta);
yaml.Save(writer, false);
writer.Close();

//把临时文件内容替换到meta文件
//替换''\r\n为\r\n
string sMetaTmpContent = File.ReadAllText(sTmpMeta);
//替换Yaml产生的...
sMetaTmpContent = sMetaTmpContent.Replace("...\r\n", "").Replace("''\r\n", "\r\n").Replace("\r\n", "\n");
File.WriteAllText(sTmpMeta, sMetaTmpContent);
File.Delete(sMetaPath);
File.Copy(sMetaPath + ".tmp", sMetaPath);
File.Delete(sMetaPath + ".tmp");
//重新导入资源--可以发现此时设置已经修改生效
importer.SaveAndReimport();

yaml链接

https://download.csdn.net/download/big_cabbage/20429925

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值