0

我要提前感谢您帮助我解决这个问题。

我有一个由三部分组成的播放器:身体、头部和手臂

这三个都是单独的精灵。

我已将它们全部分组在一个我命名为“玩家”的空游戏对象下

然后,我在“玩家”游戏对象上添加了一个动画,将 Y 位置从0 更改为 0.022,然后从0.022 更改回 0。这创建了一个很好的小悬停动画,其中角色上下弹跳。

动画效果非常好!

但是,我还有一个附加到“Player”对象的脚本,这个脚本称为“PlayerController”。

在 PlayerController 中,如果玩家按住 A(用于向左移动)或 D(用于向右移动),我会更改玩家的 x 位置。

protected bool facingRight = true;
float xPos = 0;

void Update()
{
    if (Input.GetKey(KeyCode.D))
    {
        xPos += 0.01f;
        if (!facingRight)
        {
            Flip();
        }
    }
    else if (Input.GetKey(KeyCode.A))
    {
        xPos -= 0.01f;

        if (facingRight)
        {
            Flip();
        }
    }

    gameObject.transform.position = new Vector2(xPos, transform.position.y);

}

protected void Flip()
{
    facingRight = !facingRight;
    Vector3 theScale = transform.localScale;
    theScale.x *= -1;
    transform.localScale = theScale;
}

当我按住 A 或 D 时,角色拒绝移动。但是他确实翻转正确。

我个人觉得我的动画是在和剧本打架,而且动画的优先级比剧本高……?

这是我解释我的问题的视频

(不知道这个社区是否普遍接受视频。如果没有,那么我道歉)

如果你们能帮助我了解正在发生的事情以及如何纠正它,我将非常感激。

谢谢!:)

4

1 回答 1

0

经过数小时的修补后解决了问题。

原来解决方案很简单:

我所要做的就是像这样构建我的播放器:

  • 玩家(空游戏对象)
    • PlayerAssembly(身体、头部和手臂的父级)
      • 身体部位(身体、头部、手臂)

然后将脚本、rigidBody2D 和 collider 放在“Player”上。

然后将动画师放在“PlayerAssembly”上。

层次结构的形象

于 2017-04-01T00:41:29.667 回答