Unity-动画-动画不会向左/向右翻转

时间:2018-11-25 03:17:28

标签: c# unity3d

我有一些代码可用于翻转播放器,使其面向X轴上的移动方向。但是,由于我已经添加了动画,所以动画可以播放,但不会朝另一个方向翻转。

注释-

  1. 我没有访问动画器来运行动画
  2. 我创建了AnimationClip变量
  3. 我播放动画GetComponent()。Play(“ Idle”);
  4. 我确实将一个Animation组件添加到了我的播放器控制器中, 每个已插入动画的字段。

代码

 [SerializeField]
 private AnimationClip idle;
 [SerializeField]
 private AnimationClip walk;
 [SerializeField]
 private AnimationClip hop; // Alternative name for JUMP
 [SerializeField]
 private AnimationClip death;
  1. 我下面的代码可以完美地工作,但是事实证明,过渡到Jump很困难。

代码

  if (Mathf.Abs(player.velocity.x) > 0)
    {

        GetComponent<Animation>().Play("Walk");
    }
    else
    {

        GetComponent<Animation>().Play("Idle");

    }
  1. 以下用于跳转的代码不会播放动画:

代码

    if (Input.GetKeyDown(KeyCode.Space) && onFloor==true || 
    Input.GetKeyDown(KeyCode.W) && onFloor==true)
    {

        player.velocity = new Vector2(0, jump);
        onFloor = false;
       // GetComponent<Animation>().Stop("Walk");
       // GetComponent<Animation>().Stop("Idle");
        GetComponent<Animation>().Play("Jump");

    }
  1. 我试图停止所有其他动画,只播放跳转 动画。
  2. 没有一个起作用。为什么?那将是一个解决方案?
  3. 我的动画片段会播放,但不会向左翻转。

代码

        faceRight = !faceRight;
        Vector3 Pscale = transform.localScale;
        Pscale.x *= -1;
        transform.localScale = Pscale;
  1. 我尝试插入动画以在Pflip()中行走 这就是您在上面看到的,在内部调用的函数 的FixedUpdate()。

StateMachine

我尝试设置Animator状态机,但所有动画将同时发生。那是我放弃Animator并决定调用我的动画从代码播放的时候。就过渡线而言,我感觉好像已经正确设置了状态机。

好,所以我为每个名为“激活”的过渡线设置了一个触发器。我相应地将代码修改为:

 private Animator anim;

 void Start()
 {
    anim = gameObject.GetComponent<Animator>();
 {

 if (Mathf.Abs(player.velocity.x) > 0  && onFloor==true)
    {

        //ani.SetTrigger(walk.ToString());
        anim.ResetTrigger("Idle");
        anim.SetTrigger("Walk");
    }
    else if(Mathf.Abs(player.velocity.x) == 0  && onFloor==true)
    {

        //ani.SetTrigger(idle.ToString());
        anim.ResetTrigger("Walk");
        anim.SetTrigger("Idle");

    }

但是,这仍然不能解决我的问题。首先,动画不播放。其次,我无法测试播放器播放后是否会在轴上翻转。

在运行时,控制台中出现一个轻微的错误,提示动画不存在。我确保所有动画都在动画师内部的状态下。我还确保所有动画均未标记为“旧版”。

1 个答案:

答案 0 :(得分:0)

根据您的问题和评论。

我尝试设置Animator状态机,但所有动画将同时发生。

这可能意味着您在状态机中设置了错误的转换或初始值。

我对您的建议是检查有关如何使用状态机的video。 IT属于更长的教程,但是该视频可能足以解决您的问题。

如果按照本教程操作,您将看到需要创建boolean类型的参数来激活脚本中的动画。因此,例如,您将创建一个名为isWalking的文件,该文件将链接到您的步行动画。然后,您可以使用以下代码从代码中将该参数设置为true或false:

anim.SetBool ("IsWalking", walking);

这是您可以尝试的示例。但是您将需要使其适应实际需求:

bool walking = false;

void FixedUpdate ()
{
    // Animate the player.
    Animating();
}

void Animating (float h, float v)
{
    if (Mathf.Abs(player.velocity.x) > 0  && onFloor==true)
    {
        walking = true;
    }
    else if(Mathf.Abs(player.velocity.x) == 0  && onFloor==true)
    {
        walking = false;
    }

    // Tell the animator whether or not the player is walking.
    anim.SetBool ("IsWalking", walking);
}