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

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

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

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

Unity3D

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

Unity

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

Q&A

1回答

310閲覧

スワイプでオブジェクトを回転できるがタップし始めたときに初期状態に戻る

_Beginner

総合スコア103

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2019/03/31 05:22

Unity3D

c#

1 Vector2 startPos, tapPos; 2 3 private void Update() 4 { 5 6 if (Input.GetMouseButtonDown(0)) 7 { 8 startPos = Input.mousePosition; 9 } 10 if (Input.GetMouseButton(0)) 11 { 12 tapPos = Input.mousePosition; 13 this.transform.rotation = Quaternion.Euler(0, this.transform.rotation.y - (startPos.x - tapPos.x), 0); 14 } 15 }

これであるオブジェクトを横に回転させているのですが、
画面をタップした瞬間Rotationが(0, 0, 0)になってしまいます。

回転はしっかりできています。
どなたか回答お願いします。

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

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

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

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

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

guest

回答1

0

transform.rotationQuaternion型であり、.yとしてもオイラー角の値とは異なる値になります。

質問のコードでは
「オイラー角の状態で回転量を計算、Quaternionに変換して代入」
という操作をしており、オイラー角の計算にQuaternionの値を加えるのは不適切です。

transform.eulerAnglesでオイラー角が取得できるので、そちらを使いましょう。

追記

C#

1// 1フレーム前のマウス座標 2private Vector2 _previousMousePosition; 3 4// 移動の感度 5private float _sensitivity; 6 7private void Update() 8{ 9 // 現在のマウス座標 10 var currentMousePosition = Input.mousePosition; 11 12 // 1フレーム前のマウス座標よりマウスの移動量を計算 13 var deltaMouseX = currentMousePosition.x - _previousMousePosition.x; 14 15 // 回転(必要に応じて感度を調整) 16 var eulerAngles = transform.eulerAngles; 17 eulerAngles.y += deltaMouseX * _sensitivity; 18 transform.eulerAngles = eulerAngles; 19}

投稿2019/03/31 06:45

編集2019/03/31 10:53
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

_Beginner

2019/03/31 07:14

回答ありがとうございます。 this.transform.rotation = Quaternion.Euler(0, this.transform.rotation.y - (startPos.x - tapPos.x), 0); これを this.transform.rotation = Quaternion.Euler(0, this.transform.eulerAngles.y - (startPos.x - tapPos.x), 0); にしたら、 スワイプした分回らず、スワイプした長さを transform.Rotate()みたいな感じで回ってしまいます。 どうすればいいのでしょうか?
退会済みユーザー

退会済みユーザー

2019/03/31 07:17

「スワイプした分回らず、スワイプした長さを transform.Rotate()みたいな感じで回ってしまいます。」 これの意味が分からないのですがつまりどういうことなのでしょうか…?
退会済みユーザー

退会済みユーザー

2019/03/31 07:18

ちょっと質問を変えます。 「スワイプした分」と「スワイプした長さ」の違いはなんなのでしょうか?
_Beginner

2019/03/31 07:41

すみません。こちらの言葉がおかしかったです。 僕のコードだとスワイプで指を動かした分だけ回ります。止めると回転も止まります。 そして、transform.eulerAngles.yを取得するやり方だとスワイプした後、指を動かしていないのにそのまま回転し続けてしまします。 スワイプした分とスワイプした長さは同じ意味です。
退会済みユーザー

退会済みユーザー

2019/03/31 10:26

おっと、ごめんなさい。色々と見逃していました。 まずあなたのやりたいこととコードのロジックとがそもそも違っています。 コードを回答の方に追記しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問