TimelineMap.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Playables;
  5. using UnityEngine.Timeline;
  6. [System.Serializable]
  7. public struct PlayableBindingDic
  8. {
  9. public string trackName;
  10. public string typeName;
  11. public string objInfo;
  12. }
  13. [System.Serializable]
  14. public struct PlayableClipDic
  15. {
  16. public string trackName;
  17. public List<string> clipNames;
  18. public List<string> objInfos;
  19. }
  20. public class TimelineMap : MonoBehaviour
  21. {
  22. public PlayableDirector director;
  23. public PlayableAsset asset;
  24. public List<PlayableBindingDic> bindingDic;
  25. public List<PlayableClipDic> clipDic;
  26. public void Start()
  27. {
  28. SaveMap();
  29. }
  30. PlayableClipDic ClipsContainsKey(string name)
  31. {
  32. foreach(var c in clipDic)
  33. {
  34. if (c.trackName.CompareTo(name) == 0)
  35. {
  36. return c;
  37. }
  38. }
  39. return default(PlayableClipDic);
  40. }
  41. public void SaveMap()
  42. {
  43. if (director == null)
  44. {
  45. Debug.Log("please import director object !!!");
  46. return;
  47. }
  48. if (asset == null)
  49. {
  50. Debug.Log("please import timeline object !!!");
  51. return;
  52. }
  53. bindingDic = new List<PlayableBindingDic>();
  54. clipDic = new List<PlayableClipDic>();
  55. foreach (var o in asset.outputs) // 每一个binding,其实就是trackasset和需要动画的模型之间的链接关系
  56. {
  57. var trackName = o.streamName;
  58. PlayableBindingDic binding = new PlayableBindingDic();
  59. binding.trackName = trackName;
  60. Object obj = director.GetGenericBinding(o.sourceObject);
  61. if (obj != null)
  62. {
  63. binding.typeName = obj.GetType().FullName;
  64. binding.objInfo = obj.name;
  65. if (!string.IsNullOrEmpty(binding.objInfo))
  66. bindingDic.Add(binding);
  67. }
  68. var trackAsset = o.sourceObject as TrackAsset;
  69. var clipList = trackAsset.GetClips();
  70. foreach (var c in clipList)
  71. {
  72. /*if (!c.displayName.Contains("Script"))
  73. {
  74. continue;
  75. }*/
  76. PlayableClipDic clip = ClipsContainsKey(trackName);
  77. if (string.IsNullOrEmpty(clip.trackName))
  78. {
  79. clip.trackName = trackName;
  80. clip.clipNames = new List<string>();
  81. clip.objInfos = new List<string>();
  82. }
  83. if (!clip.clipNames.Contains(c.displayName))
  84. {
  85. clip.clipNames.Add(c.displayName);
  86. Object asset = c.asset;
  87. clip.objInfos.Add(asset.name);
  88. }
  89. if (!clipDic.Contains(clip))
  90. clipDic.Add(clip);
  91. }
  92. }
  93. }
  94. public void Output()
  95. {
  96. foreach(var binding in bindingDic)
  97. {
  98. Debug.Log(binding.trackName);
  99. //Debug.Log(binding.bingdingObj);
  100. }
  101. }
  102. }