Unity中使用Slider和Animator实现简单的动画播放器

1.简单搭建UI,通过Slider来控制Cube当前状态动画的播放

2.给Cube加上Animator组件,做两个简单的动画(随便做个来回移动的动画就行),注意要关闭动画的循环播放

 

 3.给摄像机挂在脚本,并拖拽对应组件

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SliderAni : MonoBehaviour
{
    public static Animator ani;
    public Slider ani_Slider;//滑动条
    public Button play;//播放按钮
    public Button pause;//暂停按钮
    public Button replay;//重播按钮
    public Button nextplay;//播放下一个动画按钮
    public static bool isStop = true;
    public List<AnimationClip> t = new List<AnimationClip>();//记录对应动画控制器中的所有动画片段
    int index = 0;
    void Start()
    {
        ani = GameObject.Find("Cube").GetComponent<Animator>();
        AnimationClip[] clip = ani.runtimeAnimatorController.animationClips;
        foreach(AnimationClip item in clip)
        {
            t.Add(item);
        }
        play.onClick.AddListener(PlayOnClickBtn);//添加监听事件
        pause.onClick.AddListener(PauseOnClickBtn);
        replay.onClick.AddListener(RePlayOnClickBtn);
        nextplay.onClick.AddListener(NextPlayOnClickBtn);
        ani_Slider.minValue = 0;
        ani_Slider.maxValue = clip[0].length;
        ani_Slider.value = 0;
        ani.Play("run", 0, 0);
    }
    private void Update()
    {
        ChangeName();
    }
    public void ChangeName()
    {
        if (isStop)
        {
            if (index == 0)
            {
                ani_Slider.value = ani.GetCurrentAnimatorStateInfo(0).normalizedTime * t[index].length;
            }
            if (index == 1)
            {
                ani_Slider.value = ani.GetCurrentAnimatorStateInfo(0).normalizedTime * t[index].length;
            }
        }
        else
        {
            ani.Play(t[index].name, 0, ani_Slider.value / t[index].length);
        }
    }
    public void PlayOnClickBtn()
    {
        ani.speed = 1;
    }
    public void PauseOnClickBtn()
    {
        ani.speed = 0;
    }
    public void RePlayOnClickBtn()
    {
        ani.Play(t[index].name, 0, 0f);
        ani.speed = 1;
    }
    public void NextPlayOnClickBtn()
    {
        index = 1;
        ani_Slider.minValue = 0;
        ani_Slider.maxValue = t[index].length;
        ani_Slider.onValueChanged.RemoveAllListeners();
        ani.Play("run2", 0, 0f);
    }
}

 4.给Slider挂载脚本

using UnityEngine;
using UnityEngine.EventSystems;

public class Test : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    public void OnPointerDown(PointerEventData eventData)
    {
        SliderAni.ani.speed = 0;
        SliderAni.isStop = false;
    }
    public void OnPointerUp(PointerEventData eventData)
    {
        SliderAni.ani.speed = 1;
        SliderAni.isStop = true;
    }
}

5.运行Unity即可

猜你喜欢

转载自blog.csdn.net/falsedewuxin/article/details/131352289