Unity TimeLine跨场景动态绑定对象
问题描述
在unity TimeLine使用时,想要控制某个物体上的对象,直接将场景中该物体拖拽到对应的PlayableDirector的Track上即可。但如果希望控制的物体是动态生成的,或TimeLine作为Prefab的一部分出现在其他场景中,又希望控制场景中的物体等等,在不能使用拖拽指定或资源选择指定资源的情况下,希望在游戏运行时动态绑定控制的目标对象到TimeLine。文章来源地址https://www.toymoban.com/news/detail-686529.html
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);
}
}
}
文章来源:https://www.toymoban.com/news/detail-686529.html
到了这里,关于Unity TimeLine跨场景动态绑定对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!