u3d fbx动画模型生成Animator Controller和Prefab工具脚本

Unity 动态修改prefab 同步fbx 有时候我们想prefab和fbx无缝切换怎么办,也就是在unity里调完效果后不满意,返回dcc如阿健修改模型,但是prefab上又挂载了东西,不想重拖怎么办?这时候prefab variant就又用途了 建立变体,把变体拖到场景里。 或者先拖fbx到场景,再选择变体放置。 然后修改好模型后,直接再在文件浏览器里替换同名prefab 这样就可以实现“动态”修改perfab了。没改变的话可... 阅读详情

转载请注明:http://blog.youkuaiyun.com/xnn2s/article/details/52026853

当动画角色比较多的时候,策划一个一个配状态机和连线非常得麻烦。

实现一个脚本,将fbx动作文件生成状态机;也将模型fbx生成了Prefab,并将之前生成的状态机绑上去。

目前没有做状态之间的连线,状态切换程序自己控制。

做脚本的时候,参考了网上文章,然后,我以商业项目的要求实现了这个脚本。

using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEditor;
using UnityEditor.Animations;

public class BuildingEditor : MonoBehaviour
{
    static string ReadAnimationPath = Application.dataPath + "/Art/3D/Character";
    static string GenerateAnimatorPath = "Assets/Resources/Prefabs/Character/Animator";
    static string GeneratePrefabPath = "Assets/Resources/Prefabs/Character";

    [MenuItem("Tools/Generate Animator Prefabs")]
    public static void GenerateAnimatorPrefab()
    {
        List<string> files = new List<string>();
        FindFile(ReadAnimationPath, "*.fbx", files);
        Dictionary<string, List<string>> classifyFiles = new Dictionary<string, List<string>>();
        ClassifyFiles(files, classifyFiles);
        GenerateAnimatorPrefabs(classifyFiles);

        AssetDatabase.Refresh();
        AssetDatabase.SaveAssets();
    }

    static void GenerateAnimatorPrefabs(Dictionary<string, List<string>> classifyFiles)
    {
        foreach (KeyValuePair<string, List<string>> kvp in classifyFiles)
        {
            string controllerPath = kvp.Key;
            string name = string.Empty;
            int startIdx = controllerPath.LastIndexOf('\\');
            int pos = controllerPath.IndexOf('.');
            if (startIdx != -1 && pos != -1)
            {
                name = controllerPath.Substring(startIdx, pos - startIdx);
                controllerPath = name;
                controllerPath += ".controller";
                controllerPath = GenerateAnimatorPath + controllerPath;
                Debug.Log(controllerPath);
                GenerateAnimators(controllerPath, kvp.Value);
            }

            string fbxPath = kvp.Key;
            fbxPath = fbxPath.Substring(fbxPath.IndexOf("Assets\\"));
            GeneratePrefabs(name, fbxPath, controllerPath);
        }
    }

    static AnimatorController GenerateAnimators(string file, List<string> fbxs)
    {
        AnimatorController animator = AnimatorController.CreateAnimatorControllerAtPath(file);
        AnimatorControllerLayer layer = animator.layers[0];
        for (int i = 0; i < fbxs.Count; i++)
        {
            string fbx = fbxs[i];
            fbx = fbx.Substring(fbx.IndexOf("Assets\\"));
            Debug.Log(fbx);
            AnimationClip clip = AssetDatabase.LoadAssetAtPath<AnimationClip>(fbx);
            AnimatorStateMachine stateMachine = layer.stateMachine;
            AnimatorState state = stateMachine.AddState(clip.name, new Vector3(250, 52 * i, 0));
            state.motion = clip;
            int startIdx = fbx.IndexOf('@');
            if (fbx.Substring(startIdx + 1) == "idel_fight.FBX")
                stateMachine.defaultState = state;
        }

        //    AnimationClip clip = AssetDatabase.LoadAssetAtPath<AnimationClip>(DataPathToAssetPath(file1[i].FullName));
        //    if (clip.name == RUN_ANIMATION)
        //    {
        //        AnimatorState state = layer.stateMachine.AddState(clip.name, new Vector3(250, 0, 0));
        //        state.motion = clip;
        //        //添加转换状态,true代表激活退出状态
        //        state.AddTransition(layer.stateMachine.defaultState, true);
        //        // 播完动画才能退出
        //        state.transitions[0].exitTime = 1F;
        //        state.transitions[0].duration = 0;
        //    }
        return animator;
    }

