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

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

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

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

Q&A

解決済

1回答

272閲覧

なぜこのコードで初期の向きが右側になるの?

taishi225

総合スコア27

Unity

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

0グッド

0クリップ

投稿2017/11/18 06:20

こちら(http://ftvoid.com/blog/post/631)のサイトに書かれていた、2dの画面で、物体の向きを取得してその向きに進むコードを実行してみました。

c#

1private const float speed = 5.0f; 2void Update() 3 { 4 // 自身の向きベクトル取得 5 float angleDir = transform.eulerAngles.z * (Mathf.PI / 180.0f); 6 Vector3 dir = new Vector3(Mathf.Cos(angleDir), Mathf.Sin(angleDir), 0.0f); 7 // 自身の向きに移動 8 transform.position += dir * speed * Time.deltaTime; 9 }

実行してみたところ、x軸のプラス方向に進んでいきました。なぜそのような動きになるんですか?
そして、初期の向きをy軸のプラス方向にしたい場合どうすればよいでしょうか?
御教授願いますm(__)m

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

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

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

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

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

guest

回答1

0

ベストアンサー

なぜ+x方向に動くかというと、
xy平面上で0度の向きを大抵の人は+x方向だと認識し
(sin cosの例のぐるぐる回す図を思い浮かべてもらえば)
このコードの作者が画像が回転してない状態の向きを0度と設定したからです

+y方向を画像の回転してない状態の向きとしたいならば90度回せばいいので

cos(θ + 90°) = -sin(θ)
sin(θ + 90°) = cos(θ)
より

c#

1 Vector3 dir = new Vector3(- Mathf.Sin(angleDir), Mathf.Cos(angleDir), 0.0f)

投稿2017/11/18 08:16

asm

総合スコア15147

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

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

taishi225

2017/11/18 14:16

なるほど!-sinとcosにしたら解決しました!ありがとうございましたm(__)m ですが続けて質問よろしいでしょうか…? angleDirはどうして0なんでしょうか? float angleDir = transform.eulerAngles.z * (Mathf.PI / 180.0f);←このコードで0がangleDirに格納されることが理解できません。 よろしければお答えいただければ幸いです。
asm

2017/11/18 16:31 編集

オブジェクトを回転させていないからです そのコードの右辺は transform.eulerAngles.zと(Mathf.PI / 180.0f) に分けられます。 後者は、度→ラジアンの単位変換になります。(Byte単位からbit単位に変換する際に8掛けるみたいなもん) 前者はオブジェクトの回転量を取得ています
taishi225

2017/11/20 01:04

返信ありがとうございます。理解できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問