前提・実現したいこと
こちらのサイトとこちらのサイトを参考に、
Unityエディタのゲーム画面で端から端までのマウス移動で90度回転するように実装したつもりですが、
実際にゲームを実行してみると、かなり少ないマウス移動で何回転もしてしまいます。
該当のソースにおいて、何がおかしいのでしょうか?
ご教示お願い致します。
該当のソースコード
C#
1 Vector2 beganPos; 2 float mouseDeltaPositionX, mouseDeltaPositionY; 3 float xAngle, yAngle, zAngle = 0; 4 5 void Update() 6 { 7 if (Input.GetMouseButtonDown(0)) 8 { 9 beganPos = Input.mousePosition; 10 } 11 else if (Input.GetMouseButton(0)) 12 { 13 14 mouseDeltaPositionX = (Input.mousePosition.x - beganPos.x)/Screen.width; 15 mouseDeltaPositionY = (Input.mousePosition.y - beganPos.y)/Screen.height; 16 17 float xAngle = mouseDeltaPositionY*90; 18 float yAngle = -mouseDeltaPositionX*90; 19 20 //回転 21 this.transform.Rotate(xAngle, yAngle, zAngle, Space.World); 22 } 23 }
追記。
タッチの場合は、なぜRotateで実装できたのでしょうか?
可能ならば、なるべくこれに近いコード(Rotateを使ったコード)で、エディタの方も実装したいです。
int touchCount = Input.touches.Count(t => t.phase != TouchPhase.Ended && t.phase != TouchPhase.Canceled); if (touchCount == 1) { Touch t = Input.touches.First(); switch (t.phase) { case TouchPhase.Moved: xAngle = (t.deltaPosition.y/Screen.height)*90; yAngle = -(t.deltaPosition.x/Screen.width)*90; break; } this.transform.Rotate(xAngle, yAngle, zAngle, Space.World); }
MEMO
タッチのdeltaPositionを、マウスで表現すると下記のようなmouseDeltaPositionになる。
C#
1 void Update() 2 { 3 if (Input.GetMouseButtonDown(0)) 4 { 5 prevPos = Input.mousePosition; 6 } 7 else if (Input.GetMouseButton(0)) 8 { 9 mouseDeltaPosition = Input.mousePosition - prevPos; 10 11 //ポインタ位置差分を求めた後で、現在のポインタ位置をprevPosに代入し、次回のUpdate実行に備える。 12 //この「現在のポインタ位置」が、次フレームでは「前フレームのポインタ位置」となる。 13 prevPos = Input.mousePosition; 14 15 (省略)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/04 08:14
2018/11/04 09:17
退会済みユーザー
2018/11/04 12:09
2018/11/04 12:35
退会済みユーザー
2018/11/04 12:47