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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

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

Q&A

解決済

1回答

4537閲覧

unityの2dにでのfromtorotationについて

tekateka

総合スコア22

Unity

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

0グッド

1クリップ

投稿2018/08/12 07:53

編集2018/08/12 17:31

前提・実現したいこと
unity2dではlookatの代わりにfromtorotationを使うと聞いて色々調べてみたのですが、下記のサンプルコードを見ても良く分かりません。
対象との距離の中間を出し、その後fromtorotationでy軸を対象の座標に向けているという事なのでしょうか…

追記:試してみた所fromtorotation(vector3.○○,△△position)
○○に向けたい部分 △△に対象を入れている感じでした。

### 発生している問題・エラーメッセージ unity2dでlookatの代用としてのfromtorotationの使い方が分からない

該当のソースコード

c#

1var diff = (target.position - transform.position ).normalized; 2 3transform.rotation = Quaternion.FromToRotation( Vector3.up, diff);

試したこと

2dでlookatをfromtorotationで代用する方法やfromtorotationについてマニュアルを読んだりしました。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

target.positionはターゲットのワールド座標、transform.positionは自分自身のワールド座標です。
ということは、target.position - transform.positionは自分自身を(0, 0, 0)とした時のターゲットの位置...自分自身に対する相対座標ということになります。
ベクトル演算を理解する - Unity マニュアルや、ひとつのオブジェクトから別のオブジェクトへの向きと距離 - Unity マニュアルがご参考になるかと思います。

さらに、求めた相対座標を表すVector3のnormalizedを取得して、それをdiffとしています。
この操作によってベクトルの長さが1になります。やっていることは、「ひとつのオブジェクトから別のオブジェクトへの向きと距離」に例示されている

var distance = heading.magnitude; var direction = heading / distance; // This is now the normalized direction.

と同様です(実際には、ゼロでの割り算を回避する仕組みが組み込まれていて、ちょっと親切です)。

これで、自分自身から見たターゲットの方角を示す長さ1のベクトルdiffを作ることができました。
一方、Vector3.upは(0, 1, 0)...つまり上方向を指す長さ1のベクトルです。

次は、(0, 1, 0)を回転させてdiffの向きにするためのクォータニオンを求めます。
ここでQuaternion.FromToRotation(a, b)を使うと便利です。リファレンスにある通り、これによって「aを回転させてbにするクォータニオン」を作ることができます。

Quaternion.FromToRotation(Vector3.up, diff)によって「(0, 1, 0)を回転させてdiffの向きにするクォータニオン」が得られるので、あとはこれをtransform.rotationに代入してやれば、オブジェクトに回転が適用されて、頭がdiffの方角を向くということになります。

...こんな感じの説明でいかがでしょうか?ご不明点などありましたら、分かる範囲でしたらなるべくお助けしたく思いますので、お気軽にご質問ください。

投稿2018/08/13 23:15

Bongo

総合スコア10807

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

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

tekateka

2018/08/14 16:32

なるほど、相対座標からベクトルの向きを決める→ベクトルの正規化をする→何処を基準に傾けるかをvector3.○○で決める(今回はupだから上方向を)→求めたベクトルと同じ角度に傾ける という感じでしょうか。あんまり詳しく説明してる所が少なかったので助かりました。 bに入れるのは座標ではなくベクトルの向きだったんですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問