如何控制模型/动画师 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 的速度的主要内容,如果未能解决你的问题,请参考以下文章