お世話になっております。Unityでオブジェクトを回転させて落とすというざっくりテトリスのようなゲームを作成しています。
現在、マウスのドラッグで座標のx軸の移動量を見てオブジェクトの回転を実装しています。
cs
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Test : MonoBehaviour 6{ 7 Vector3 firstPos; 8 Vector3 lastPos; 9 10 // Update is called once per frame 11 void Update() 12 { 13 if (Input.GetMouseButtonDown(0)) { 14 firstPos = Input.mousePosition; 15 }else if (Input.GetMouseButton(0)) { 16 lastPos = Input.mousePosition; 17 18 var dic = lastPos - firstPos; 19 20 if(dic.x > 1.0f) { 21 gameObject.transform.Rotate(0, 0, -1); 22 }else if(dic.x < -1.0f) { 23 gameObject.transform.Rotate(0, 0, 1); 24 } 25 } 26 } 27}
これはこれで操作方法の1つとしてはアリかなとも思っているのですが、できればOffice製品とか、それこそUnityでオブジェクトを回転モードで回す際みたいに、ドラッグしてぐるっと円を描くように動かすとそれに応じて回転するような動きを作りたいと考えています。
たとえばこんな感じで、下からドラッグを初めて時計回りでぐるっと上に引っ張れば、オブジェクトもそれに連動して時計回りにドラッグに連動して回転していく、といった感じです。
#改善案 ― ためしたこと
調べてみた結果、ドラッグした2点間の角度を求めてそれをオブジェクトの回転に反映させれば良さそうだということがわかったので
開始点と現在点に対して、オブジェクトの中央からベクトルを作り、その2つのベクトルの角度を足してみたのですが
これだと一定方向にしか回転しないのと、回転がキツすぎて操作しづらすぎるのでうまくいきませんでした。
cs
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Test : MonoBehaviour 6{ 7 Vector3 firstPos; 8 Vector3 lastPos; 9 10 // Update is called once per frame 11 void Update() 12 { 13 if (Input.GetMouseButtonDown(0)) { 14 firstPos = Input.mousePosition; 15 }else if (Input.GetMouseButton(0)) { 16 lastPos = Input.mousePosition; 17 18 var firstVec = firstPos - gameObject.transform.position; 19 var lastVec = lastPos - gameObject.transform.position; 20 var angleTwoVec = Vector3.Angle(firstVec, lastVec); 21 22 gameObject.transform.rotation = Quaternion.Euler(0, 0, gameObject.transform.rotation.eulerAngles.z + angleTwoVec); 23 } 24 } 25}
左右ともに切り替えてドラッグして回転できるような操作が理想なのですが、どのように改善すれば実現できますでしょうか? お知恵をお借りできれば幸いです。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。