IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 动画设置脚本 -> 正文阅读

[游戏开发]动画设置脚本

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;
    }
}
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章           查看所有文章
加:2022-02-01 20:55:16  更:2022-02-01 20:56:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:46:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码