【问题标题】:How to control the speed of the model / animator Unity 3D如何控制模型/动画师 Unity 3D 的速度
【发布时间】:2022-01-18 00:27:26
【问题描述】:

我在这个模型中遇到了这个问题,而 Slider 工作但模型最初没有移动。只有当我滑动滑块时它才会移动。有没有办法在游戏开始时移动动画师或模型?

这是我的代码:我已将其附加到模型中

public class SpeedController : MonoBehaviour
{

    private Animator anim;
    public Slider slider;   //Assign the UI slider of your scene in this slot 

    // Start is called before the first frame update
    void Start()
    {
        anim = GetComponent<Animator>();
        anim.speed = 0; 
    }

    // Update is called once per frame
    void Update()
    {
        anim.Play("Back Squat", -1, slider.normalizedValue);
    }
}

【问题讨论】:

  • 如果你在Start中做anim.speed = 0; ,模型不动是预期的结果,是吗?
  • @rustyBucketBay - 是的,我尝试将其更改为0.0001f,但仍然没有任何效果。你能帮我解决这个问题吗?谢谢
  • 或者即使我将其更改为 1 或除 0 之外的任何数字。结果仍然相同,模型不会移动
  • It only moves when I slide the Slider ..你不是真的告诉它在Update ..中的行为方式吗?你告诉它的每一帧都有基于滑块的时间......它应该如何移动?

标签: c# unity3d


【解决方案1】:

您的代码没有控制模型的速度。您实际上是在 Start() 中将速度设置为 0。然后,您尝试 .play() 动画每一帧 Update() 这不是一个好主意。您当前拥有的 .Play() 的第三个参数 slider.normalizedValue 不控制速度,它控制动画时间轴中的开始位置。例如将其设置为 0 从头开始​​动画,将其设置为 0.5 从中间开始动画。根据动画的不同,我猜从中间开始可能会让它看起来更快,因为它只播放了一半的动画,但这并不能真正控制速度,只是控制动画的长度。

您要做的是从 Start() 开始 .Play() 动画。然后,您希望根据 slider.normalizedValue 控制 anim.speed。但是,您应该只在滑块的值更改时更改 anim.speed,因此您应该监听 onValueChange 事件。像这样的:

public class SpeedController : MonoBehaviour
{

    private Animator anim;
    public Slider slider;  

    void Start()
    {
        // get animator
        anim = GetComponent<Animator>();
        // listen for slider value changes
        slider.onValueChanged.AddListener(delegate { onSliderChanged(); });
        // set the anim speed to current slider value
        anim.speed = slider.normalizedValue;
        // play the animation (Animation State Name, Layer).
        anim.Play("Back Squat", -1);
    }

    void Update()
    {
        // you don't need anything here
    }

    // handle the slider event to change anim speed only when slider changes
    public void onSliderChanged()
    {
        Debug.Log(slider.normalizedValue);
        anim.speed = slider.normalizedValue;
    }

}

确保滑块的起始位置大于 0,以便在游戏开始时播放动画。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2017-10-23
    • 2019-02-14
    • 1970-01-01
    相关资源
    最近更新 更多