如何控制模型/动画师 Unity 3D 的速度

Posted

技术标签:

【中文标题】如何控制模型/动画师 Unity 3D 的速度【英文标题】:How to control the speed of the model / animator 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 ..中的行为方式吗?你告诉它的每一帧都有基于滑块的时间......它应该如何移动? 【参考方案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,以便在游戏开始时播放动画。

【讨论】:

以上是关于如何控制模型/动画师 Unity 3D 的速度的主要内容,如果未能解决你的问题,请参考以下文章

Unity3d 动画控制

unity3d 如何用GUI按钮播放动画脚本怎么写

Unity3D 动画系统(Animation)

unity3d 模型uv动画 key 播放问题 求指教!!!

从 Unity3d 中的 Animator 获取动画状态

MAX 动画 导入 Unity 3D 的问题