簡體   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