繁体   English   中英

如何在 Unity 中翻转游戏中的 x 轴运行动画?

[英]How to flip a x-axis running animation in a game in Unity?

只是想知道是否有办法在 Unity 中使用 C# 翻转游戏中的动画。 我尝试了以下方法,让我的角色转向:

this.gameObject.transform.localScale =1

...
this.gameObject.transform.localScale =-1

但这似乎不起作用。有什么想法吗?

如果你想让你的精灵朝他走路的方向翻转,那么你可以试试这个。

 private void flipSprite()
{
    bool runningHorizntaly = Mathf.Abs(myRigidbody2D.velocity.x) > Mathf.Epsilon;

    if(runningHorizntaly)
    {
        transform.localScale = new Vector2(Mathf.Sign(myRigidbody2D.velocity.x), 1f);
    }
}

它应该将您的精灵(在 2d 游戏中)朝正确的方向翻转,并且附加到您角色的所有动画也会翻转。 我希望它有所帮助。

首先,localScale 是 Vector3,而不是整数。

您可以使用Transformscale / localScale或 SpriteRenderer 的flipX字段进行SpriteRenderer 要做到这一点,您需要每帧检查角色在 x 轴上的速度并设置正确的翻转方向。

示例代码(未测试),假设这是在您的根玩家游戏对象上,您的动画师也在此游戏对象或其子游戏对象上,并且您正在使用刚体 2D 移动它:

const float MIN_FLIP_THRESHOLD = 0.1f;
static readonly Vector3 FACE_RIGHT = Vector3.one;
static readonly Vector3 FACE_LEFT = new Vector3(-1, 1, 1);
Rigidbody2d rb;

void Awake() {
    rb = GetComponent<Rigidbody2D>();
}
void Update(){
    var horizontalV = rb.velocity.x;
    if (horizontalV > MIN_FLIP_THRESHOLD) {
        transform.localScale = FACE_RIGHT;
    } else if (horizontalV < -MIN_FLIP_THRESHOLD) {
        transform.localScale = FACE_LEFT;
    }
}

请注意,当水平V 在 -0.1 和 0.1 之间时,不会进行额外的翻转。 这通常是您想要的,因为您不希望您的翻转过于敏感。 此外,Unity Physics 太卡了,如果任何小的速度都会导致翻转,您的角色有时可能会抖动和来回翻转。 您应该自己测试此阈值以满足您的需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM