Animation Silder实现动画播时滑动条随之滑动

来源:互联网 发布:用js怎么写九九乘法表 编辑:程序博客网 时间:2024/05/18 14:26
需要播放动画的各个按钮都挂上AnimSlider脚本并勾掉勾选,并调用isSet()函数和按钮对应的Toggle_1函数,才不会互相干扰
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class AnimSlider : MonoBehaviour
{
    public static AnimSlider Instance;//单例模式
    public Animation MyAnim;
    public string Name;
    public Slider us;
    public float AnimaTime = 0.0f;
    public bool isBegin = false;
    public bool isStart = false;
    // Use this for initialization
    void Awake()
    {
        Instance = this; //单例模式
    }
    void Start()
    {
    }
    // Update is called once per frame
    void Update()
    {
        if (isBegin)
        {
            if (isStart)
            {
              
                AnimaTime += Time.deltaTime;//计数Update的运行时间
                PlayToStart(AnimaTime);
                if (AnimaTime > MyAnim[Name].length)
                {
                    AnimaTime = 0.0f;
                    isStart = false;
                    isBegin = false;
                }
            }
            //每一帧运行时间的累加,除以动画长度,得到Silder的Value是个比例
            us.value = AnimaTime / MyAnim[Name].length; 
        }
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="Atime"></param>
    public void PlayToStart(float Atime)
    {
        MyAnim.enabled = true;
        MyAnim.CrossFade(Name);
        MyAnim[Name].speed = 0.0f; //动画播放速度为0
        MyAnim[Name].normalizedTime = Atime / MyAnim[Name].length;//  MyAnim[Name].normalizedTime =某个0-1的值
    }
 
    /// <summary>
    /// 设置AnimSlder回到初始值
    /// </summary>
    public void isSet()
    {
        PlayToStart(0.0f);//每次按下手术步骤时,动画回到第一帧
        AnimaTime = 0.0f; //计数器也从0开始重新计数
        us.value = 0.0f;  //Slider的值归0,即回到开始状态
        isStart = true;  //Update开始有效
        isBegin = true;
    
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SliderAniManager : MonoBehaviour {
    public GameObject[] SSLC_Toggle;
 // Use this for initialization
 void Start () {
  
 }
 
 // Update is called once per frame
 void Update () {
  
 }
    /// <summary>
    /// 开启和关闭的动画脚本AnimSlider
    /// </summary>
    public void EnableAnimSlder(bool isActive)
    {
        for (int i = 0; i < SSLC_Toggle.Length; i++)
        {
            SSLC_Toggle[i].GetComponent<AnimSlider>().enabled = isActive;
        }
    }
 
    //------------------------------各个步骤的按钮控制脚本------------------------------------------------------------------------------/
    public void Toggle_0()
    {
      
        EnableAnimSlder(false);
        SSLC_Toggle[0].GetComponent<AnimSlider>().enabled = true;
 
    }
    public void Toggle_1()
    {
       
        EnableAnimSlder(false);
        SSLC_Toggle[1].GetComponent<AnimSlider>().enabled = true;
 
    }
    public void Toggle_2()
    {
  
        EnableAnimSlder(false);
        SSLC_Toggle[2].GetComponent<AnimSlider>().enabled = true;
     
    }
    public void Toggle_3()
    {
   
        EnableAnimSlder(false);
        SSLC_Toggle[3].GetComponent<AnimSlider>().enabled = true;
 
    }
    public void Toggle_4()
    {
     
        EnableAnimSlder(false);
        SSLC_Toggle[4].GetComponent<AnimSlider>().enabled = true;
      
    }
    public void Toggle_5()
    {
   
        EnableAnimSlder(false);
        SSLC_Toggle[5].GetComponent<AnimSlider>().enabled = true;
 
    }
    public void Toggle_6()
    {
    
        EnableAnimSlder(false);
        SSLC_Toggle[6].GetComponent<AnimSlider>().enabled = true;
 
    }
    public void Toggle_7()
    {
       
        EnableAnimSlder(false);
        SSLC_Toggle[7].GetComponent<AnimSlider>().enabled = true;
 
    }
}
原创粉丝点击