c# - unity slider 控制动画

标签 c# animation unity3d fbx

我想创建一个 slider ,在 unity 中显示动画的当前帧,当您移动 slider 时,它会更新动画中的当前帧。

到目前为止我有(编辑过的代码)

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class NewAnimController : MonoBehaviour {


public Slider sliderScrubber;
public Animator animator;


void Start()
{
    float t = animator
    .GetCurrentAnimatorStateInfo(0)
    .normalizedTime;


    //animator.speed = 0.0001f;
    //slider.onValueChanged.AddListener(OnValueChanged);
}

public void Update()
{
    float animationTime = animator.GetCurrentAnimatorStateInfo(0).normalizedTime;
    Debug.Log("animationTime (normalized) is " + animationTime);
    sliderScrubber.value = animationTime;
}

public void OnValueChanged(float changedValue)
{
    animator.speed = 0.0001f;
    animator.Play("Take 001", -1, sliderScrubber.normalizedValue);
}
}

目前,当您调整 slider 时,这会更改动画中的当前帧,但播放动画时, slider 不会更新。

我怎样才能让它双向工作?

非常感谢

最佳答案

首先一定要删除所有的代码行

animation.speed = 0.0001f

这似乎是教程或调试的遗留物。


怎么样

public void Update()
 {
 float animationTime = animator.GetCurrentAnimatorStateInfo(0).normalizedTime;
 // in case of a looping anime, animationTime = animationTime %1f;

 Debug.Log("animationTime is " + animationTime);
 // of course remove that in production

 slider.value = animationTime;
 }

当然要注意在编辑器中将洗涤器的最小/最大设置为 0f、1f。

请注意,您可能更愿意为关节位置制作一个“洗涤器”;也很好用。

注意,微妙的问题:有经验的程序员可能更喜欢将动画速度设置为零,同时用户的手指按住 slider ;不这样做可能没问题。


注意 注意删除对 animation.speed 的所有引用。它似乎是错误教程的遗留问题。

关于c# - unity slider 控制动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136060/

相关文章:

c# - .NET Core 2.0 不是 Visual Studio 目标框架中的选项

c# - 手机进入休眠状态后,在前台服务中保持 wifi 处于 Activity 状态

c# - 如何使 EF 使用字符串连接构建更新 SQL?

c# - FluentValidation:验证继承同一基类的对象列表

c# - 如何通过父控件中的事件为子控件设置动画? - 可重复使用的方式

javascript - jquery 如何在动画后改变光标?

c# - 计算 Minecraft 爆炸

c# - Collider2D 在不同的游戏对象上触发 C# Unity3D 不工作

ios - 在呈现 VC 时保持动画 View 的最后位置

javascript - Unity C# 如何正确加载托管 DLL?