Example #1
0
    private static Dictionary <string, AnimationClip> loadAnimClips(string name, ref string defaultAnimName)
    {
        var path = "Assets/Config/Animation/" + name + ".csv";

        var loader = new CSVLoader();
        var text   = readAllText(path);

        if (!loader.Load(text))
        {
            EditorUtility.DisplayDialog("错误", "加载动画表失败: " + path, "继续工作");
            return(null);
        }


        var nameCol    = loader.GetColumn("Name");
        var fbxCol     = loader.GetColumn("FBXPath");
        var defaultCol = loader.GetColumn("IsDefault");

        Dictionary <string, AnimationClip>  clips = new Dictionary <string, AnimationClip>();
        Dictionary <string, List <string> > infos = new Dictionary <string, List <string> >();

        for (int row = 0; row < loader.RowCount(); row++)
        {
            var fbxPath     = fbxCol.GetString(row);
            var aniClipName = nameCol.GetString(row);

            List <string> subAnimNames = null;
            if (!infos.TryGetValue(fbxPath, out subAnimNames))
            {
                subAnimNames = new List <string>();
                infos.Add(fbxPath, subAnimNames);
            }

            if (defaultAnimName == null || defaultCol.GetBoolean(row))
            {
                defaultAnimName = aniClipName;
            }
            subAnimNames.Add(aniClipName);
        }

        foreach (var p in infos)
        {
            var animRootPath = AnimPath + "/" + p.Key;
            foreach (var pp in p.Value)
            {
                var animPath = animRootPath + "/" + pp + ".anim";
                var clip     = AssetDatabase.LoadAssetAtPath <AnimationClip>(animPath);
                if (clip == null)
                {
                    EditorUtility.DisplayDialog("错误", "加载动画切片失败: " + animPath, "继续工作");
                    return(null);
                }

                clips.Add(pp, clip);
            }
        }

        return(clips);
    }
Example #2
0
    private static void CreateActorPrefab()
    {
        var selected = Selection.activeObject;

        if (selected == null)
        {
            EditorUtility.DisplayDialog("错误", "请选中对应预制件配置表", "继续工作");
            return;
        }
        var path = AssetDatabase.GetAssetPath(selected);

        //Assets/Config/Animation/mengjiang.csv
        if (!path.StartsWith("Assets/Config/Prefab") || !path.EndsWith(".csv"))
        {
            EditorUtility.DisplayDialog("错误", "请选中对应预制件配置表", "继续工作");
            return;
        }

        var loader = new CSVLoader();
        var text   = readAllText(path);

        if (!loader.Load(text))
        {
            EditorUtility.DisplayDialog("错误", "加载预制件配置失败: " + path, "继续工作");
            return;
        }

        var nameCol = loader.GetColumn("Name");
        var animCol = loader.GetColumn("Animation");
        var matCol  = loader.GetColumn("Material");
        var meshCol = loader.GetColumn("Mesh");


        Dictionary <string, Dictionary <string, AnimationClip> > allClips = new Dictionary <string, Dictionary <string, AnimationClip> >();
        Dictionary <string, string> defaultClipNames = new Dictionary <string, string>();

        for (int row = 0; row < loader.RowCount(); row++)
        {
            string animName    = animCol.GetString(row);
            string defaultName = null;

            Dictionary <string, AnimationClip> clips = null;
            if (!allClips.TryGetValue(animName, out clips))
            {
                clips = loadAnimClips(animName, ref defaultName);

                if (clips != null)
                {
                    defaultClipNames.Add(animName, defaultName);
                    allClips.Add(animName, clips);
                }
                else
                {
                    EditorUtility.DisplayDialog("错误", "无法加载对应的动画切片: " + animName, "继续工作");
                }
            }
            else
            {
                defaultClipNames.TryGetValue(animName, out defaultName);
            }

            _doCreateActorPrefab(
                nameCol.GetString(row),
                clips,
                defaultName,
                meshCol.GetString(row),
                matCol.GetString(row)
                );
        }

        EditorUtility.DisplayDialog("创建主角预制件", "完成", "继续工作");
    }
Example #3
0
    private static void SplitSelectedActorAnim()
    {
        var selected = Selection.activeObject;

        if (selected == null)
        {
            EditorUtility.DisplayDialog("错误", "请选中对应动画配置表", "继续工作");
            return;
        }
        var path = AssetDatabase.GetAssetPath(selected);

        //Assets/Config/Animation/mengjiang.csv
        if (!path.StartsWith("Assets/Config/Animation") || !path.EndsWith(".csv"))
        {
            EditorUtility.DisplayDialog("错误", "请选中对应动画配置表", "继续工作");
            return;
        }

        string animationName = Path.GetFileNameWithoutExtension(path);
        var    loader        = new CSVLoader();
        var    text          = readAllText(path);

        if (!loader.Load(text))
        {
            EditorUtility.DisplayDialog("错误", "加载动画表失败: " + path, "继续工作");
        }

        var nameCol    = loader.GetColumn("Name");
        var fbxCol     = loader.GetColumn("FBXPath");
        var compCol    = loader.GetColumn("Compression");
        var defaultCol = loader.GetColumn("IsDefault");

        string        defaultAnimName = null;
        List <string> anims           = new List <string>();

        Dictionary <string, List <AnimSplit> > infos = new Dictionary <string, List <AnimSplit> >();

        for (int row = 0; row < loader.RowCount(); row++)
        {
            var animInfo = new AnimSplit();
            animInfo.Name        = nameCol.GetString(row);
            animInfo.FBXPath     = fbxCol.GetString(row);
            animInfo.Compression = compCol.GetInteger32(row);

            List <AnimSplit> subAnimInfos = null;
            if (!infos.TryGetValue(animInfo.FBXPath, out subAnimInfos))
            {
                subAnimInfos = new List <AnimSplit>();
                infos.Add(animInfo.FBXPath, subAnimInfos);
            }

            if (defaultAnimName == null || defaultCol.GetBoolean(row))
            {
                defaultAnimName = animInfo.Name;
            }

            subAnimInfos.Add(animInfo);
            anims.Add(animInfo.Name);
        }


        bool result = true;

        foreach (var p in infos)
        {
            if (!_doSplitSelectedActorAnim(animationName, p.Key, p.Value))
            {
                result = false;
            }
        }

        if (result && defaultAnimName != null)
        {
            EditorUtility.DisplayDialog("拆分主角动画", "已完成", "继续工作");
        }
        else
        {
            EditorUtility.DisplayDialog("错误", "切分失败", "继续工作");
        }

        return;
    }