ここから本文です

unityのtransform.transformDirectionについての質問です。一日中調べたのですが、...

ura********さん

2015/10/1802:02:32

unityのtransform.transformDirectionについての質問です。一日中調べたのですが、どうしてもうまくしっくりきた理解を得られませんでした。。

正直疲れました泣

4つほど質問がありますが、transformDirectionについてちゃんと理解すればすべて解けそうな質問です。あと少しで理解できそうなのですが理解できませんでした。

少し長いかもしれませんが、詳しい方どれか一つでも回答をよろしくお願いします。


主に、以下のコードで頭を悩ませております。これが何をしているのかわかりません。使用言語はC#です。

Vector3 forward = Camera.main.transform.TransformDirection(Vector3.forward);
Vector3 right = Camera.main.transform.TransformDirection(Vector3.right);

moveDirection = Input.GetAxis("Horizontal")*right + Input.GetAxis("Vertical")*forward;
moveDirection *= speed;


この一文をいろいろなサイトで見ますし、自分もこの文を使おうとしているのですが・・・
コピペで動かしてみたら非常によく動くので仕組みをちゃんと理解して応用したいと考えております。

①transformDirection()は、引数のローカル座標をワールド座標に変換するとあります。ということは、引数はローカル座標でなければならない・・・ということになりますよね?

②親(1,0)で子(3,0)だったら、子のワールド座標は(4,0)で正しいでしょうか?僕のこの2座標系の理解は、「ローカル座標は親の座標を原点としたときの子の座標」・・・という認識なのですが。。

③何も考えずにtransformなどによって取得できるそのゲームオブジェクトの座標というのはワールドなのでしょうか、それともローカルなのでしょうか・・・
ヒエラルキーで階層下になってない限りは無条件でワールド座標になりそうですが、子の場合はどちらの座標系で返されるのでしょう?

④上コードにて、
Vector3 forward = Camera.main.transform.TransformDirection(Vector3.forward);

このうちCamera.main.transformはどのような意味を持っているのでしょうか。ただのカメラの座標でしょうか。だとしたらTransformDirection()にどのような影響を及ぼしますか?




unity、3Dグラフィックともに初心者以下の入門者でございます。どうぞ易しい言葉で回答くださるとうれしいです。よろしくお願いします。

閲覧数:
2,647
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

dea********さん

2015/10/2018:06:40

①「引数はローカル座標でなければならない」→厳密には違います。
ローカル座標か否かを認識する機能はシステム側にはありません。
「どんな座標を入れられようが(たとえ人間がワールド座標を入れようが)システム側はローカル座標と認識する」が正解です。

②合っています。

③スクリプトの「transform.position」は常にワールド座標です(階層化されているオブジェクトに対して実行してもワールド座標が返されます)。
ローカル座標は「transform.localPositon」で取れます。この場合は、1つ上の階層を基準としたローカル座標になります。
更に言うと、インスペクタで表示されているTransformのPositionはローカル座標(1つ上の階層基準)です。

④「ワールド空間におけるメインカメラオブジェクトの座標(向き)」が入ります。
Camera.mainはメインカメラ(=タグ「MainCamera」の付いた)オブジェクト、Vector3.forward は Vector3(0, 0, 1) を意味します。
カメラは常にZ+側に向いているので、TransformDirection(Vector3.forward)はカメラの座標(=向き)を示します。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

rar********さん

2015/10/2000:04:43

①②…その通りです。その認識で間違いないです。

③…子オブジェクトであっても、スクリプトから参照する場合は、ワールド座標になります。

④…申し訳ないです、自分はjavascriptをメインで使っているのでよく分かりませんが、恐らく、親オブジェクトの座標だと思います。違ったらすいません。

以上、お役に立てたら幸いです(^^)

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる