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

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

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

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

Unity

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

Q&A

解決済

1回答

2599閲覧

Vector3.SignedAngleでX軸の角度を取る方法

mind2020

総合スコア3

C#

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

Unity

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

0グッド

0クリップ

投稿2021/10/28 17:15

SignedAngleで角度を取りたいのですが、X軸で正しい数値を取ることが出来ません

C#

1Vector3 pos = obj.position - transform.position; 2 pos.y = 0f; 3 float direction = Vector3.SignedAngle(transform.forward, pos, transform.up);

上記のスクリプトでY軸の角度を取ることは出来たのですが
X軸の場合、pos.x = 0f として特定の軸を固定した場合
例えばオブジェクトをY軸回転させた場合、正しい数値が取れなくなってしまいました
SignedAngleを使ってオブジェクトのY軸回転に影響を受けずにX軸の角度を取りたい場合どのようにすればよいのでしょうか

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

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

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

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

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

ozwk

2021/10/28 23:33

X軸の角度、Y軸の角度とはなんですか?
mind2020

2021/10/29 05:40

プレイヤーキャラクターの正面に対してどの方角に敵が居るのかを調べる場合 pos.x = 0 Vector3.SignedAngle(transform.forward, pos, transform.up) で問題なく取得出来たのですが プレイヤーキャラクターから見た敵の高さの角度を取る場合 Vector3.SignedAngle(transform.forward, pos, transform.left) でいけるかと思ったのですが正しい数値を取ることが出来ませんでした pos.x = 0 とした場合これはワールド座標なので キャラクターが方向転換すると機能しなくなることに気が付きました しかしこれをどのように対処すればよいのか分かりませんでした
ozwk

2021/10/29 06:08

「角度」というのは角の大きさを表す量です。 あなたの言う「高さの角度」とは どこにできる角の大きさですか? またはどこを回転軸としてどこがどこに移動するときの回転角ですか? とはいえ、これが言語化できないからそもそも求められないのだと思うので、 図示してもらうのが一番手っ取り早いです。 (forwardとrightが成す平面に対する仰角かなとは思っているのですが)
mind2020

2021/10/29 07:26

https://answers.unity.com/questions/1726312/correct-use-of-signedangle.html こちらのフォーラムにある様にSignedAngleでは軸に対するロール角度が正しく取れないという状況で悩んでいました アルファアンサーによる回答によって解決することができました 説明不足によりお手数おかけして申し訳ありませんでした
ozwk

2021/10/29 07:35

解決したようで何よりです あとから見る人のため、ご自身で回答つけてベストアンサーにしてください。
guest

回答1

0

自己解決

https://answers.unity.com/questions/1726312/correct-use-of-signedangle.html
こちらのアルファアンサーによって解決することができました

C#

1void Update() 2 { 3 Debug.Log(GetAngleOnAxis(transform.up, transform.position - toOBJ.position, transform.right)); 4 } 5 6 float GetAngleOnAxis(Vector3 self, Vector3 other, Vector3 axis) 7 { 8 Vector3 perpendicularSelf = Vector3.Cross(axis, self); 9 Vector3 perpendicularOther = Vector3.Cross(axis, other); 10 return Vector3.SignedAngle(perpendicularSelf, perpendicularOther, axis); 11 }

投稿2021/10/29 07:46

mind2020

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問