当前位置:网站首页>【unity编译器扩展之模型动画拷贝】
【unity编译器扩展之模型动画拷贝】
2022-08-05 00:02:00 【的成长之路】
首先得拿到要拷贝动画的模型,路径或者object
有一些类不熟悉的直接查官方API:unity官方API
关键类:AssetDatabase,AssetImporter
如果是UnityEngine.Object 类型的文件话,可以直接使用
AssetDatabase.GetAssetPath(Object):拿到文件路径(相对路径)
AssetDatabase.LoadAllAssetsAtPath(path):可以直接拿到文件身上的组件,例如FBX文件身上的AnimationClip等(相对路径)
AssetImporter.GetAtPath(Path):可以通过路径获取资源(相对路径),AssetImporter类下有多个子类,对于各种unity资源,可以转换
AnimatorController :动画状态机(动画控制器)
首先获得模型身上的动画
List<AnimationClip> tempAnim= new List<AnimationClip>;
UnityEngine.Object[] objs = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(fbx));
foreach(var item in objs){
if(item is AnimationClip){
tempAnim.Add(item);
}
}
拿到模型后去选择我们要拷贝的某个动画,我这就默认随便选择一个了,如果是选择多个,那么就同理就好
然后进行拷贝
拷贝需要拿到新拷贝的名字,和要拷贝的动画,还有就是模型的路径或者模型本身
static void CopyAnimationClip(UnityEngine.Object obj, string clipName, string newName)
{
string path = AssetDatabase.GetAssetPath(obj);
ModelImporter modelImporter = AssetImporter.GetAtPath(path) as ModelImporter;
if. (modelImporter.clipAnimations = null && modelImporter.clipAnimations.Length › 0)
{
ModelImporterClipAnimation[] clips = new ModelImporterClipAnimation(modelImporter.clipAnimations.Length+1];
modelImporter.clipAnimations.CopyTo(clips,0);
List<ModelImporterClipAnimation> clipList = new List<ModelImporterClipAnimation>(modelImporter.clipAnimations);
ModelImporterClipAnimation srcClip = clipList.Find( (× ) =› ( return x.name.Equals (clipName); });
ModelImporterClipAnimation newClip = new ModelImporterClipAnimation();
Type t = newClip.GetType();
foreach (var item Propertyinfo in srcClip.GetType().GetProperties())
{
if (item.GetSetMethod (false) == null)
continue;
if (item.GetValue(srcClip) == null)
continue;
t.GetProperty(item Name). SetValue ( newClip, item.GetValue(srcClip));
}
newClip.name = newName;
clips[clips. Length - 1] = newClip;
modelImporter.clipAnimations = clips;
AssetDatabase.ImportAsset(path);
AssetDatabase.Refresh();
}
}
代码纯手敲,有问题该巴该巴就好了
边栏推荐
- uniapp sharing function - share to friends group chat circle of friends effect (sorting)
- 性能测试如何准备测试数据
- The master teaches you the 3D real-time character production process, the game modeling process sharing
- Privacy Computing Overview
- NebulaGraph v3.2.0 Release Note,对查询最短路径的性能等多处优化
- Security software Avast and Symantec NortonLifeLock merge with UK approval, market value soars 43%
- Basic web in PLSQL
- Handwritten Distributed Configuration Center (1)
- 从单体架构迁移到 CQRS 后,我觉得 DDD 并不可怕
- LeetCode Hot 100
猜你喜欢

三大技巧让你成功入门3D建模,零基础小白必看
![情侣牵手[贪心 & 抽象]](/img/7d/1cafc000dc58f1c5e2e92150be7953.png)
情侣牵手[贪心 & 抽象]

Develop a SpaceX website based on the Appian low-code platform
情人节---快来学习一下程序员的专属浪漫吧

uniapp横向选项卡(水平滚动导航栏)效果demo(整理)

【Valentine's Day special effects】--Canvas realizes full screen love

Flutter启动流程(Skia引擎)介绍与使用

Getting started with 3D modeling for games, what modeling software can I choose?

游戏3D建模入门,有哪些建模软件可以选择?

Xiaohei's leetcode journey: 95. Longest substring with at least K repeating characters
随机推荐
mysql基础
导入JankStats检测卡帧库遇到问题记录
Day118.尚医通:订单列表、详情、支付
【手撕AHB-APB Bridge】~ AMBA总线 之 AHB
数据类型及输入输出初探(C语言)
【数据挖掘概论】数据挖掘的简单描述
Chinese and Japanese color style
KT148A电子语音芯片ic方案适用的场景以及常见产品类型
Nuclei(二)进阶——深入理解workflows、Matchers和Extractors
Pytorch分布式训练/多卡/多GPU训练DDP的torch.distributed.launch和torchrun
Bidding Announcement | Operation and Maintenance Project of Haina Baichuang Official Account
怎么将自己新文章自动推送给自己的粉丝(巨简单,学不会来打我)
10 个关于 Promise 和 setTimeout 知识的面试题,通过图解一次说透彻
LeetCode Hot 100
golang 协程的实现原理
游戏3D建模入门,有哪些建模软件可以选择?
Statistical words (DAY 101) Huazhong University of Science and Technology postgraduate examination questions
怎样进行在不改变主线程执行的时候,进行日志的记录
2022年华数杯数学建模
what?测试/开发程序员要被淘汰了?年龄40被砍到了32?一瞬间,有点缓不过神来......