2016-12-09 10 views
0

私は画面の下部にプレーヤーを、画面の上部に敵を持っています。私はそれらの両方を互いに向かって連続的に回転させたい。ここでは、両方のための私のコードは次のとおりです。Player&Enemy 2Dオートローテーション

void Update() 
    { 
     Vector3 diff = target.position - transform.position; 
     diff.Normalize(); 

     float zRotation = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg; 
     Vector3 lookDirection = new Vector3(0, 0, zRotation - 90); 
     transform.rotation = Quaternion.Euler(lookDirection); 
    } 

は、この状態を考えると、プレイヤーは期待通りに動作しますが、敵は常にダウンプレイヤーがどこにあるかで、彼が見上げていることを意味代わりに、離れたプレイヤーから回転します。

私はこのようなdiffベクトル切り替えた場合:

Vector3 diff = transform.position - target.position; 

そして、それは敵から離れて見える選手だし。 両方のスプライトは、エディタで回転とスケールの値が0です。

ここで何が間違っていますか?

答えて

0

あなたのソリューションは、私のために正常に動作します:http://imgur.com/a/spi3O

は、それが「アップ」敵のためには、プレーヤーのための「ダウン」であるということでした。あなたのスプライトの1つが上下逆さまに描かれていますか?

あなたが次のことを試すことができますが、それは同じ結果が得られます

var dir = target.position - transform.position; 
var angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; 
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward); 

あなたは回転を計算するのと同じ方法を使用するつもりなら、あなたはあなたのスプライトが同じ世界を持っていることを保証する必要がありますが相対的なネイティブローテーション、またはそれを修正する。

+0

これは2Dでは機能しません。私はZ軸で回転したいだけです。 – Abdou023

+0

したがって、xとyのターゲット値を0に変更してください – Maakep

+0

2Dの関数を使ってみましたか?上記のコードを使って動作させることはできますか? – Abdou023

関連する問題