修改Timeline ExposedObject 的链接

        [MenuItem("Kit/Timeline/修改StoryExposedObject的链接")]
        static void SetStoryExposedObjectPath()
        {
            UnityEngine.Object[] selObjs = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.DeepAssets);
            if (selObjs == null || selObjs.Length == 0)
            {
                Debug.LogError("请选择需要修改的文件路径!");
                return;
            }
            foreach (UnityEngine.Object obj in selObjs)
            {
                if (obj.GetType() != typeof(GameObject))
                    continue;
                GameObject story = (GameObject)obj;

                PlayableDirector[] pds = story.GetComponentsInChildren<PlayableDirector>();
                if (pds == null)
                    continue;

                if (pds.Length == 0)
                    continue;

                for (int i = 0; i < pds.Length;++i)
                {
                    PlayableDirector pd = pds[i];
                    TimelineAsset timeline = (TimelineAsset)pd.playableAsset;

                    Debug.Log("timeline: " + timeline.name);
                    IEnumerable<TrackAsset> tracks = timeline.GetOutputTracks();
                    IEnumerator it_track = tracks.GetEnumerator();
                    while (it_track.MoveNext())
                    {
                        TrackAsset track = (TrackAsset)it_track.Current;
                        IEnumerable<TimelineClip> clips = track.GetClips();
                        IEnumerator it_clip = clips.GetEnumerator();
                        while (it_clip.MoveNext())
                        {
                            TimelineClip clip = (TimelineClip)it_clip.Current;
                            if (clip.asset.GetType() == typeof(Playable_ActiveObj))
                            {
                                Playable_ActiveObj playable = clip.asset as Playable_ActiveObj;
                                if (playable)
                                {
                                    SetReferenceValueName(playable.Obj,pd,out playable.Name, out playable.ParentName);
                                }
                            }
                        }
                    }
                }
          
             }
        }

 

        static void SetReferenceValueName(ExposedReference<GameObject> Obj, PlayableDirector pd,out string Name,out string ParentName)
        {
            bool isvalid = false;
            Object temp_ = null;
            Object defaultObjet = Obj.defaultValue;
            if (defaultObjet != null)
            {
                temp_ = defaultObjet;
            }
            else
            {
                temp_ = pd.GetReferenceValue(Obj.exposedName, out isvalid);
            }

            if (temp_ != null)
            {
                GameObject temp = temp_ as GameObject;
                Name = temp.name;
                ParentName = temp.transform.parent.parent.name;
                pd.SetReferenceValue(Obj.exposedName, null);
            }
            else
            {
                Name = "";
                ParentName = "";
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米神探

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值