    static void GeneratePrefabs(string name, string fbxPath, string controllerPath)
    {
        GameObject origalGo = AssetDatabase.LoadAssetAtPath<GameObject>(fbxPath);
        GameObject go = Instantiate(origalGo);
        EditorUtility.SetDirty(go);
        Selection.activeObject = go;

        if (!go.GetComponent<Animator>())
            go.AddComponent<Animator>();
        Animator animator = go.GetComponent<Animator>();
        animator.runtimeAnimatorController = AssetDatabase.LoadAssetAtPath<RuntimeAnimatorController>(controllerPath);
        animator.applyRootMotion = true;

        name = name.Replace('\\', '/');
        string prefabPath = GeneratePrefabPath + name + ".prefab";
        PrefabUtility.CreatePrefab(prefabPath, go);

        // Editor模式下只能用这个
        DestroyImmediate(go);
    }

    static void FindFile(string path, string searchPattern, List<string> files)
    {
        path += "\\";
        DirectoryInfo dir = new DirectoryInfo(path);
        foreach (DirectoryInfo di in dir.GetDirectories())
            FindFile(di.ToString(), searchPattern, files);

        foreach (FileInfo fi in dir.GetFiles(searchPattern))
            files.Add(fi.ToString());
    }

    static void ClassifyFiles(List<string> files, Dictionary<string, List<string>> classifyFiles)
    {
        for (int i = 0; i < files.Count; i++)
        {
            string file = files[i];
            int pos = file.IndexOf('@');
            string classifyName;
            if (pos == -1)
                classifyName = file;
            else
            {
                classifyName = file.Substring(0, file.IndexOf('@'));
                classifyName += ".FBX";
            }
            List<string> classifyFilesVal;
            if (classifyFiles.ContainsKey(classifyName))
            {
                classifyFilesVal = classifyFiles[classifyName];
                classifyFilesVal.Add(file);
            }
            else
            {
                classifyFilesVal = new List<string>();
                classifyFiles.Add(classifyName, classifyFilesVal);
            }
        }
    }
}
u3d5.3 版本,注意两个输出要自己建一下。

Unity中 Prefab导出FBX Unity 已经在Package Manager中集合了很多实用的插件,比如这里用到的FBX Exporter.也可以在你的 Hierarchy窗口中,选择你要到处的Prefab,右击选择Export To FBX...在Unity的菜单中Window ----> Package Manager,打开包管理界面。导出完成后,打开你的的导出目录,就可以看到导出的fbx了。选中你需要导出的文件 ,就可以直接导出FBX文件了,这里注意导出名字和导出路径,和选项里的导出格式。 阅读详情

相关推荐

不可能的工作:在FBX模型导入脚本中生成模型的预置体

不可能的工作:在FBX模型导入脚本中生成模型的预置体 #if UNITY_EDITOR using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using UnityEditor; using UnityEngine; publ...

c1sdn19的专栏 691

FBX生成Prefab

