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

TimeLine

效果

在这里插入图片描述

配置

在这里插入图片描述

Playables

脚本播放动画

在这里插入图片描述

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();
    }
}

混合动画音频

在这里插入图片描述

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();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43526371/article/details/123782071