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

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

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

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

Unity3D

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

Unity

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

Q&A

0回答

660閲覧

(回転方法について)-90から90度をランダムに示す矢印を表示させたい

cccfffjjj

総合スコア3

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/05/08 11:01

編集2020/05/09 02:11

前提・実現したいこと

Unityを用いたVRを想定したゲームを開発しています
具体的には、ユーザの初期位置正面を0度としそこを中心に-90(ユーザから見て右側)から90度(左側)の範囲でランダムな角度を複数生成し、その角度にユーザが頭を回転させるというものです。
VRにはユーザの頭を取り囲むように180度のアーチ状の矢印が表示されスタート画面では1枚目の画像のように配置されています。目標角度の方向を矢印で目標角度を矢印の先端で表しており、ゲームが開始されると、ユーザはそれを頼りに頭を回転させます。
(例)複数数生成した角度が -30, 30, 90の場合は、画像三枚目のようにまず-30度を矢印の先端が示し、次に30度を示すといった具合にです。
ゴール位置は一定時間ごとに更新されていき、ユーザも矢印に従って動くと仮定し頭部角度によって矢印が動くことはなく、ワールド座標で固定します。
試行錯誤していますがうまく行かず、おそらく以下にあるアーチ状矢印の回転方法を決める条件文、回転(rotate)のコーディングが間違っているのではないかと思っています

イメージ説明
イメージ説明
イメージ説明

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

矢印の先端を更新する際に、矢印の先端を回転軸としてy軸、z軸を回転させようとしているのですが、正しい向きに矢印が表示されません。
停止位置に先端を合わせることはできるのですが、回転がうまくいかずアーチの向きが正しくありません。
矢印移動の順番は、矢印の先端を次の目標角度に移動させ、その後回転させる です

該当のソースコード

C#

X =Mathf.Sin( (float)(kakudo[jp+2])* Mathf.Deg2Rad); Y =Mathf.Cos((float)(kakudo[jp+2]) * Mathf.Deg2Rad); Debug.Log("X Is" + X); Debug.Log("Y" + Y); Vector3 pos = this.gameObject.transform.position; this.gameObject.transform.position = new Vector3 (10 *X,0,(10*Y));//目標角度に位置を合わせる gameObject.transform.rotation = Quaternion.identity;          ZZ=180f;          if (kakudo[jp+2] > kakudo[jp + 1]) { if (kakudo[jp+1] <= kakudo[jp]) { Transform myTransform = this.transform; // myTransform.Rotate(0, 1 * ((float)kakudo[jp + 2] - 90), ZZ, Space.World); myTransform.Rotate(0, 1 * ((float)kakudo[jp + 2] - (float)kakudo(jp+1) + 90), ZZ, Space.World); } } else { Transform myTransform = this.transform; // myTransform.Rotate(0, 1 * ((float)kakudo[jp + 2] - 90), 0, Space.World); myTransform.Rotate(0, 1 * ((float)kakudo[jp + 2] - (float)kakudo(jp + 1) + 90), 0, Space.World); } } else if (kakudo[jp + 2] <= kakudo[jp+1]) { if (kakudo[jp+1] <= kakudo[jp]) { if (kakudo[jp + 2] <= 0) { Transform myTransform = this.transform; myTransform.Rotate(0, 1 * ((float)kakudo[jp + 2] + 90), 0, Space.World); } else { Transform myTransform = this.transform; myTransform.Rotate(0, 1 * ((float)kakudo[jp + 2] + 90), 0, Space.World); } } else if (kakudo[jp + 1] > kakudo[jp]) { if (kakudo[jp + 2] <= 0) { Transform myTransform = this.transform; myTransform.Rotate(0, 1 * ((float)kakudo[jp + 2] + 90), ZZ, Space.World); } else { Transform myTransform = this.transform; myTransform.Rotate(0, 1 * ((float)kakudo[jp + 2] + 90), ZZ, Space.World); } } }

試したこと

kakudo[]には目標角度が格納されており(kakudo[1]=-30,kakudo[2]=90,kakudo[3]=-50など)、kakudo[jp]がひとつ前の目標角度、kakudo[jp+1]が今の目標角度、kakudo[jp+2]が次の目標角度です
回転の際にrotate,space worldを使いワールド座標で回転させようとしたのですがうまくいきませんでした

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問