0
点赞
收藏
分享

微信扫一扫

Unity(四十):TimeLine编辑器、Playables混合动画音频


TimeLine

效果

Unity(四十):TimeLine编辑器、Playables混合动画音频_c#

配置

Unity(四十):TimeLine编辑器、Playables混合动画音频_unity_02

Playables

脚本播放动画

Unity(四十):TimeLine编辑器、Playables混合动画音频_动画_03

public class AnimationScript : MonoBehaviour
{
public AnimationClip clip01;
public AnimationClip clip02;

private PlayableGraph _graph;

private void OnGUI()
{
if (GUILayout.Button("Animation 01"))
AnimationPlayableUtilities.PlayClip(GetComponent<Animator>(), clip01, out _graph);
if (GUILayout.Button("Animation 02"))
AnimationPlayableUtilities.PlayClip(GetComponent<Animator>(), clip02, out _graph);
}

private void OnDisable()
{
_graph.Destroy();
}
}

混合动画音频

Unity(四十):TimeLine编辑器、Playables混合动画音频_游戏引擎_04

public class AnimationScript : MonoBehaviour
{
public AnimationClip clip01;
public AnimationClip clip02;

private PlayableGraph _graph; // 管理 Playable 的创建和销毁

private AnimationMixerPlayable _animationMixerPlayable; // AnimationMixerPlayable 用于控制动画混合器

public float weight;

private void Start()
{
// 目标动画器。 AnimationMixerPlayable 的输入计数。 创建的 PlayableGraph。
_animationMixerPlayable = AnimationPlayableUtilities.PlayMixer(GetComponent<Animator>(), 2, out _graph);

// 连接动画到 PlayableGraph
AnimationClipPlayable clipPlayable01 = AnimationClipPlayable.Create(_graph, clip01);
AnimationClipPlayable clipPlayable02 = AnimationClipPlayable.Create(_graph, clip02);

_graph.Connect(clipPlayable01, 0, _animationMixerPlayable, 0);
_graph.Connect(clipPlayable02, 0, _animationMixerPlayable, 1);
}

private void Update()
{
weight = Mathf.Clamp01(weight);

// 设置混合权重,使其保持在0和1之间
_animationMixerPlayable.SetInputWeight(0, 1.0f - weight);
_animationMixerPlayable.SetInputWeight(1, weight);
}

private void OnGUI()
{
GUILayout.Label("混合动画权重");
weight = GUILayout.HorizontalSlider(weight, 0.0f, 1.0f);
}

private void OnDisable()
{
_graph.Destroy();
}
}

public class AudioScript : MonoBehaviour
{
public AudioClip clip01;
public AudioClip clip02;

private PlayableGraph _graph; // 管理 Playable 的创建和销毁

private AudioMixerPlayable _audioMixerPlayable;

public float weight;

private void Start()
{
_graph = PlayableGraph.Create();
_audioMixerPlayable = AudioMixerPlayable.Create(_graph, 2);

AudioClipPlayable clipPlayable01 = AudioClipPlayable.Create(_graph, clip01, true);
AudioClipPlayable clipPlayable02 = AudioClipPlayable.Create(_graph, clip02, true);

_graph.Connect(clipPlayable01, 0, _audioMixerPlayable, 0);
_graph.Connect(clipPlayable02, 0, _audioMixerPlayable, 1);

// 混合音频输出
AudioPlayableOutput audioPlayableOutput = AudioPlayableOutput.Create(_graph, "Audio", GetComponent<AudioSource>());
audioPlayableOutput.SetSourcePlayable(_audioMixerPlayable);

_graph.Play();
}

private void Update()
{
weight = Mathf.Clamp01(weight);

// 设置混合权重,使其保持在0和1之间
_audioMixerPlayable.SetInputWeight(0, 1.0f - weight);
_audioMixerPlayable.SetInputWeight(1, weight);
}

private void OnGUI()
{
GUILayout.Label("混合音频权重");
weight = GUILayout.HorizontalSlider(weight, 0.0f, 1.0f);
}

private void OnDisable()
{
_graph.Destroy();
}
}


举报

相关推荐

0 条评论