🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Unity3D

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Unity

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

Q&A

解決済

1回答

1933閲覧

Unity 3次元の垂直方向の回転がうまくいかない

groggy_egg

総合スコア24

C#

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

Unity3D

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Unity

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

0グッド

1クリップ

投稿2021/01/06 04:51

Unity2020.2.1f1

点(0,0)を中心に円柱を回転させて、そのあと動く角度の範囲を制限したいです。
画像

回転量は画面上でのマウスの移動量で決めています。

C#

1 void Start() 2 { 3 oldMouseScrPos = Input.mousePosition; 4 } 5 6 Vector3 getMouseMoveScreen() 7 { 8 //マウスのスクリーン座標を取得 左下が(0,0,0) 9 Vector3 screenPos = Input.mousePosition; 10 //前回の位置との差を計算 11 Vector3 def; 12 def.x = screenPos.x - oldMouseScrPos.x; 13 def.y = screenPos.y - oldMouseScrPos.y; 14 def.z = 0; 15 //現在の位置を保存 16 oldMouseScrPos = screenPos; 17 return def; 18 }

オブジェクトの現在の角度(localAngle)を取得し、そこに回転する角度(rotx)を足して
オブジェクトの角度を変更しています。

C#

1 //現在の角度 2 Vector3 localAngle = obj.gameObject.transform.localEulerAngles; 3 //角度を加算 4 float rx = localAngle.x - rotx; 5 localAngle.x = rx; 6 7 //角度を変更 8 obj.transform.localEulerAngles = localAngle; 9 //↓同様の結果になる 10 //Quaternion angle=Quaternion.identity; 11 //angle.eulerAngles = localAngle; 12 //obj.transform.rotation = angle;

Y軸の回転(水平方向)はうまくいくのですが
X軸の回転(垂直方向)では270(Y軸+方向真上)と90(Y軸―方向真下)に達すると
それ以上同じ方向にマウスを動かしても角度が変化しなくなります(プルプル微動はする)。
そのまま同じ方向に回転させ続けるにはどうすればいいのでしょうか?

また、インスペクター上のTransformのRotationとスクリプト上のlocalEulerAnglesの角度の範囲が違う値になっているのですが同じ値は取得できないのでしょうか?

  • インスペクターでは‐180~180
  • localEulerAnglesは0~360

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

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

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

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

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

hoshi-takanori

2021/01/06 06:57

「ジンバルロック」で検索してみましょう。
groggy_egg

2021/01/06 07:03

ジンバルロックだとはわかりましたが修正方法がわかりません
guest

回答1

0

自己解決

transform.rotate(rotx,0,0);
でうまくいきました。
※rotxは「現在のオブジェクトの角度+変化する角度」ではなく
動かしたい角度量です。

LocalEulerAngleに角度を代入するとジンバルロックするようです。

投稿2021/01/07 02:59

groggy_egg

総合スコア24

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問