0
点赞
收藏
分享

微信扫一扫

动画设置脚本

weednoah 2022-01-30 阅读 56
动画
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
using FluffyUnderware.DevTools.Extensions;

public class ModelSet : EditorWindow
{
    private Avatar _srcAvatarPrefab;
    //%:ctrl,#:shift,&:alt
    [MenuItem("Tools/ArtTools/动画设置 %#&X")]
    static void Init()
    {
        EditorWindow.GetWindow(typeof(ModelSet));
    }
     void OnGUI()
    {
        _srcAvatarPrefab = EditorGUILayout.ObjectField(_srcAvatarPrefab,typeof(Avatar)) as Avatar;
        if (GUILayout.Button("设置AvatarMask"))
        {
            if (_srcAvatarPrefab != null)
            {
                ModelImporterSet();
            }
        }
        EditorGUILayout.EndScrollView();
    }
     void ModelImporterSet()
    {
        if (Selection.objects == null || Selection.objects.Length == 0)
        {
            Debug.LogWarning("You must select an object first");
            return;
        }
        
        bool isLoop = EditorUtility.DisplayDialog("Loop Time","选择是否循环", "是","否");  //---弹窗设置Loop Time
        foreach (Object obj in Selection.objects)
        {
            string assetPath = AssetDatabase.GetAssetPath(obj);
            ModelImporter modelImp = AssetImporter.GetAtPath(assetPath) as ModelImporter;
            if (modelImp != null)
            {
                RigSet(modelImp,_srcAvatarPrefab);
                AnimSetup(modelImp, obj.name, isLoop);
                MatSet(modelImp);
                modelImp.SaveAndReimport();
                ExtractAnim(assetPath);
            }
        }
        AssetDatabase.SaveAssets();
        bool isCloseWindow = EditorUtility.DisplayDialog("完成", "设置完成", "关闭窗口","不关闭窗口");
        if (isCloseWindow)
        {
            EditorWindow.GetWindow(typeof(ModelSet)).Close();
        }
    }

     // 提取动画
     void ExtractAnim(string assetPath)
     {
         var assets = AssetDatabase.LoadAllAssetsAtPath(assetPath);
         foreach (Object asset in assets)
         {
             AnimationClip animationClip = asset as AnimationClip;
             if (animationClip == null)
                 continue;
             if (animationClip.name.StartsWith("__preview__"))
                 continue;
             string dstPath = Path.GetDirectoryName(assetPath) + "/" + animationClip.name + ".anim";
             AssetDatabase.CreateAsset(AnimationClip.Instantiate(asset), dstPath);
         }
     }
    
    //---Animation设置
    void AnimSetup(ModelImporter modelImp, string name, bool isLoop)
    {
        modelImp.importAnimation = true;  //---Import Animation 勾选
        modelImp.motionNodeName = "<Root Transform>";
        int count = modelImp.defaultClipAnimations.Length;  //---Clips动画数量
        ModelImporterClipAnimation[] newClips = new ModelImporterClipAnimation[count];  //---创建动画容器数组
        
        for (int i = 0; i < count; i++)
        {
            ModelImporterClipAnimation oldClip = modelImp.defaultClipAnimations[i];
            ModelImporterClipAnimation newClip = new ModelImporterClipAnimation
            {
                name = name,
                takeName = name,        
                curves = oldClip.curves,
                firstFrame = oldClip.firstFrame,
                lastFrame = oldClip.lastFrame,
                lockRootRotation = false,
                lockRootHeightY = false,
                lockRootPositionXZ = false,
                loopTime = isLoop,
                maskType = ClipAnimationMaskType.None,
            };
            newClips[i] = newClip;
        }
        modelImp.clipAnimations = newClips;
    }
    //--Rig设置
    void RigSet(ModelImporter modelImp,Avatar avatar)
    {
        modelImp.animationType = ModelImporterAnimationType.Generic;
        modelImp.avatarSetup = ModelImporterAvatarSetup.CopyFromOther;
        modelImp.sourceAvatar = avatar;
        modelImp.skinWeights = ModelImporterSkinWeights.Standard;
    }
    //--Materials设置
    void MatSet(ModelImporter modelImp)
    {
        modelImp.materialImportMode = ModelImporterMaterialImportMode.None;
    }
}
举报

相关推荐

0 条评论