2016-10-10 13 views
2

UnityにSprites And Bonesの2Dキャラクタを装備しています。逆キネマティクスを使用してアニメーションします。Unityで逆キネマティクスを使用して2D文字を反転させます。

しかし、私はX軸を反転したい場合は、私の性格は凶暴:

IK flipping

私はシンプルFlip()機能含む、「空手」に添付のスクリプトを持っている:

public void Flip(){ 
    facingRight = !facingRight; 
    Vector3 karatekaScale = transform.localScale; 
    karatekaScale.x *= -1; 
    transform.localScale = karatekaScale; 
} 
  • 「空手は」ただの骨、スプライトのためのコンテナであり、IKは
  • 「スケルトン」続きをターゲットにスプライトとボーンズのスケルトンスクリプトを使用しています
  • 「右足の骨」「右下の脚の骨」などに骨とIKスクリプトがあります
  • 「右脚」「右下脚」などはスプライトです
  • 「IKは、」すべてのIKは、私がUnite 2014 - 2D Best Practices In Unityから、他のIKスクリプト、シンプルなCCDと同様な効果を持っているので、私は愚かな何かを行うことが

を対象に入っています。

文字を正しく反転させるにはどうすればよいですか? (マーク用)

EDIT:

私はそれがこれを使用して動作するようになった:

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); 
    } 
} 
+0

Sprite RendererのflipX/flipYを使用する代わりに、これをコーディングする理由がありますか? https://docs.unity3d.com/ScriptReference/SpriteRenderer.htmlこれを行う場合、同じことが起こりますか? IKとポールの目標を(IKと骨ごとに)再確認しましたか? –

+0

私は理解できません:私は "karateka" 'GameObject'に' SpriteRenderer'コンポーネントを持っていません。私は3つの 'SpriteRenderer'を各肢に(合計で12点)+胴体と頭部にもう少し追加しました。たとえば、「右脚」、「右下肢」、「右足」にはそれぞれ独自の「SpriteRenderer」があります。私が1つひっくり返すと、それはローカルでのみ反転されます。私はelmpty Sprite Rendererを上の "karateka"オブジェクトに追加しようとしましたが、運がありません。私は 'GetComponent ().flipX = true;'も試みました。私はすべてのオブジェクトをもう一度チェックしますが、一方向に作業しているので、両方で動作するはずです。 – Cyrille

+0

あなたはすべてを反転させたり、骨を正しくリセットしたりしていないようです。アニメーションは私の目では速すぎますが、ボーンの一部が固まって同じ方向を向いているようです(スプライトの原点は0ですか?)これをコードから行うと、ツリー全体のすべてのデータをDebug.Logでダンプして、「スタック」が正しい位置にあるかどうかを確認することもできます。何もなければ、それも情報です –

答えて

2

さて、私たちはそれをまとめるために、コメントで述べたように:
1)あなたドンすべてをフリップしたり、ボーンを正しくリセットしたりしないでください。そのため、アニメーションが反転するときにアニメが「崩れ落ちる」のがあります。 .flip [X/Y]スプライト
3)スケルトンスクリプトに「編集モード」があります。チェックボックス。それがチェックされ、1がscale.x *= -1を使用して文字を反転させています場合は、

そして最後にではなく、少なくともを反転している骨を除いて、すべて を見ることができ、質問が問題に「コード・レベル・ソリューション」を提供するコードスニペットを更新しました。

Cyrilleのすべての詳細を共有してくれてありがとうと私は助けることができてうれしいです。

関連する問題