質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

5555閲覧

2D 進行方向に対しての角度の求め方

GOTOken

総合スコア54

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/06/23 13:28

編集2018/06/23 13:42

c#

1Utils.cs 2 // 指定された 2 つの位置から角度を求めて返す 3 public static float GetAngle(Vector2 from, Vector2 to) 4 { 5 var dx = to.x - from.x; 6 var dy = to.y - from.y; 7 var rad = Mathf.Atan2(dy, dx); 8 return rad * Mathf.Rad2Deg; 9 } 10

c#

1player.cs 2 //移動処理 3 float dy = Input.GetAxis("Vertical") * Playerspped; 4 float dx = Input.GetAxis("Horizontal") * Playerspped; 5 6 rb2d.velocity = new Vector2(dx, dy); 7 8 // マウスカーソルが存在する方向の角度を取得する 9 var angle = Utils.GetAngle(Vector3.zero, direction); 10 11 // プレイヤーがマウスカーソルの方向を見るようにする 12 var angles = transform.localEulerAngles; 13 angles.z = angle - 90; 14 transform.localEulerAngles = angles; 15 //弾を撃つ関数 16 private void ShootNWay(float angleBase, float angleRange, float speed, int count) 17 { 18 var pos = transform.localPosition; // プレイヤーの位置 19 var rot = transform.localRotation; // プレイヤーの向き 20 21 if (count == 1) 22 { 23 // 発射する弾を生成する 24 var shot = Instantiate(BulletPrefab, pos, rot); 25 26 // 弾を発射する方向と速さを設定する 27 shot.Init(angleBase, speed); 28 } 29 } 30

このようなスクリプトから、マウスカーソルの取得からキー入力に変更して、角度を取得したいと思いました。
移動する際に、このような移動処理の場合で角度を求めることが出来るのでしょうか・・・?
他によい方法がございましたらご教授していただけるとうれしいです。
(2Dのため、どのようにして進行方向に対して角度を求めればよいのかわかりません。。)

しようと思っていたこと

キー入力にて、進行方向に対しての角度を求め、その方向に対してオブジェクトを生成する。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

var angle = Utils.GetAngle(Vector3.zero, up);

angles.z = angle + 90;

these lines help you

投稿2018/06/23 18:32

AliHassan

総合スコア351

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

プレイヤーの位置を第一引数、マウスカーソルの位置を第二引数にして、GetAngleを呼べばプレイヤーに対してカーソルの角度が出ますが、そういうことじゃなくて?

投稿2018/06/23 18:28

efcode

総合スコア422

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GOTOken

2018/06/23 19:26

今回したいのはカーソルの角度取得ではなく、キー入力での角度取得をしたいな。と考えております。具体的には、xに進むと角度は45°となる。xy同時に進むと約22°になる。というイメージです。進行方向に対して角度を求める方法をこのカーソルで角度を求めていたのを参考に改造しようとしたのですが、実際に角度が求めることが出来なかったので、具体的な改造箇所、案があれば教えて頂ければ。と思いまして。。
efcode

2018/06/24 01:18

キャラクターの向きに対して、画面の上下左右が何度になるのかを知りたいわけですか? transform.localRotationはキャラクター(プレイヤー)の向きなわけですから、0°90°180°270°に足すか引いてあげればそれぞれの角度になると思うけど。 すいません、具体的な目標がよく見えなくて
GOTOken

2018/06/24 01:49

視点的にはトップダウンのシューティングを作ろうと思ってたんです。その時に、プレイヤーの正面を取得するにはどうすれば良いのか。これが一番知りたい情報です。分かりにくくてすみません、。
efcode

2018/06/24 03:15

移動のみに対して向きを規定してるわけですか? ある地点での座標を第一引数、現在位置を第二引数にしてGetAngleを呼べば二点間の角度が出ます。 色んな値を入れて試行錯誤してみてください。それがプログラミングの醍醐味ですから。
GOTOken

2018/06/24 04:26

わかりました!ありがとうございます。再度不明な点が浮上してきましたら、その時は助言の方お願いします。。ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問