最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity 如何批量修改FBX模型

 更新時(shí)間:2021年04月10日 13:12:12   投稿:jingxian  
這篇文章主要介紹了Unity 批量修改FBX模型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

由于模型數(shù)量有點(diǎn)多,并且都要修改參數(shù),還有從里面提取動(dòng)畫(huà)。就搜搜查查,搞了個(gè)小工具,批量的修改 FBX 模型的 參數(shù),以及提取動(dòng)畫(huà)相關(guān)。

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);
            //非對(duì)象不繼續(xù)
            if (!(o is GameObject))
                continue;
            //將o作為模型存儲(chǔ)在mod中
            //Debug.LogWarning(o.name);
            GameObject mod = o as GameObject;
            //將mod模型路徑存儲(chǔ)在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動(dòng)畫(huà)使用GetCurveBindings、GetEditorCurve和SetEditorCurve方法
			//Legacy要使用GetObjectReferenceCurveBindings、GetObjectReferenceCurve和SetObjectReferenceCurve方法
            //設(shè)置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 動(dòng)畫(huà),設(shè)置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 "";
        }
    }
}

如果有更簡(jiǎn)單的實(shí)現(xiàn)方法歡迎各位大佬留言。

補(bǔ)充:Unity 動(dòng)態(tài)修改prefab 同步fbx

有時(shí)候我們想prefab和fbx無(wú)縫切換怎么辦,也就是在unity里調(diào)完效果后不滿意,返回dcc如阿健修改模型,但是prefab上又掛載了東西,不想重拖怎么辦?這時(shí)候prefab variant就又用途了

建立變體,把變體拖到場(chǎng)景里。

或者先拖fbx到場(chǎng)景,再選擇變體放置。

然后修改好模型后,直接再在文件瀏覽器里替換同名prefab

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

這樣就可以實(shí)現(xiàn)“動(dòng)態(tài)”修改perfab了。沒(méi)改變的話可以右鍵相關(guān)屬性revert

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • rsa加密算法使用示例分享

    rsa加密算法使用示例分享

    這篇文章主要介紹了rsa加密算法使用示例,代碼中有注釋,大家參考使用吧
    2014-01-01
  • C# PropertyGrid使用案例詳解

    C# PropertyGrid使用案例詳解

    這篇文章主要介紹了C# PropertyGrid使用案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#利用System.Uri轉(zhuǎn)URL為絕對(duì)地址的方法

    C#利用System.Uri轉(zhuǎn)URL為絕對(duì)地址的方法

    這篇文章主要介紹了C#利用System.Uri轉(zhuǎn)URL為絕對(duì)地址的方法,涉及C#操作URL的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-02-02
  • openfiledialog讀取txt寫(xiě)入數(shù)據(jù)庫(kù)示例

    openfiledialog讀取txt寫(xiě)入數(shù)據(jù)庫(kù)示例

    這篇文章主要介紹了openfiledialog讀取txt寫(xiě)入數(shù)據(jù)庫(kù)示例,需要的朋友可以參考下
    2014-03-03
  • C#中Linq的入門(mén)教程

    C#中Linq的入門(mén)教程

    這篇文章介紹了C#中Linq的基礎(chǔ)操作,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#生成餅形圖及添加文字說(shuō)明實(shí)例代碼

    C#生成餅形圖及添加文字說(shuō)明實(shí)例代碼

    這篇文章主要介紹了C#生成餅形圖及添加文字說(shuō)明的方法,非常實(shí)用的功能,需要的朋友可以參考下
    2014-07-07
  • C#使用鉤子獲得按鍵信息的方法

    C#使用鉤子獲得按鍵信息的方法

    這篇文章主要介紹了C#使用鉤子獲得按鍵信息的方法,實(shí)例分析了C#中鉤子的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-05-05
  • C#實(shí)現(xiàn)為視頻添加水印

    C#實(shí)現(xiàn)為視頻添加水印

    這篇文章主要為大家詳細(xì)介紹了C#如何使用ffmpeg命令,分別實(shí)現(xiàn)給視頻添加圖片水印以及文字水印,文中的示例代講解詳細(xì),感興趣的可以了解一下
    2023-01-01
  • C#批量刪除Excel重復(fù)項(xiàng)的實(shí)現(xiàn)方法

    C#批量刪除Excel重復(fù)項(xiàng)的實(shí)現(xiàn)方法

    當(dāng)從不同來(lái)源導(dǎo)入Excel數(shù)據(jù)時(shí),可能存在重復(fù)的記錄,為了確保數(shù)據(jù)的準(zhǔn)確性,通常需要?jiǎng)h除這些重復(fù)的行,本文將提供一個(gè)使用C# 快速查找并刪除Excel重復(fù)項(xiàng)的免費(fèi)解決方案,需要的朋友可以參考下
    2024-04-04
  • Unity調(diào)用打印機(jī)打印圖片

    Unity調(diào)用打印機(jī)打印圖片

    這篇文章主要為大家詳細(xì)介紹了Unity通過(guò)調(diào)用打印機(jī)打印圖片的代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評(píng)論

永兴县| 屯留县| 逊克县| 阿克| 高平市| 澄迈县| 清流县| 会泽县| 宜丰县| 会宁县| 五莲县| 清新县| 白沙| 平谷区| 紫云| 抚州市| 霍林郭勒市| 肃北| 襄汾县| 牡丹江市| 福安市| 清水河县| 广灵县| 承德市| 太保市| 翁源县| 三门县| 昂仁县| 栖霞市| 察哈| 舟山市| 临猗县| 延津县| 连江县| 郎溪县| 师宗县| 介休市| 马鞍山市| 青海省| 大安市| 宝丰县|