返回顶部
首页 > 资讯 > 精选 >使用Unity怎么批量修改FBX模型
  • 206
分享到

使用Unity怎么批量修改FBX模型

2023-06-14 11:06:06 206人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关使用Unity怎么批量修改FBX模型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。using UnityEditor;using 

本篇文章给大家分享的是有关使用Unity怎么批量修改FBX模型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

using UnityEditor;using UnityEngine;using System.io;using System.Collections;using System.Collections.Generic;public class ModifyMoidel : Editor{    [MenuItem("BenBen/修改模型ModelScal")]    public static void ModifyMoidelScale()    {        List<string> paths = new List<string>();        foreach (Object o in Selection.GetFiltered(typeof(Object), SelectionMode.Assets))        {            Debug.Log(o.name);            //非对象不继续            if (!(o is GameObject))                continue;            //将o作为模型存储在mod中            //Debug.LogWarning(o.name);            GameObject mod = o as GameObject;            //将mod模型路径存储在path中            string path = AssetDatabase.GetAssetPath(mod);            ModelImporter modelimporter = ModelImporter.GetAtPath(path) as ModelImporter;            if (!modelimporter)            {                UnityEngine.Debug.LogError(string.FORMat("path-->{0}<---不是ModelImporter", path));                continue;            }            //修改Model 下的Scale Factor            modelimporter.globalScale = 10;            paths.Add(path);            AssetDatabase.ImportAsset(path);        }        AssetDatabase.Refresh();        CreatNewAnimations(paths);    }    private static void CreatNewAnimations(List<string> paths)    {        UnityEditor.Animations.AnimatorController animatorController = null;        UnityEditor.Animations.AnimatorControllerLayer layer = null;        UnityEditor.Animations.AnimatorStateMachine asm = null;        Debug.Log(paths.Count);        for (int i = 0; i < paths.Count; i++)        {            paths[i].Replace("\\", "/");            AnimationClip newClip = new AnimationClip();            AnimationClip clip = AssetDatabase.LoadAssetAtPath(paths[i], typeof(AnimationClip)) as AnimationClip;            if (!clip)            {                UnityEngine.Debug.LogError(string.Format("path-->{0}<--不包含AnimationClip", paths[i]));                continue;            }            string fbxName = Path.GetFileNameWithoutExtension(paths[i]);            fbxName = fbxName.Substring(fbxName.LastIndexOf("_") + 1);            //新的AnimationClip名字             var newClipName = GetAniName(int.Parse(fbxName)) + ".anim";            string directoryPath = paths[i].Replace(Path.GetFileName(paths[i]), "AnimationClip/");            if (!Directory.Exists(directoryPath))            {                Directory.CreateDirectory(directoryPath);            }            EditorCurveBinding[] binding = AnimationUtility.GetCurveBindings(clip);            for (int j = 0; j < binding.Length; j++)            {                AnimationCurve animationCurve = AnimationUtility.GetEditorCurve(clip, binding[j]);                AnimationUtility.SetEditorCurve(newClip, binding[j], animationCurve);            }            //非Legacy动画使用GetCurveBindings、GetEditorCurve和SetEditorCurve方法//Legacy要使用GetObjectReferenceCurveBindings、GetObjectReferenceCurve和SetObjectReferenceCurve方法            //设置AnimationClipSettings            AnimationUtility.SetAnimationClipSettings(newClip, AnimationUtility.GetAnimationClipSettings(clip));            string newClipPath = directoryPath + newClipName;            AssetDatabase.CreateAsset(newClip, newClipPath);            //生成animator            if (!animatorController)            {                animatorController = UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath(directoryPath + "Animator.controller");                layer = animatorController.layers[0];                asm = layer.stateMachine;            }            //添加到Animator中            UnityEditor.Animations.AnimatorState state = asm.AddState(newClip.name);            state.motion = newClip;            //如果是Idle 动画,设置loop            if (newClip.name == "Idle")            {                AnimationClipSettings animationClipSettings = AnimationUtility.GetAnimationClipSettings(newClip);                animationClipSettings.loopTime = true;                AnimationUtility.SetAnimationClipSettings(newClip, animationClipSettings);                layer.stateMachine.defaultState = state;            }            AssetDatabase.ImportAsset(paths[i]);        }        AssetDatabase.Refresh();    }    private static string GetAniName(int count)    {        switch (count)        {            case 1:                return "Idle";            case 2:                return "2-1";            case 3:                return "2-2";            case 4:                return "2-3";            case 5:                return "2-4";            default:                return "";        }    }}

如果有更简单的实现方法欢迎各位大佬留言。

补充:Unity 动态修改prefab 同步fbx

有时候我们想prefab和fbx无缝切换怎么办,也就是在unity里调完效果后不满意,返回dcc如阿健修改模型,但是prefab上又挂载了东西,不想重拖怎么办?这时候prefab variant就又用途了

使用Unity怎么批量修改FBX模型

建立变体,把变体拖到场景里。

或者先拖fbx到场景,再选择变体放置。

然后修改好模型后,直接再在文件浏览器里替换同名prefab

貌似需要到prefab模式里再revert一下

这样就可以实现“动态”修改perfab了。没改变的话可以右键相关属性revert

使用Unity怎么批量修改FBX模型

使用Unity怎么批量修改FBX模型

以上就是使用Unity怎么批量修改FBX模型,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 使用Unity怎么批量修改FBX模型

本文链接: https://lsjlt.com/news/270569.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用Unity怎么批量修改FBX模型
    本篇文章给大家分享的是有关使用Unity怎么批量修改FBX模型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。using UnityEditor;using ...
    99+
    2023-06-14
  • Unity 如何批量修改FBX模型
    由于模型数量有点多,并且都要修改参数,还有从里面提取动画。就搜搜查查,搞了个小工具,批量的修改 FBX 模型的 参数,以及提取动画相关。 using UnityEditor; u...
    99+
    2024-04-02
  • Unity 修改FBX模型动画的操作
    如何在Unity里修改FBX模型自带的动画 我们在把模型做成预制体的时候会出现,模型当前看到的位置和动画播放的位置不一致,而且模型动画文件又是只能读不能改 就这种情况 修改办法 选...
    99+
    2024-04-02
  • 如何在Unity中修改FBX模型动画
    这篇文章给大家介绍如何在Unity中修改FBX模型动画,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。修改办法选择模型的动画文件按Ctrl+D复制一份出来再修改就行了,然后在重新引用复制出来的新动画文件补充:unity中...
    99+
    2023-06-14
  • springboot怎么批量修改redis
    Spring Boot中可以使用RedisTemplate来操作Redis,可以通过以下步骤来批量修改Redis中的数据:1. 在S...
    99+
    2023-08-31
    redis springboot
  • 使用dos命令怎么批量修改文件名
    使用dos命令批量修改文件名的方法:1.使用组合键“win+R”输入cmd,点击“确定”;2.进入dos窗口;3.使用cd命令切换到文件夹目录;4.执行ren命令修改文件名;具体步骤如下:首先,在计算机中使用组合键“win+R”输入cmd,...
    99+
    2024-04-02
  • 使用R语言怎么批量修改文件名
    本篇文章给大家分享的是有关使用R语言怎么批量修改文件名,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 修改文件扩展名folder<-setwd('~/t...
    99+
    2023-06-09
  • mybatis怎么批量修改数据
    这篇文章给大家分享的是有关mybatis怎么批量修改数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。批量修改主要有两种方式第一种可以通过for循环一条一条修改数据,这样会影响效率,因此我不推荐,所以在这里我也不...
    99+
    2023-06-29
  • jpa怎么批量修改并发
    在JPA中,可以使用以下方法批量修改并发:1. 使用批量更新操作:JPA提供了`@Modifying`和`@Query`注解,可以在...
    99+
    2023-09-07
    jpa
  • golang怎么实现批量修改
    这篇文章主要介绍了golang怎么实现批量修改的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇golang怎么实现批量修改文章都会有所收获,下面我们一起来看看吧。一、批量修改的常见场景在实际的项目中,我们经常需要...
    99+
    2023-07-06
  • Python利用os模块批量修改文件名
    初学Python.随笔记录自己的小练习. 通过查阅资料os模块中rename和renames都可以做到 他们的区别为.rename:只能修改文件名   renames:可以修改文件名,还可以修改文件上级目录名称 另一个用到的方法是os.l...
    99+
    2023-01-31
    文件名 批量 模块
  • SQL中怎么用update批量修改数据
    在SQL中,可以使用UPDATE语句来批量修改数据。语法如下: UPDATE table_name SET column1 = va...
    99+
    2024-04-02
  • php怎么批量修改文件名
    在PHP中,可以使用`scandir`函数来获取指定目录下的文件列表,然后使用`rename`函数来修改文件名。以下是一个示例代码,...
    99+
    2023-10-07
    php
  • Linux怎么批量修改文件名
    本篇内容介绍了“Linux怎么批量修改文件名”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!环境Centos7.7安装mmv在默认情况下,Ce...
    99+
    2023-06-28
  • win7怎么批量修改文件名
    在Win7中,你可以通过以下方法批量修改文件名:1. 选择需要修改文件名的文件,可以使用Ctrl键进行多选或者使用Shift键进行连...
    99+
    2023-09-08
    win7
  • plsql怎么批量修改字段值
    在PL/SQL中,可以使用UPDATE语句来批量修改字段值。以下是一个示例:```plsqlDECLARE-- 定义变量v_new_...
    99+
    2023-10-12
    plsql
  • sql怎么批量修改表数据
    要批量修改表数据,可以使用SQL的UPDATE语句结合WHERE子句来实现。以下是一个示例: 假设有一个名为students...
    99+
    2024-04-08
    sql
  • oracle怎么批量修改字段值
    要批量修改Oracle数据库中的字段值,可以使用UPDATE语句。下面是一个示例: UPDATE 表名 SET 字段名 = 新值 W...
    99+
    2024-04-09
    oracle
  • 怎么用bat批处理实现批量修改文件名
    这篇文章主要讲解了“怎么用bat批处理实现批量修改文件名”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用bat批处理实现批量修改文件名”吧!我们已经会使用循环命令对大量文件改名进行批量处...
    99+
    2023-06-08
  • 怎么用bat批处理批量修改文件扩展名
    本篇内容主要讲解“怎么用bat批处理批量修改文件扩展名”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用bat批处理批量修改文件扩展名”吧!有的时候我们可能会遇到,在一个文件夹内有很多个文件,...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作