質問: Quaternion.Euler(rot.x+90,0,0); //to.eulerAngles.x += 90; } } } ``` ### 試したこと 今まで3Dゲームを開発したことがなく、勉強したいと考えております。 書籍などを見てUnityの使い方はわかってきたのですが、イチから自分で作るとなると苦戦してしまいまして・・・。 色々なサイトなどをみることで3Dではクォータニオン回転をマスターしないといけないことまでわかりますした。これが厄介であまり理解できておりません。 物体が回転しながら移動し、正立方体(スケール1,2,1みたな直方体など)でないことも考慮したいのですが、アドバイスなどいただくことは難しいでしょうか。 ### 補足情報(言語/FW/ツール等のバージョンなど) Unity5、C#
回答: どういった意図のスムーズな回転かが分かりかねたので コード見て思ったことを書きますね。 投稿者さんが想像する動作としては 横回転 -> 縦回転 -> 更に横回転 みたいに順番に転がって欲しいということでしょうか? であれば、回転方向(あるいは移動先のマス番号)をキューイングしてやればいかかでしょうか? (たとえばDiceMotionUpdaterみないなコンポーネント作って^^) それとも球面線形補間だと回転の初速が速くて徐々に遅くなる... のが気に入らないという場合なら、単純な線形補間(Quaternion.Lerp)で十分ですよ~。 例えば... ``` const float m_rotationTime = 0.2f; // 回転する時間 float m_totalTime = 0f; // 累計時間 void Update() { if (m_totalTime <= m_rotationTime) { m_totalTime = Mathf.Min(m_totalTime + Time.deltaTime, m_rotationTime); transform.rotation = Quaternion.Lerp(from.rotation, to.rotation, m_totalTime / m_rotationTime); } } ``` とかですかね。 適当な回答でスイマセン! あと、蛇足ですけどクォータニオンなんか分からなくてもゲームなんてできるもんです。 作ることが楽しければどうにかなりますって!