| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 | #if !COMBAT_SERVERusing System;using System.Collections.Generic;using System.IO;#if UNITY_EDITORusing UnityEditor;#endifusing UnityEngine;using UnityEngine.Playables;using UnityEngine.Timeline;using Object = UnityEngine.Object;public class SerializationTimeLineTool{#if UNITY_EDITOR       [MenuItem("CombatData/导出英雄timeLine数据")]        private static void SeveHeroTimeLine()        {            string _path = "Assets/Res/TimeLineAssets/";            string path = Application.dataPath + "/Art/ArtHero";            string[] filePaths = System.IO.Directory.GetFiles(path, "*", SearchOption.AllDirectories);            for (int i = 0;                 i < filePaths.Length;                 i++)            {                string p = filePaths[i];                if (p.Contains(".meta"))                {                    continue;                }                GameObject g2 = null;                try                {                    p = p.Replace(Application.dataPath, "Assets");                    GameObject g = AssetDatabase.LoadAssetAtPath<GameObject>(p);                    g2 = GameObject.Instantiate(g);                    PlayableDirector playableDirector = g2.GetComponentInChildren<PlayableDirector>(true);                    if (playableDirector == null || playableDirector.playableAsset == null)                    {                        GameObject.DestroyImmediate(g2);                        continue;                    }                    // g.SetActive(true);                    playableDirector.RebuildGraph();                    playableDirector.Play();                    if (!playableDirector.playableGraph.IsValid())                    {                        playableDirector.RebuildGraph();                    }                    if (!playableDirector.playableGraph.IsValid())                    {                        Debug.LogError("没有playableGraph" + p);                    }                    // Debug.Log(playableDirector.playableGraph);                    TimeLienData timeLienData = SerializationTimeLineTool.SerializationTimeLine(playableDirector);                    timeLienData.heroName = g.name;                    string ctx = JsonManager.ToJson(timeLienData);                    File.WriteAllText(_path + g.name + "_TD.txt", ctx);                    playableDirector.playableGraph.Destroy();                    GameObject.DestroyImmediate(g2);                }                catch (Exception e)                {                    if (g2 != null)                    {                        GameObject.DestroyImmediate(g2);                    }                    Debug.LogError(p);                    Debug.LogException(e);                }            }            Debug.Log("生成资源");            AssetDatabase.Refresh();            AssetDatabase.SaveAssets();        }        [MenuItem("CombatData/ 导美术英雄到战斗英雄里面")]        private static void ArtHeroToCombatHero()        {                   string path = Application.dataPath + "/Art/ArtHero";            string[] filePaths = System.IO.Directory.GetFiles(path, "*", SearchOption.AllDirectories);            for (int i = 0;                 i < filePaths.Length;                 i++)            {                string p = filePaths[i];                if (p.Contains(".meta"))                {                    continue;                }                try                {                    p = p.Replace(Application.dataPath, "Assets");                    GameObject g = AssetDatabase.LoadAssetAtPath<GameObject>(p);                    // GameObject newObje= ()PrefabUtility.InstantiatePrefab(g);                    GameObject newObje = GameObject.Instantiate(g);                    newObje.name = g.name;                    BoxCollider2D[] collider = newObje.GetComponentsInChildren<BoxCollider2D>(true);                    for (int j = 0; j < collider.Length; j++)                    {                        GameObject.DestroyImmediate(collider[j]);                    }                    // SpecialDot[] SpecialDot = newObje.GetComponentsInChildren<SpecialDot>(true);                    // for (int j = 0; j < SpecialDot.Length; j++)                    // {                    //     GameObject.DestroyImmediate(SpecialDot[j]);                    // }                    // CombatHeroEntityHitPointMono[] CombatHeroEntityHitPointMono =                    //     newObje.GetComponentsInChildren<CombatHeroEntityHitPointMono>(true);                    // for (int j = 0; j < CombatHeroEntityHitPointMono.Length; j++)                    // {                    //     GameObject.DestroyImmediate(CombatHeroEntityHitPointMono[j]);                    // }                    PlayableDirector playableDirector=    newObje.GetComponent<PlayableDirector>();                    if (playableDirector != null)                    {                        GameObject.DestroyImmediate(playableDirector);                    }                    Transform t = newObje.transform.Find("timeline");                    if (t != null)                    {                        GameObject.DestroyImmediate(t.gameObject);                    }                    t = newObje.transform.Find("effect");                    if (t != null)                    {                        GameObject.DestroyImmediate(t.gameObject);                    }                    PrefabUtility.SaveAsPrefabAssetAndConnect(newObje, "Assets/Res/CombatHero/" + g.name + ".prefab",                        InteractionMode.UserAction);                    GameObject.DestroyImmediate(newObje);                    AssetDatabase.ImportAsset("Assets/Res/CombatHero/" + g.name + ".prefab");                }                catch (Exception e)                {                    Debug.LogError(p);                    Debug.LogException(e);                }            }            Debug.Log("生成资源");            AssetDatabase.Refresh();            AssetDatabase.SaveAssets();        }    #endif    public static TimeLienData SerializationTimeLine(PlayableDirector playableDirector)    {        TimeLienData timeLienData = new TimeLienData();        IEnumerable<PlayableBinding> allPlay = playableDirector.playableAsset.outputs;        foreach (PlayableBinding pb in allPlay)        {            TrackAsset playableAsset = pb.sourceObject as TrackAsset;            if (playableAsset != null)            {                IEnumerable<TimelineClip> clips = playableAsset.GetClips();                GroupTrack groupTrack = playableAsset.GetGroup();                         foreach (var valueClip in clips)                {                    Object asset = valueClip.asset;                    Debug.Log(valueClip.asset);                    TimeLineAssetSerialization serialization = null;                    if (asset is AudioPlayableAsset)                    {                        serialization =                            new TimeLineAudioSeralization(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TimeLineAudioSeralization");                    }                    else if (asset is ActiveGameObjectPlayableAsset)                    {                        serialization =                            new TimeLineActiveGameObjectSerializtion(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TimeLineActiveGameObjectSerializtion");                    }                    else if (asset is ControlPlayableAsset)                    {                        serialization =                            new TimeLinePlayFxSerializtion(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TimeLinePlayFxSerializtion");                    }                    // else if (asset is SpineAnimationStateClip)                    // {                    //     serialization =                    //         new TimeLineSpineSeralization(playableDirector, groupTrack, valueClip);                    //     timeLienData.key.Add("TimeLineSpineSeralization");                    // }                    else if (asset is TimeLineSkillStartAsset)                    {                        serialization =                            new TimeLineSkillStartSerializtion(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TimeLineSkillStartSerializtion");                    }                    else if (asset is TimeLineTriggerAsset)                    {                        serialization =                            new TimeLineTriggerSerialization(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TimeLineTriggerSerialization");                    }                    else if (asset is TimeLineEndSingAsset)                    {                        serialization =                            new TimeLineEndSingSerializtion(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TimeLineEndSingSerializtion");                    }                    else if (asset is TimeLineCollisionTriggerAsset)                    {                        serialization =                            new TimeLineCollisionTriggerSerializtion(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TimeLineCollisionTriggerSerializtion");                    }                    else if (asset is TimeLineCurveAsset)                    {                        serialization =                            new TimeLineCurveSerializtion(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TimeLineCurveSerializtion");                    }                    else if (asset is CameraShakingAsset)                    {                        serialization =                            new CameraShakingSerializtion(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("CameraShakingSerializtion");                    }                    else if (asset is TimeLineSkillPreparationAssets)                    {                        serialization =                            new TimeLineSkillPreparationSerializtion(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TimeLineSkillPreparationSerializtion");                    }                    else if (asset is TimeLinePlayEntityAnimtionAsset)                    {                        serialization =                            new TineLineAnimationPlayableSerialization(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TineLineAnimationPlayableSerialization");                    }                    else if (asset is TimeLineAlertAsset)                    {                        serialization =                            new TimeLineAlertSeriailztion(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TimeLineAlertSeriailztion");                    }                    else if (asset is TimeLineFallAsset)                    {                        serialization =                            new TimeLineFallSeraliztion(playableDirector, groupTrack, valueClip);                        timeLienData.key.Add("TimeLineFallSeraliztion");                    }                    else                    {                        if (!asset.GetType().ToString().Equals("UnityEngine.Timeline.ActivationPlayableAsset"))                        {                            Debug.LogWarning("这是一个目前不受支持的类型+" + asset.GetType().ToString() + "__" + groupTrack.name + "___" + asset.name + "___" +                                           valueClip.start);                        }                        else                        {                            serialization =                                new TimeLineMaxTimeSerializtion(playableDirector, groupTrack, valueClip);                            timeLienData.key.Add("TimeLineMaxTimeSerializtion");                        }                    }                    if (serialization == null) continue;                    timeLienData.value.Add(serialization.ToJson());                }            }        }        return timeLienData;    }}#endif
 |