using UnityEngine; using UnityEditor; using System.IO; using System.Collections; public class GeneratePrefab { private static string prefabDirectory = "/Prefab/Monster"; private static strin

yuxikuo_1的专栏 7084

Unity3D 动态创建的Mesh,导出为Obj模型文件,并生成Prefab文件

Unity运行时,动态创建的Mesh挂载到MeshFilter组件上,并不能保存到本地Prefab文件里。在运行的场景里,拖拽正确配置的MeshFilter对象到Unity资源管理器。生成的Prefab文件,里面的Mesh对象会missing。所以,我们需要在运行状态,导出Mesh到本地生成一个obj模型文件。 原理,就是根据obj文件的属性,把运行时Mesh的顶点,索引,贴图数据转化为

把理性与逻辑灌入电光石火奔腾流淌的指令集…… 1万+

Unity批量提取FBX中动作,并加好动作,生prefab

主要实现从一个文件下记取美术给的文件,通过文件夹区分,然后取好里面的东西,生成文件夹,在文件下生成prefab using System; using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using Syst

AGroupOfRuffian的博客 3352

unity 导出prefab,格式为FBX

unity 导出prefab,格式为FBX,需要通过dll来导出,方便建模人员修改模型,很多时候是拼接的模型

Tessent --- PDL

当关联的ICL模块是当前ICL顶部模块时,即当它与当前设计匹配时,只能iCall一个iTopProc。但是,可以在iTopProc内调用iCall iProc或iTopProc。为指定后续iProc命令引用的ICL模块,发出这个命令之后,随后定义的iProc都会对应的ICL模块进行定义。为后续iCall调用,当使用iCall命令调用该过程时,参数列表中的变量将被替换为iCall命令中指定的值。在调用iProc时,运行iProc内的命令。PDL是面向工程师的,工程师利用PDL语言,对ICL中的单元进行控制。

qiantianyiqian的博客 2791

Unity3D研究院之Machine动画脚本自动生成AnimatorController(七十一)

http://www.xuanyusong.com/archives/2811 以前的项目一直不敢用Machine动画,因为当时立项的时候Machine动画还不成熟,最近项目做得差不多了我能有点时间学习,我就想在研究学习学习Machine。用Machine动画的时候需要创建一个AnimatorController这个文件,需要手动的把动画绑上去,我觉得这东西绝对不能手动绑上去,手动操作很

N的专栏 2306

openEuler 快速入门

openEuler 是一个专注于企业领域的 Linux 发行版,广泛应用于服务器、云计算和边缘计算场景。最初由华为开发,现在由 Open Atom Foundation 进行开发和管理。Open Atom Foundation 是中国第一个开源软件基金会,得到了华为、阿里巴巴、腾讯、百度等知名企业的支持,并且中国信息通信部也是该基金会的一部分。可以将 openEuler 看作是 Red Hat 或 SUSE Linux 的等价物,但它与 SUSE Linux 更为相似。

HuaweiLab_Peach的博客 2056

U3D双面解析:从Universal 3D格式到Unity3D引擎的技术演进与应用

在三维数字内容领域,3D数据交换与实时渲染是两大核心基础技术。数据交换格式旨在解决不同软件间的模型互通问题,其原理是通过定义标准化的几何、材质与动画数据结构,实现跨平台资产共享,其技术价值在于打破数据孤岛,提升协作效率,应用场景涵盖产品手册、在线展示等。而实时渲染引擎则基于图形管线与物理模拟,将数据实时转化为可视化交互内容。随着技术发展,早期如Universal 3D的格式因功能局限逐渐被现代标准如glTF取代,后者更好地支持了PBR材质等高级特性。与此同时,以Unity3D为代表的实时内容创作引擎,通过组

weixin_30336061的博客 306

从Unitree B2W到四足机器人:用Isaac Lab构建强化学习奖励函数的5个实战技巧

本文分享了在Isaac Lab仿真环境中,为Unitree B2W等四足机器人设计强化学习奖励函数的5个核心实战技巧。内容涵盖奖励函数的结构化组合、轮腿混合机器人的适配策略、课程学习的动态调整、域随机化增强鲁棒性以及高效的调试可视化方法,旨在帮助开发者构建更稳定、高效的机器人运动策略。

lg888的博客 1066

Nacos 从困惑到蒙圈(9)Nacos 适配 达梦数据库【最新版】

介绍Nacos适配达梦数据库的详细步骤,包括对最新版本的支持改造。

甘蓝的专栏 1378

Unity Fbx转Prefab工具

b.迭代器(注意:没有必要搞懂迭代如何实现,能用起来就可以)放心直接考到工程就可以用。b.同时为prefab预先按需挂载脚本文件。c.同时为挂载的脚本设置参数,绑定资源等。d.批量化处理,递归遍历算法,高效可扩展。a.可将fbx直接导出prefab。c.关键需要注意的方法。

李长江的博客 3988

【高级强化学习:算法、优化与泛化】第13章 扩散模型策略优化(Diffusion Policy Optimization)

\quad$ 计算均值 $\mu_t = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \tilde{\epsilon} \right)$.$\quad$ 组合得分估计: $\tilde{\epsilon} = \epsilon_{\text{unc}} + w \cdot (\epsilon_{\text{con}} - \epsilon_{\text{unc}})$.

u012133341的博客 339

unity将预制体写成fbx_unity 将fbx转成prefab

前段时间项目需要大量的fbx模型要转成prefab模式,手动拖入场景再拖出的话太麻烦,不方便,逼格不够高。于是写了个脚步,注意要放在Editor文件夹下。using UnityEngine;using UnityEditor;using System.IO;using System.Collections;/// /// fbx放在资源根目录的fbx文件夹中,脚步会遍历该目录,将fbx转成pref...

weixin_39807691的博客 3065

【Windows Server 2019】Active Directory Certificate Services 证书颁发机构的安装,配置和管理Ⅰ——AD CS的安装和配置

博文主要介绍了Windows Server 2019的证书颁发机构的安装和配置方法。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 4833

机器人动力学仿真软件:V-REP (CoppeliaSim)_(15).仿真项目案例分析

通过以上几个具体的仿真项目案例,我们展示了如何在V-REP (CoppeliaSim)中进行二次开发,实现复杂的机器人动力学仿真任务。这些案例涵盖了六轴机械臂的运动学仿真、移动机器人的路径规划和避障、以及无人机的飞行控制和环境感知。每个项目都通过编写Lua脚本实现了对机器人模型的控制和任务执行,并通过仿真结果分析验证了算法的有效性和系统性能。希望这些案例能够为读者在实际项目中使用V-REP (CoppeliaSim)提供有益的参考和启发。

