unity下动态创建TimeLine并动态创建轨道添加内容

 动态创建TimeLine

//添加TimeLine导演组件
PlayableDirector director;
if (player.GetComponent<PlayableDirector>())
{
    director = player.GetComponent<PlayableDirector>();
}
else
{
    director = player.AddComponent<PlayableDirector>();
}
//创建TimeLine并赋值给导演类
TimelineAsset asset = TimelineAsset.CreateInstance<TimelineAsset>();
director.playableAsset = asset;
director.playOnAwake = false;

动态创建动画轨道并添加内容

//创建动画轨道
AnimationTrack animationTrack = asset.CreateTrack<AnimationTrack>();
animationTrack.trackOffset = TrackOffset.ApplySceneOffsets;
//通过导演组件把动画轨道跟人物绑定
director.SetGenericBinding(animationTrack, player);
//给轨道上添加内容
TimelineClip timelineClip = animationTrack.CreateClip<AnimationPlayableAsset>();
AnimationPlayableAsset apa = timelineClip.asset as AnimationPlayableAsset;
apa.clip = Resources.Load<AnimationClip>(skill.animPath);
apa.position = player.transform.position;
//设置动画开始播放时间
timelineClip.start = skill.animBeginTime;
//设置动画播放时长
timelineClip.duration = skill.animDurationTime;

动态创建Control轨道并添加内容

//创建Control轨道
ControlTrack control = asset.CreateTrack<ControlTrack>("control");
//创建Control内容
var timeclip = control.CreateClip<ControlPlayableAsset>();
var clip = timeclip.asset as ControlPlayableAsset;
//为Control内容赋值一个有继承ITimeControl组件的GameObject
clip.sourceGameObject.defaultValue = effectMgr;
//(具体内容写在继承ITimeControl组件里)
//设置开始时间
timeclip.start = effect.effectBeginTime;
//设置时长
timeclip.duration = effect.effectDurationTime;

动态创建声音轨道并添加内容

//创建声音轨道
AudioTrack audioTrack = asset.CreateTrack<AudioTrack>();
//通过导演组件为声音轨道绑定播放器
//(我们发现如果不为声音轨道绑定播放器,他在执行时会自己创建并在播放完后销毁)
//director.SetGenericBinding(audioTrack, player);
//创建声音内容
TimelineClip timelineClip = audioTrack.CreateClip<AudioPlayableAsset>();
AudioPlayableAsset audio = timelineClip.asset as AudioPlayableAsset;
//为内容赋值
audio.clip = Resources.Load<AudioClip>(skill.audioPath);
//设置播放开始时间和时长
timelineClip.start = skill.audioBeginTime;
timelineClip.duration = skill.audioDurationTime;

动态创建Signal事件轨道并添加内容

//创建Signal事件轨道
SignalTrack signalTrack = asset.CreateTrack<SignalTrack>();
//添加组件
SignalReceiver receiver = player.AddComponent<SignalReceiver>();
//把组件绑定到轨道上
director.SetGenericBinding(signalTrack, player);
//创建事件
SignalAsset signalAsset = new SignalAsset();
signalAsset.name = "buff";
//在轨道上指定时间添加事件
SignalEmitter signal = signalTrack.CreateMarker<SignalEmitter>(skill.buffTime);
signal.asset = signalAsset;
//创建委托绑定事件
receiver.AddReaction(signal.asset, new UnityEvent());
//给委托添加监听
receiver.GetReaction(signalAsset).AddListener(() =>
{
    //这里写具体内容哦
});

动态添加虚拟相机轨道并添加内容

//创建虚拟相机轨道
CinemachineTrack cinemachineTrack = timelineAssets.CreateTrack<CinemachineTrack>();
//绑定控制的摄像机
playableDirector.SetGenericBinding(cinemachineTrack, cinemachineBrain);
//给轨道上添加内容
TimelineClip timelineClip1 = cinemachineTrack.CreateDefaultClip() as TimelineClip;
CinemachineShot cinemachineShot = timelineClip1.asset as CinemachineShot;
//创建虚拟相机
var setCam1 = new ExposedReference<CinemachineVirtualCameraBase>();
GameObject go1 = new GameObject("Cinemachine");
go1.AddComponent<CinemachineVirtualCamera>();
setCam1.defaultValue = go1.GetComponent<CinemachineVirtualCamera>();
//赋值
cinemachineShot.VirtualCamera = setCam1;

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用以下代码Unity动态创建对象并设置 Sprite 和 Animator: ```csharp // 创建一个新的 GameObject GameObject newObject = new GameObject(); // 添加 SpriteRenderer 组件 SpriteRenderer spriteRenderer = newObject.AddComponent<SpriteRenderer>(); // 设置 Sprite spriteRenderer.sprite = yourSprite; // 添加 Animator 组件 Animator animator = newObject.AddComponent<Animator>(); // 创建一个 AnimatorController RuntimeAnimatorController animatorController = new AnimatorController(); // 创建一个 AnimatorStateMachine AnimatorStateMachine stateMachine = animatorController.layers[0].stateMachine; // 创建一个 AnimatorState AnimatorState state = stateMachine.AddState("MyState"); // 添加一个 AnimationClip AnimationClip clip = new AnimationClip(); clip.name = "MyClip"; clip.frameRate = 30; // 设置帧率 // 在 AnimationClip添加关键帧等动画内容 // ... // 将 AnimationClip 添加到 AnimatorState 中 state.motion = clip; // 设置 AnimatorController 的 defaultState animatorController.layers[0].defaultState = state; // 设置 Animator 的 runtimeAnimatorController animator.runtimeAnimatorController = animatorController; ``` 其中,`yourSprite` 是您想要设置的 Sprite 对象。在此代码中,我们创建了一个 AnimatorController,然后创建了一个包含 AnimationClip 的 AnimatorState,并将其添加到了 AnimatorController 中。最后,我们将 AnimatorController 赋给了 GameObject 的 Animator 组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值