Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UNITY动画setFloat工作不正常_C#_Visual Studio_Unity3d_Game Development - Fatal编程技术网

C# UNITY动画setFloat工作不正常

C# UNITY动画setFloat工作不正常,c#,visual-studio,unity3d,game-development,C#,Visual Studio,Unity3d,Game Development,我有一个屏幕上的按钮,可以控制角色的移动,向右行走,向左行走和跳跃。我的向左行走和跳跃按钮事件与动画一起正常工作,但右按钮只是移动角色而不是播放行走动画,我使用setFloat检测角色的移动。请帮助我确定为什么不播放向右行走动画 我的移动控件脚本: 我的更新功能: 我的屏幕按钮功能 因为右压下的代码块被左压下的代码块覆盖 基本上,如果你像这样翻来覆去 if (LeftPressed) anim.SetFloat("speed", -0.1f); else

我有一个屏幕上的按钮,可以控制角色的移动,向右行走,向左行走和跳跃。我的向左行走和跳跃按钮事件与动画一起正常工作,但右按钮只是移动角色而不是播放行走动画,我使用setFloat检测角色的移动。请帮助我确定为什么不播放向右行走动画

我的移动控件脚本:

我的更新功能:

我的屏幕按钮功能


因为右压下的代码块被左压下的代码块覆盖

基本上,如果你像这样翻来覆去

    if (LeftPressed)
        anim.SetFloat("speed", -0.1f);
    else
        anim.SetFloat("speed", 0.0f);

    if (RightPressed)
        anim.SetFloat("speed", 0.1f);
    else
        anim.SetFloat("speed", 0.0f);
您可能会注意到,您的问题是相反的,在这两种情况下,您使用的布尔值必须为false或true,当LeftPressed为false时,您仍将动画速度更新为0.0f,这将覆盖RightPressed中设置的值,您要做的是更改代码的组织方式

    if (LeftPressed)
        anim.SetFloat("speed", -0.1f);

    if (RightPressed)
        anim.SetFloat("speed", 0.1f);

    if ((!LeftPressed && !RightPressed) || (LeftPressed && RightPressed))
        anim.SetFloat("speed", 0.0f);

这将更好地工作,但不是一个很好的方法,您应该将动画与刚体/变换的实际速度同步,以确保对象的移动和动画之间没有去同步,因为右压代码块被左压代码块覆盖

基本上,如果你像这样翻来覆去

    if (LeftPressed)
        anim.SetFloat("speed", -0.1f);
    else
        anim.SetFloat("speed", 0.0f);

    if (RightPressed)
        anim.SetFloat("speed", 0.1f);
    else
        anim.SetFloat("speed", 0.0f);
您可能会注意到,您的问题是相反的,在这两种情况下,您使用的布尔值必须为false或true,当LeftPressed为false时,您仍将动画速度更新为0.0f,这将覆盖RightPressed中设置的值,您要做的是更改代码的组织方式

    if (LeftPressed)
        anim.SetFloat("speed", -0.1f);

    if (RightPressed)
        anim.SetFloat("speed", 0.1f);

    if ((!LeftPressed && !RightPressed) || (LeftPressed && RightPressed))
        anim.SetFloat("speed", 0.0f);

这会更好,但不是一个很好的方法,您应该将动画与刚体/变换的实际速度同步,为了确保对象的移动和动画之间没有失同步

我已经按照您所说的做了,但右行走动画仍然没有播放我会做错什么?您现在的问题可能与您处理输入的方式有关,或者与您的动画师自己设计的方式以及存在的内容有关,我们没有足够的信息来帮助您了解问题所在,另外,请记住,如果LeftPressed和RightPressed都为true,则动画制作者的速度值设置为0,如果这是您正在尝试且不希望的,您应该删除重置速度条件的第二部分。请更新您的问题以添加更多信息,或接受作为答案。我已经按照您所说的进行了操作,但右侧行走动画仍然没有播放。我可能做错了什么?您的问题现在可能与您的方式有关处理输入或您的动画师自行设计的方式以及存在的内容,我们没有足够的信息来帮助您理解错误所在。另外,请记住,如果LeftPressed和RightPressed均为true,则动画师的速度值设置为0,如果这是您正在尝试但不希望的,您应该删除重置速度条件的第二部分,请更新您的问题以添加更多信息或接受作为答案
    if (LeftPressed)
        anim.SetFloat("speed", -0.1f);

    if (RightPressed)
        anim.SetFloat("speed", 0.1f);

    if ((!LeftPressed && !RightPressed) || (LeftPressed && RightPressed))
        anim.SetFloat("speed", 0.0f);