kkchenjj的博客 1295

自动分离FBX中SkinnedMeshRenderer并生成prefab

using System.IO; using System.Collections.Generic; using UnityEngine; using UnityEditor; public class GenerateMeshAsset { private static string prefabDirectory = "Prefabs"; private static st

yuxikuo_1的专栏 2497

人工智能智能体研究综述:从理论架构到前沿应用

AI Agent,即人工智能智能体,是指能够在特定环境中自主感知、推理、决策并执行行动以实现特定目标的智能系统[1]。自主性反应性主动性(Pro-activeness)和社会性fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;AI Agent核心特征自主性 Autonomy反应性 Reactivity主动性 Pro-activeness。

nmdbbzcl的博客 902

【Unity】如何将资源包里的Prefabs资源为己所用

步骤一、将所需要的prefab从外部导入的资源拖入Scene中。二、右键该预制体,选择Unpack Prefab Completely取消该预制体及其子物体与资源包中预制体的关联。三、将该预制体拖动到自己的prefabs文件夹目录下,制作成自己项目的预制体。四、在Project面板下,右键该预制体,选择Export Package尝试将该预制体导出。五、对比Exporting package对话框中哪些资源文件不是在自己的项目目录下,把它们移动到自己的项目中。 游戏中经常需要使用到外部的美术资源,而从外部导

Sig的博客 4521

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Unity】FBX Exporter 的使用 (To 3ds Max 2018)

Unity版本:Unity 2019.4.4f1 3ds Max 版本:2018 (至少要 2017 以上的版本) 1、导入FBX Exporter 在Unity中,点击Window→Package Manager,然后找FBX Exporter; 如果在左边的列表中找不到,则在Advanced中勾选 Show preview packages : 选中FBX Exproter,然后点Instailling进行导入。 之后选择Edit→Project Settings→Fbx Expo.

魔术师Dix的博客 2万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Unity3D初步学习(纯小白)

因为公司项目功能设计部分需要有一个3D人物形象,需要人物形象可以运动到指定坐标,大概需求就是这个,所以开启了我的Unity3D学习之旅。 也是想到哪说到哪,而且可能有些概念不太准确,大家将就着看呀,以后可能再仔细整理,有不对的地方欢迎大家指出。 1、首先程序安装,我的安装包是朋友给的,也可以自己下载,Unity2017.4.3f1版本的,内置了monoDevelop, 红框标注的地方可...

qq_30234677的博客 1089

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

unity5怎样正确导入FBX,模型大小为什么会发生变化

以下两种导入方法哪一种是正确的呢?两者又有什么区别? 问题: ​通过unity导入(直接拖进去)。 ​2.在底层目录,Ctrl+C/V复制过去。 从结果看,我这两种操作,都会影响Model项里面的File Scale参数,并且两种操作影响的结果,数值都不一样。直接导入的结果是0.01,手动复制的则是0.0254。 这个参数是灰色的,无法手动修改。如下图。 该模型是我从Asse

cbbbc 1万+

unity3D 动态导入FBX、obj模型

公司项目的需求,需要动态的从本地导入FBX模型于是花了一天时间翻墙找到了一点可怜的资料。 1、这个可以动态加载OBJ模型,这个的话unity自带的有这个函数,当然OBJ模型是不带贴图的,对于一些场景是无法创建的。 http://download.youkuaiyun.com/detail/xiaomuzi0802/8316215 2、这个比较实用的,可以动态载入多种模型,特别是FBX模型,在创建场景时候

xiaomuzi0802的专栏 1万+

unity美术工具,根据fbx生成预制

给美术做个工具 主要用到的Unity类: EditorUtility PrefabUtility AssetDatabase var assetArr = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.Assets); if (assetArr.Length > 1) { EditorUtility.DisplayDialog("提示", "只能选一个包含模型的文件夹", "确定"); return

qq_40314347的博客 1379

【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )

一、向 Unity 中添加 FBX 模型、 二、向 Scene 场景中添加 FBX 模型、 三、3D 物体渲染、 四、3D 物体材质设置、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1万+

Unity(五) Unity3D使用Assetbundle打包加载(Prefab、场景)转载原博客

PS:以前看了很多文章,还是未能成功的打包预制和场景,今天看了这位作者的文章步骤很详细,特此转发链接共大家一起学习 感谢原作者!特此转载收藏学习 1: 链接:http://www.cnblogs.com/unity3ds/p/5912729.html Unity3D使用Assetbundle打包加载(Prefab、场景) 按照步骤来做,轻松实现。 2

LinZhonglong的博客 5099
上一篇: 渲染流水线
下一篇: U3D Resources & AssetBundle内存管理总结
herm_lib
博客等级 码龄16年 173粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值