2

Unity でSprites And Bonesを使用してリギングされた 2D キャラクターがあり、インバース キネマティクスを使用してアニメーション化しています。

しかし、X 軸を反転させたい場合、私のキャラクターは凶暴になります。

IK フリッピング

Flip()シンプルな関数を含む「Karateka」に添付されたスクリプトがあります。

public void Flip(){
    facingRight = !facingRight;
    Vector3 karatekaScale = transform.localScale;
    karatekaScale.x *= -1;
    transform.localScale = karatekaScale;
}
  • 「Karateka」は、ボーン、スプライト、IK ターゲットのコンテナにすぎません
  • "Skeleton" には、Sprite And Bones の Skeleton スクリプトが含まれています。
  • 「右足のボーン」「右下のボーン」などはボーンとIKスクリプトを持っています
  • 「右足」「右下足」などはスプライト
  • 「IK」にはすべての IK ターゲットが含まれます

Unite 2014 - 2D Best Practices In Unityの他の IK スクリプト、Simple CCD と同じ種類の効果があるので、ばかげたことをするだけかもしれません。

キャラクターを適切にフリップするにはどうすればよいですか?

編集(マーク用):

私はこれを使って動作させました:

public void Flip(){
    facingRight = !facingRight;
    /*
    Vector3 karatekaScale = transform.localScale;
    karatekaScale.x *= -1;
    transform.localScale = karatekaScale;
    */

    GameObject IK = GameObject.Find ("IK");
    GameObject skeleton = GameObject.Find ("Skeleton");

    Vector3 ikScale = IK.transform.localScale;
    ikScale.x *= -1;
    IK.transform.localScale = ikScale;

    if (facingRight) {
        skeleton.transform.localEulerAngles = new Vector3(skeleton.transform.localEulerAngles.x, 180.0f, skeleton.transform.localEulerAngles.z);
    } else {
        skeleton.transform.localEulerAngles = new Vector3(skeleton.transform.localEulerAngles.x, 0.0f, skeleton.transform.localEulerAngles.z);
    }
}
4

2 に答える 2

2

さて、コメントで説明したように、要約すると:
1) すべてを反転したり、ボーンを正しくリセットしたりしないため、反転時にアニメーションが「バラバラ」になり
ます 2) SpriteRenderer.フリップ [X/Y] ただし、これはスプライトのすべての要素で行う必要があり
ます。 3) スケルトン スクリプトには「編集モード」チェックボックスがあります。これをオンにして を使用してキャラクターを反転させると、ボーン以外のすべてが反転さscale.x *= -1れていることがわかります

最後になりましたが、問題に対する「コードレベルのソリューション」を提供するコードスニペットで質問が更新されました。

Cyrille さん、詳細をすべて共有していただきありがとうございます。お役に立ててうれしいです。

于 2016-10-10T15:46:21.270 に答える
0

プレハブ (ここではカラテカ) のルートを Y 軸で 180° 回転させることも可能です。

2D スプライトは実際には 2 面の 3D メッシュであり、Y 軸上で 180° 回転させることは、レンダリングを反転させることと同じです。IK がオブジェクトのルートにペアレント化されている場合、それらは回転に従い、すべてのアニメーションが機能します。 .

于 2021-06-28T09:33:50.543 に答える