2017-09-17 5 views
0

6つのセクションに分割されたスピンホイールを作成しようとしています。各セクションには、そのセクションの中央に配置されたgameObjectがマークされます。プレイヤーがホイールを回転させると、ホイールが回転を停止し、ホイールが選択されたセクション(ランダムに)に基づいて中央に移動して停止するまで回転します。私は、X軸上の0に向かってホイールを回転させるために次のコードを使用しました。選択したセクションが正のX軸上にある場合にのみ、このコードは正常に動作し、ホイールは正常に回転します。 回転方向を設定するUnity C#

float rotateFloat = (((randomReward + 1) * 60) - 30) - transform.rotation.z; 
Quaternion targetRotation = Quaternion.Euler(new Vector3(0, 0, rotateFloat)); 
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, f_difX * Time.deltaTime); 

私はいくつかの掘削をしたとQuaternion.RotateTowards()がターゲットに向かって最も近い道を見つけ、その方向(これは回転の方向に問題を引き起こした)を使用して回転させることを見出しました。

例(画像に従う):プレイヤーがスワイプし、ランダムなリワード(スピンホイールの5番)を押すとホイールが回転を開始します。車輪が減速すると、車輪は中央に向かって動き始めます。次に、スワイプの方向に沿って回転を停止し、反対側に向かって回転します(中央までの距離が左側から近づいているため)。

どのようにセンターに近いかにかかわらず、スワイプの同じ方向に従うように設定するにはどうすればよいですか。そして、これを行うより良い方法があれば、私に教えてください。ありがとう。

enter image description here

答えて

0

私はゲームオブジェクトを回転させる最も簡単な方法は、使用していると思う:あなたはそれが時々ゲームオブジェクトそれの中心を発生することが彼のhere

についての詳細を読むことができます

float Speed = 1f; 

void Update() 
{ 
    // Rotate the object around its local X axis at 1 degree per second 
    transform.Rotate(Vector3.right * Time.deltaTime * Speed); 
} 

メッシュまたはスプライトの中心に配置されていません。なんらかの理由でこれを変更できない場合は、このモデル/スプライトを空のGameObjectの子として配置し、空のGameObjectに回転スクリプトを添付します。

0

私はあなたが望む報酬にディスクを回転させたくないと思いますが。なぜあなたは無作為な報酬を使い、報酬へのローテーションの裏打ちの問題を抱えていますか?

あなたはキャッチ 'スワイプ時間'を言うことができるはずです(たとえば、画面のタッチ時間が非常に短い場合は少なくとも1回は回ります)。ディスクの円周内にある。次にディスクが回転したら、報酬を決定するために一番上の位置にレイキャストをしますか? (スピンアップ時間をスワイプ時間に関連付けることもできるので、報酬はいくらか同じ時間間隔で提供される)。

//この回答は質問者に役立つかもしれないと思うので、代わりに回答として提供されると思いますので、このコメントはコメントとして投稿されているはずです。 (

+0

「スワイプの時間」を使う代わりに、私はf_difXを使用しました。これは、基本的にプレーヤーがどこを残したかのポイントですスワイプする前に画面に触れた位置 - スワイプの時間とスピンの時間を結びつけるというアイデアがあります。そのアイデアを具体的に説明することは可能ですか?答えは:) –

関連する問題