前提・実現したいこと
以下のようにトランスフォームを回転させているコードを見かけたのですが、
これはtransform.Rotateメソッドのどの構文に該当するのでしょうか。
ご教示お願いします。
C#
1 float rotateSpeed = 2.0f; 2 3 void Update() 4 { 5 this.transform.Rotate(Vector3.up * rotateSpeed); 6 }
試したこと
ドキュメントを確認したところ、Rotateメソッドには以下の構文がありました。
C#
1public void Rotate (Vector3 eulers, Space relativeTo= Space.Self); 2public void Rotate (float xAngle, float yAngle, float zAngle, Space relativeTo= Space.Self); 3public void Rotate (Vector3 axis, float angle, Space relativeTo= Space.Self);
構文を見た限りでは、第1引数しか指定しなくてよいのは、一番最初の
C#
1public void Rotate (Vector3 eulers, Space relativeTo= Space.Self);
の構文のみなので、今回の場合はこれに該当するのかと思いました。
ただし、腑に落ちないことがあり、今回のコードでは、Vector3.upを指定していることです。
引数がeulersではなく、axisであれば、Vector3.upの軸周りに回転させるので、引数axisにVector3.upを指定するという使い方で
納得がいくのですが、eulersは(X,Y,Z)の3つの角度を示すVector3を指定すべきなので、
ワールド座標のY軸の方向ベクトルを意味するVector3.upを指定するのは、違うのではないか?と思ってしまいます。
ただ、以下のようにログを取ってみた所、
C#
1 void Update() 2 { 3 this.transform.Rotate(Vector3.up * rotateSpeed); 4 Debug.Log(Vector3.up * rotateSpeed); 5 }
以下の値が常に出続けました。
(0.0, 2.0, 0.0)
Vector3.upを指定してはいるものの、rotateSpeedを掛け合わせることで、結果として、
引数eulersに(0.0, 2.0, 0.0)のように、Y軸周りの角度2.0度を与え続けているということでしょうか?
つまり、Vector3.upという形で指定しつつも、rotateSpeedを掛け合わせることで、偶然(?)、結果的には、
eulersにY軸のみの角度を与える形となっているということでしょうか。
(第1引数はeulersという名前ではあるものの、結局は、第1引数はaxisのようにみなして、第1引数にVector3.upのような方向ベクトルを指定し、
それにrotateSpeedを掛け合わせてしまえばよいということでしょうか?)
それともドキュメントで見つけた上記構文には該当せずに、以下のような構文が他に存在するということでしょうか?
public void Rotate (Vector3 axis, Space relativeTo= Space.Self);
また、追記の質問となりますが、今回のコードでもTime.deltaTimeを掛けて、以下のようにしたほうがよいでしょうか?
(勉強している教材では、Time.deltaTimeを掛けていなかったため)。
C#
1 float rotateSpeed = 2.0f; 2 3 void Update() 4 { 5 this.transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime); 6 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/07/05 12:32