Unity TimeLine跨场景动态绑定对象

Unity TimeLine跨场景动态绑定对象

问题描述

在unity TimeLine使用时,想要控制某个物体上的对象,直接将场景中该物体拖拽到对应的PlayableDirector的Track上即可。但如果希望控制的物体是动态生成的,或TimeLine作为Prefab的一部分出现在其他场景中,又希望控制场景中的物体等等,在不能使用拖拽指定或资源选择指定资源的情况下,希望在游戏运行时动态绑定控制的目标对象到TimeLine。

solution

  • 一个mono脚本用以在生命周期事件中获取物体信息
  [RequireComponent(typeof(PlayableDirector))]
   public class TimelineHelperDemo : MonoBehaviour
   {
      public void Start()
       {
          //在Mono脚本中拿到希望控制的物体
          var obj = ……(your script) as GameObject;
          //拿到PlayableDirector
          PlayableDirector playableDirector = GetComponent<PlayableDirector>();
       }
   }
  • PlayableDirector扩展方法方便获取资源轨道(TrackAsset)

        public static T GetTrackAsset<T>(this PlayableDirector playableDirector, string trackName) where T : TrackAsset
       {
           return playableDirector.GetPlayableBinding(trackName).sourceObject as T;
       }
  • 在mono脚本中获取对应轨道并动态绑定到PlayableDirector
   [RequireComponent(typeof(PlayableDirector))]
   public class TimelineHelperDemo : MonoBehaviour
   {
      public void Start()
       {
          //在Mono脚本中拿到希望控制的物体
          var obj = ……(your script) as GameObject;
          //拿到PlayableDirector
          PlayableDirector playableDirector = GetComponent<PlayableDirector>();
           
           //举例 希望控制的是一个AnimationTrack
           var animTrack =  playableDirector.GetTrackAsset<AnimationTrack>(TrackName);

           if (obj is { })
           {
           	  //根据TrackAsset的不同,绑定对象类型也有不同 具体看TrackAsset
           	  //需要手动转换绑定对象为TrackAsset支持的控制对象
              playableDirector.SetGenericBinding(animTrack,obj);
           }
       }
   }
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值