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

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

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

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

2回答

5403閲覧

3Dオブジェクトの回転と移動をスムーズに実現したい

momiji0210

総合スコア60

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2016/08/20 16:50

###前提・実現したいこと
3Dオブジェクトの回転と移動をスムーズに実現したい

参考動画
https://www.youtube.com/watch?v=vkVNQMfHvA0

###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード

Unity5

1public class Cube : MonoBehaviour { 2 3 private bool rotationFlag; 4 private Vector3 touchStartPos; 5 6 private Quaternion from; 7 private Quaternion to; 8 private float time; 9 10 void Start() 11 { 12 rotationFlag = false; 13 touchStartPos = new Vector3(0.0f, 0.0f, 0.0f); 14 from = Quaternion.Euler(0,0,0); 15 to = Quaternion.Euler(0,0,0); 16 time = 0; 17 } 18 19 void Update() 20 { 21 22 transform.rotation = Quaternion.Slerp(transform.rotation, to, Time.deltaTime * 10.0f); 23 24 if (Input.GetButtonDown ("Fire1")) { 25 Vector3 rot = transform.localRotation.eulerAngles; 26 to = Quaternion.Euler(90,0,0); 27 //to = Quaternion.Euler(rot.x+90,0,0); 28 //to.eulerAngles.x += 90; 29 30 } 31 } 32} 33

###試したこと

今まで3Dゲームを開発したことがなく、勉強したいと考えております。
書籍などを見てUnityの使い方はわかってきたのですが、イチから自分で作るとなると苦戦してしまいまして・・・。

色々なサイトなどをみることで3Dではクォータニオン回転をマスターしないといけないことまでわかりますした。これが厄介であまり理解できておりません。
物体が回転しながら移動し、正立方体(スケール1,2,1みたな直方体など)でないことも考慮したいのですが、アドバイスなどいただくことは難しいでしょうか。

###補足情報(言語/FW/ツール等のバージョンなど)
Unity5、C#

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

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

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

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

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

guest

回答2

0

ベストアンサー

どういった意図のスムーズな回転かが分かりかねたので
コード見て思ったことを書きますね。

投稿者さんが想像する動作としては
横回転 -> 縦回転 -> 更に横回転
みたいに順番に転がって欲しいということでしょうか?

であれば、回転方向(あるいは移動先のマス番号)をキューイングしてやればいかかでしょうか?
(たとえばDiceMotionUpdaterみないなコンポーネント作って^^)

それとも球面線形補間だと回転の初速が速くて徐々に遅くなる…
のが気に入らないという場合なら、単純な線形補間(Quaternion.Lerp)で十分ですよ~。

例えば…

cs

1const float m_rotationTime = 0.2f; // 回転する時間 2float m_totalTime = 0f; // 累計時間 3 4void Update() { 5 if (m_totalTime <= m_rotationTime) { 6 m_totalTime = Mathf.Min(m_totalTime + Time.deltaTime, m_rotationTime); 7 transform.rotation = Quaternion.Lerp(from.rotation, to.rotation, m_totalTime / m_rotationTime); 8 } 9}

とかですかね。
適当な回答でスイマセン!

あと、蛇足ですけどクォータニオンなんか分からなくてもゲームなんてできるもんです。
作ることが楽しければどうにかなりますって!

投稿2016/08/22 13:53

編集2016/08/22 14:04
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

momiji0210

2016/08/26 02:35

遅くなってしまい申し訳ございません! あまりUnityを理解できておらず助かりました・・・。 もう少し勉強してみます。
guest

0

こちらが参考になると思います。

http://qiita.com/utah/items/005e34e6888b0b6c63c3

上記サイトの下部にもありますが、itweenのライブラリを使うと便利です。

https://www.assetstore.unity3d.com/jp/#!/content/84

投稿2016/08/21 16:56

Qoo

総合スコア1249

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

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

momiji0210

2016/08/26 02:36

回答がおそくなってしまい申し訳ございませんでした! こちら試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問