【发布时间】:2018-11-20 12:58:01
【问题描述】:
假设我们的场景中有一个 3d 游戏对象,上面有单个动画,那么我应该怎么做才能使用滑块控制它的动画,比如如果更改滑块的值,动画将根据该值播放
【问题讨论】:
假设我们的场景中有一个 3d 游戏对象,上面有单个动画,那么我应该怎么做才能使用滑块控制它的动画,比如如果更改滑块的值,动画将根据该值播放
【问题讨论】:
我想您想要类似于 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;
}
}
【讨论】:
我假设你已经用他们的动画创建了一个动画师。
您只需要知道每次修改滑块值时都会调用回调 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);
}
}
}
【讨论】: