如何统一使用Slider控制3D对象的动画

时间:2018-11-20 12:58:02

标签: unity3d animation

让我们说我们的场景上有一个3d游戏对象,上面有单个动画,因此我应该怎么做才能使用滑块控制其动画,例如如果更改动画的滑块值将根据该值进行播放

2 个答案:

答案 0 :(得分:0)

我假设您已经使用其动画创建了一个动画师。

您只需要知道每次修改滑块值时都会调用回调onValueChanged。因此,您可以在其中设置新的动画模式。

using UnityEngine;
using System.Collections;
using UnityEngine.UI; // Required when Using UI elements.

public class SliderAnimator : MonoBehaviour
{
    public Slider mainSlider;
    public Animator anim;
    public void Start()
    {
        //Adds a listener to the main slider and invokes a method when the value changes.
        mainSlider.onValueChanged.AddListener(delegate {ValueChangeCheck(); });
    }

    // Invoked when the value of the slider changes.
    public void ValueChangeCheck()
    {           
        //Here we set the animation            
        switch((int)mainSlider.value){
          case 0:
            //Set first animation
            anim.SetBool("FirstAnimationName", true);
            break;
          case 1:
            //Set second animation
            anim.SetBool("SecondAnimationName", true);
            break;
          default:            
            break;
        }

        //To avoid casting the mainSlider.value
        if(mainSlider.value >= 0 && mainSlider.value < 0.5f)
        {
            //Set first animation
            anim.SetBool("FirstAnimationName", true);
        }
        if(mainSlider.value >= 0.5f && mainSlider.value <= 1f)
        {
            //Set second animation
            anim.SetBool("SecondAnimationName", true);
        }
    }
}

答案 1 :(得分:0)

我想您想要一个类似于VideoPlayer(例如youtube视频播放器)但带有动画的内容。从这里开始:https://docs.unity3d.com/ScriptReference/AnimationState-time.html

using UnityEngine;
using System.Collections;

    public class ExampleScript : MonoBehaviour
    {
        public Animation anim;
        public float animationTime;// attach your slider value to this float

        void Update()
        {
            anim["Walk"].time = animationTime;
        }
    }