Unity3d的模型自动导入帧数表

http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html

  开发被时时用,对美术模型进行一些拍卖。(以fbx为条例)

Apache Hadoop YARN

YARN的第一意义包括:资源管理及任务调度及监督,它们各自都是单身的看护进程。要实现这个目标,必须有一个大局的资源管理器和每个应用还发出一个ApplicationMaster(AM)。应用可以是单个job,也堪是DAG
jobs。

ResourceManager和NodeManager组成数据计算框架。ResourceManager对系受具备以的资源有着最后仲裁权。NodeManager对容器负责,监控她的资源使状况,并且用那个告知让ResourceManager。

每个应用还生一个ApplicationMaster,它承担往ResourceManager申请资源,并且和NodeManager一起指向和监察任务。

图片 1

于这幅图中,有一定量个客户端都提交了职责,可以看看NodeManager向ResourceManager报告,ApplicationMaster向Resource申请资源又监控任务执行。

 

ResourceManager有少数独重要的零部件:Scheduler和ApplicationManager

Scheduler负责分配资源

ApplicationManager负责接受提交的职责,并且分配第一独container为了执行一定的ApplicationMaster。每个应用之ApplicationMaster负责向Scheduler申请适量的资源,并且跟踪资源的状态和督查进度。

 

小结一下:

1、ResourceManager包括Scheduler和ApplicationManager

2、ResourceManager负责集众多被有应用的资源分配(资源包括内存、CPU、磁盘、网络等等)

3、Scheduler只是一个光的调度器,负责为不同的使分配资源

4、每个应用还产生一个ApplicationMaster,它承担往ResourceManager申请资源,并且跟踪资源的使用情况还有任务之行情况

5、NodeManager负责运行而管理仍节点的器皿(资源)。AppMaster指定容器来运行任务。(也就是说任务是当容器被运行的)

图片 2

 

用,任务的实践是这样的:

1、客户端提交任务到ResourceManager

2、ApplicationManager接收任务,并且指定一个NodeManager给它分配第一只资源(container)用户执行ApplicationMaster

3、NodeManager启动一个ApplicationMaster

4、AppicationMaster向ResourceManager申请资源(PS:其实是望Scheduler申请),并且监控资源的采用状态,监控任务的实践进度

5、任务开始实施

 

总的看,AppMaster负责协调并监控资源,NodeManager负责管理本地资源,启动/停止任务

 

参考

http://blog.csdn.net/liuwenbo0920/article/details/43304243

http://blog.csdn.net/paicMis/article/details/53890676

https://www.cnblogs.com/chushiyaoyue/p/5784871.html

 

  例如,需要拿动作的讳、start和end加入animations的clips。

  如果手动操作,就是在模型的Inspector窗口,一个动作点一次于加号,然后编辑start和end。一个模往往十几个动作,这样做大鲜明浪费人力。

  因此要一个得以自动导入帧数表的工具,工具应该享有一下成效。

  1、根据部署(txt或者json)自动装模型参数

  配置的格式根据使用习惯,txt、json都得以,这里以txt。用File.ReadAllLines(“路径”),可以得到配置的每一样履行信息,只要以规定措施填写,就好分析出我们怀念使的参数。

  例如 动作名+制表符+start+制表符+end。

  2、每次导入模型时,自动生效

  继承了AssetPostprocessor,并且放置Editor目录下,每次资源来反时会自行调用内的方法。

  3、批量甩卖每一个动作。

  如下,将首先步取出来的参数,用脚方法填入clip列表中,然后复制给范的ModelImporter的clipAnimations。

 public class clipArrayListCreater
    {
        private List<ModelImporterClipAnimation> clipList = new List<ModelImporterClipAnimation>();
        public void addClip(string name, int firstFrame, int lastFrame, bool loop, WrapMode wrapMode)
        {
            ModelImporterClipAnimation tempClip = new ModelImporterClipAnimation();
            tempClip.name = name;
            tempClip.firstFrame = firstFrame;
            tempClip.lastFrame = lastFrame;
            tempClip.loop = loop;
            tempClip.wrapMode = wrapMode;
            clipList.Add(tempClip);
        }
        public ModelImporterClipAnimation[] getArray()
        {
            return clipList.ToArray();
        }
    }

  5、设置模型类型及动作误差

  ModelImporter中几只参数一般还当导入时索要处理,animationType
,animationCompression,animationPositionError
,**
animationRotationError,***animationScaleError 。*

  一般根据需要安装即可。

  有几接触要说明

  1、帧数表底命名需要自然专业,如,模型名+“帧数表”,

  2、模型应该还放指定目录,方便管理和工具集中处理。

  把代码放到工程里,路径仍自己的来,等待转菊完成,就duang的一念之差帧数表自动导入了。

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

public class AssetsImportTools : AssetPostprocessor
{

    void OnPreprocessModel()
    {
        ModelImporter modelImporter = (ModelImporter)assetImporter;
        string lode = modelImporter.assetPath;
        if (lode.Contains("Assets/Avatars/FBX"))//模型目录
        {
       //模型类型和动作误差
            modelImporter.animationType = ModelImporterAnimationType.Legacy;
            modelImporter.animationCompression = ModelImporterAnimationCompression.KeyframeReduction;
            modelImporter.animationPositionError = 0.5f;
            modelImporter.animationRotationError = 0.5f;
            modelImporter.animationScaleError = 0.5f;
            lode = lode.Replace(".FBX", "帧数表.txt");
            if (!File.Exists(lode))
            {
                Debug.Log(lode + "不存在");
                return;
            }
            string[] modellist = File.ReadAllLines(lode);
            editorImporterUtil.clipArrayListCreater creater = new editorImporterUtil.clipArrayListCreater();
            for (int i = 0; i < modellist.Length; i++)
            {
                if (modellist[i].Contains("//") || string.IsNullOrEmpty(modellist[i]))//注释和空字符串跳过
                    continue;
                string[] s = modellist[i].Split('\t');//按照制表符切割为,名称 start end 是否循环(可选参数,非必填)
                if (s.Length < 3)
                {
                    if (EditorUtility.DisplayDialog("错误", "{0} 文件的第".EFormat(lode) + (i + 1) + "行出错", "确定"))
                    {
                        return;
                    }
                }
                bool isLoop = false;
                if (s[0] == "idle" )//循环的动作可以在这里设置,也可以在配置中设置
                    isLoop = true;
                else
                    isLoop = false;
                if (s.Length==4)
                {
                    if (!string.IsNullOrEmpty(s[3]))
                    {
                        isLoop = s[3] == "1";
                    }
                }
                if (isLoop)
                    creater.addClip(s[0], int.Parse(s[1]), int.Parse(s[2]), false, WrapMode.Loop);
                else
                    creater.addClip(s[0], int.Parse(s[1]), int.Parse(s[2]), false, WrapMode.Default);
                modelImporter.clipAnimations = creater.getArray();
            }
        }
    }
}
namespace editorImporterUtil
{
    public class clipArrayListCreater
    {
        private List<ModelImporterClipAnimation> clipList = new List<ModelImporterClipAnimation>();
        public void addClip(string name, int firstFrame, int lastFrame, bool loop, WrapMode wrapMode)
        {
            ModelImporterClipAnimation tempClip = new ModelImporterClipAnimation();
            tempClip.name = name;
            tempClip.firstFrame = firstFrame;
            tempClip.lastFrame = lastFrame;
            tempClip.loop = loop;
            tempClip.wrapMode = wrapMode;
            clipList.Add(tempClip);
        }
        public ModelImporterClipAnimation[] getArray()
        {
            return clipList.ToArray();
        }
    }
}

 

  

  

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注