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

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

新規登録して質問してみよう
ただいま回答率
85.31%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

解決済

2回答

2376閲覧

【Unity】回転値と回転時間をしてオブジェクトを回転させる方法について

Y0241-N

総合スコア1066

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2022/02/22 05:43

編集2022/02/22 07:48

追記

解答で頂いたDOLocalRotateQuaternionを試したところ、指定回転値へ向けた回転を行うという
望んだ処理ではあったものの、こちらは第三因数にRotaModeを指定できないため、常に最短経路で
回転を行われるため、反時計回りに回したい場合でも勝手に時計回りで指定値へ行ってしまいます。

これを解消する方法は何かありますでしょうか?


表題通り、回転値と回転時間を指定し「ボタンを押した際にn秒かけてx軸をp°にする」という事をしたいのですが、
DotweenのDOLocalRotateが近しい処理でしたが、これは加減算による回転だったため、ボタンを押すたびに指定した回転値分回転してしまうため、望んだ処理とは異なりました。

Dotweenで指定した回転値に向けて回転する処理はありますでしょうか?
また、無ければどのようにすれば出来そうでしょうか。
コルーチンを用いて試してみましたが、これだと0度を指定した時に動かない為、アドバイスを頂けると幸いです。

cs

1 IEnumerator TimeToRota(float angle, float time) 2 { 3 // 0.01秒間ごとに回転する値 4 float rota = 0.01f * angle / time; 5 6 for(float turn = 0; turn < angle; turn += rota) 7 { 8 transform.Rotate(rota,0,0); 9 10 yield return new WaitForSeconds(0.01f); 11 } 12 }

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

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

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

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

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

guest

回答2

0

ベストアンサー

私からも一案として、トゥイーンはスクリプト内に別途保持しておいた角度情報に対して行うことにして、その角度情報をtransformに反映させる...という方針はいかがでしょうか。

C#

1using DG.Tweening; 2using TMPro; 3using UnityEngine; 4 5public class TeapotRotor : MonoBehaviour 6{ 7 // トゥイーンのduration 8 [SerializeField][Min(0.0f)] private float tweenDuration = 1.0f; 9 10 // 現在の角度を表示するためのラベル 11 [SerializeField] private TMP_Text angleXLabel; 12 [SerializeField] private TMP_Text angleYLabel; 13 [SerializeField] private TMP_Text angleZLabel; 14 15 // 目標角度を入力するためのフィールド 16 [SerializeField] private TMP_InputField angleXInput; 17 [SerializeField] private TMP_InputField angleYInput; 18 [SerializeField] private TMP_InputField angleZInput; 19 20 // 現在の角度はtransform.localEulerAnglesは使わず、別途保存しておく 21 private Vector3 angles; 22 23 // anglesを取得・設定するメソッドを用意しておく 24 private void SetAngles(Vector3 value) => this.angles = value; 25 private Vector3 GetAngles() => this.angles; 26 27 // anglesをlocalEulerAnglesに適用するメソッドを用意しておく 28 private void UpdateLocalEulerAngles() => this.transform.localEulerAngles = this.angles; 29 30 private void Start() 31 { 32 // インスペクター上には360°を超える角度や負の角度が入力されている可能性があるため、 33 // プレイモードなら初期角度はm_LocalEulerAnglesHintから取得する 34 #if UNITY_EDITOR 35 using var transformObject = new UnityEditor.SerializedObject(this.transform); 36 this.SetAngles(transformObject.FindProperty("m_LocalEulerAnglesHint")!.vector3Value); 37 #else 38 this.angles = this.transform.localEulerAngles; 39 #endif 40 } 41 42 // Goボタンクリックでこのメソッドを実行し、トゥイーンを発生させる 43 public void Rotate() 44 { 45 var targetAngles = this.angles; 46 float.TryParse(this.angleXInput!.text, out targetAngles.x); 47 float.TryParse(this.angleYInput!.text, out targetAngles.y); 48 float.TryParse(this.angleZInput!.text, out targetAngles.z); 49 DOTween.To(this.GetAngles, this.SetAngles, targetAngles, this.tweenDuration).OnUpdate(this.UpdateLocalEulerAngles); 50 } 51 52 private void Update() 53 { 54 this.angleXLabel!.text = Mathf.RoundToInt(this.angles.x).ToString(); 55 this.angleYLabel!.text = Mathf.RoundToInt(this.angles.y).ToString(); 56 this.angleZLabel!.text = Mathf.RoundToInt(this.angles.z).ToString(); 57 } 58}

図

投稿2022/03/06 01:46

Bongo

総合スコア10816

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

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

0

DotweenのDOLocalRotateが近しい処理でしたが、

DORotate, DORotateQuaternion は試しましたか?

投稿2022/02/22 06:12

bboydaisuke

総合スコア5339

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

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

Y0241-N

2022/02/22 06:28

回答ありがとうございます。 DOLocalRotateQuaternionの方を試してみたところ、指定値への回転だったため望んだ処理ではあったのですが、 こちらは第三因数にRotateMode.LocalAxisAddを指定できないため、回転時に最短で回転するようになってしまいました。正の方向で回転させたいのですが、どのようにすれば可能かご存知でしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問