团结翻转精灵

时间:2015-03-03 15:45:08

标签: c# unity3d sprite flip

我真的很喜欢使用Unity和C#所以请原谅我这是一个愚蠢的问题,但我真的无法弄清楚..

我只是想在我的2D游戏中翻转我的精灵,但是当我使用localScale时,精灵的位置也会改变。

就是这样:

向右翻转: | [精灵面朝右]

向左翻转: [精灵面朝左] |

“|”标志停留在游戏中的一个位置。哇这很难描述没有图片,但我希望你能理解我。我无法发布图片,因为我是论坛新手。

所以问题是: 当我更改localScale时,整个精灵会移动,我不明白为什么。 有人可以帮帮我吗?提前谢谢!

我的代码:

    private void HandleInput()
{
    if (Input.GetKey(KeyCode.D))
    {
        _normalizedHorizontalSpeed = 1;
        if (!_isFacingRight)
            Flip();
    }
    else if (Input.GetKey(KeyCode.A))
    {
        _normalizedHorizontalSpeed = -1;
        if (_isFacingRight)
            Flip();
    }
    else
    {
        _normalizedHorizontalSpeed = 0;
    }

    if(_controller.CanJump && Input.GetKeyDown(KeyCode.Space))
    {
        _controller.Jump();
    }
}
    private void Flip()
    {
        transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);
        _isFacingRight = transform.localScale.x > 0;
    }

}

1 个答案:

答案 0 :(得分:2)

确保正确配置精灵的原点。在大多数情况下,精灵的原点应该在中间,这会使负变换在中心周围翻转。但是如果原点位于一个角落,则该位置在任何比例下保持不变,这意味着它将位于同一位置,并且您的精灵在翻转时似乎会移动。如果你的精灵仅占用用于精灵的图像的一部分 - 它实际上没有移动,但由于你无法看到图像的其余部分,它似乎也是如此。