2017-05-14 6 views
0

Results that im getting, and result that I want. Descriptive image.投射されたスプライトを回転させて、斜めのカメラとそれが飛行しているターゲットに向くようにします。 2Dトップダウン

私はこの質問は私がすべてのこのフォーラムを見ていると解決のための統一回答されている私を信じて、ない非常にこのように前に頼まれたことを知ります。

私は、モンスターが私のキャラクターで投射物を撃つことができる2dトップダウンゲームを作っています。私は空のgameobjectの場所でアニメーションの特定の点から発射プリアセンブリをインスタンス化し、それはうまく見えるようにすることで解決しました。私は発射物をプレイヤーに見せてもらい、元々どこにいたかを目標にして、それをドッジブルにしました。その時点での発射体の動きは完璧であり、私自身はこれを誇りに思っています!私が使用したコードはここにあります:

public void OnCastComplete() 
{ 
    var projectile = Instantiate(fireball, projectileInitialLocation.transform.position, transform.rotation); 

    projectile.transform.LookAt(currentTarget.transform.position); 

    projectile.velocity = projectile.transform.forward * projectileSpeed; 

    Vector2 dir = currentTarget.transform.position - projectile.transform.position; 
    float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; 

    projectile.transform.rotation = Quaternion.AngleAxis(angle, Vector2.up); 
} 

これは完璧に動作します。私が必要とするルック・アンド・フィールでは、ゲーム内の3D要素を生き生きとさせるために、カメラは角度をつけていますが、2次元スプライトを走らせることができます。これは、発射物を含むすべてのスプライトに、カメラを向けるためのスクリプトが必要であることを意味します。ここ

は、そのスクリプトです:

public Transform target; 

void Start() { 
    target = GameObject.Find("MainCamera").GetComponent<Transform>(); 
} 

void Update() { 

    if (target != null) 

     this.transform.rotation = Camera.main.transform.rotation; 
} 

今、私は私は1つは確かなものを作るの強打アップジョブがカメラに直面しないと他のを確認します見ることができるように、これらの2つのスクリプトはここに犯人であることを確信していますスプライトを正しく回転させます。一緒に働くことはできません。後者のスクリプトを発射物から取り除くことは、視聴者がそれにほとんど気付かないような角度で回転しないことがあることを意味する。それはそれがカメラに向いていることを意味しますが、私が上に掲げた写真の結果を私に与えます。

私は彼らがお互いに素晴らしいプレーするために得ることができないとの問題は、私は私が誰かを助けることができる(

希望=ここに質問を投稿する必要が怖いですので、特定のです!

はありがとうございました!

もちろん

答えて

0

は、私は10分の質問を投稿した後、この問題を修正するために管理する。

私は固定の方法は、それは弾丸のカメラに直面してスクリプトを削除変更することでした。それを補うように発射をインスタンス化するとき:

public void OnCastComplete() 
{ 
    var projectile = Instantiate(fireball, projectileInitialLocation.transform.position, transform.rotation); 

    projectile.transform.LookAt(currentTarget.transform.position); 

    projectile.velocity = projectile.transform.forward * projectileSpeed; 

    Vector2 dir = currentTarget.transform.position - projectile.transform.position; 
    float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; 

    //projectile.transform.rotation = Quaternion.AngleAxis(angle, Vector2.up); 
    projectile.transform.rotation = Quaternion.Euler(-25, 0, angle); 
} 

私がコメントアウトした行は前の行であり、その下の行が問題を修正しています。カメラは、xに-25を加えることによって補償され、スプライトの回転はzオイラー角に「アングル」を加えることによって補償されます。

これは誰かを助けることを望みます。

関連する問題