画面をタップした位置を基準として、そこからスワイプした方向の逆向きにオブジェクトを向かせたいです。
タップダウン位置は Input.GetMouseButtonDown() で取得しました。
そこから ** Inpu.GetMouseButton()** でスワイプ中のタップ位置を取得したいのですが、
このあたりからよくわからなくなってきました。
スワイプ中のタップ位置は
c#
1Input.mousePosition
で取得できるのですが、
これをどうやってオブジェクトに反映させるのかわかりません。
どなたか回答お願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
質問頂きありがとうございます。
追記
回転のプログラム
c#
1public class SwipeRotate:MonoBehavior{ 2 public GameObject target; 3 Vector3 lastPos; 4 void Update(){ 5 p=Input.mousePosition; 6 if(Input.GetMouseButtonDown(0)){ 7 lastPos=p; 8 } 9 else if(Input.GetMouseButton(0)){ 10 Vector3 delta=p-lastPos; 11 Vector3 normal=Quarternion.Euler(0,0,90)*delta; 12 Vector3 axis=Camera.main.tranform.rotation*normal; 13 target.transform.rotation*=Quarternion.AngleAxis(delta.magnitude,axis.normalized); 14 lastPos=p; 15 } 16 } 17}
向かせるプログラム
c#
1public class SwipeLookAt:MonoBehavior{ 2 public GameObject target; 3 Vector3 lastPos; 4 void Update(){ 5 p=Input.mousePosition; 6 if(Input.GetMouseButtonDown(0)){ 7 lastPos=p; 8 } 9 else if(Input.GetMouseButton(0)){ 10 Vector3 delta=p-lastPos; 11 12 Vector3 dir=Camera.main.tranform.rotation*delta; 13 target.transform.rotation=Quaternion.LookRotation(dir); 14 lastPos=p; 15 } 16 } 17}
線形補完付き
c#
1public class SwipeLookAt:MonoBehavior{ 2 public GameObject target; 3 Vector3 lastPos; 4 Quarternion q; 5 void Update(){ 6 p=Input.mousePosition; 7 if(Input.GetMouseButtonDown(0)){ 8 lastPos=p; 9 } 10 else if(Input.GetMouseButton(0)){ 11 Vector3 delta=p-lastPos; 12 13 Vector3 dir=Camera.main.tranform.rotation*delta; 14 q=Quaternion.LookRotation(dir); 15 lastPos=p; 16 } 17 target.transform.rotation=Quarternion.Lerp(target.transform.rotation,q,Time.deltaTime); 18 } 19}
おまけ
3D空間上で納得できる移動にする方法を幾つか挙げておきます。
座標直代入
単純に画面上のマウスの2次元的変化量に対応させて移動させる方法ですが、遠近法は効きません。
コードはこんな感じです。
c#
1public class TwoDimensionalSwipe:MonoBehavior{ 2 public GameObject target;//please assign GameObject from the inspector window 3 public float sensi=10;//Sensitivity 4 Vector3 lastPos; 5 void Update(){ 6 if(Input.GetMouseButtonDown(0)){ 7 lastPos=Input.mousePosition; 8 9 } 10 if(Input.GetMouseButton(0)){ 11 12 Vector3 delta=Input.mousePosition-lastPos; 13 target.transform.position+=-delta*sensitivity; 14 lastPos=Input.mousePosition; 15 } 16 17 } 18}
小細工すればカメラの回転も反映させられる(ローカル座標のxy平面上での平行移動)と思います。
ScreenToWorldPointを使う
こっちの方が「普通」の挙動だと思います。
遠近法が利くので見かけの移動量とマウスの動きが合います。
c#
1public class ThreeDimientionalSwipe:MonoBehavior{ 2 public GameObject target; 3 Vector3 lastPos; 4 void Update(){ 5 Vector3 p=Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,Vector3.Distance(target.transform.position,Camera.main.transform.position)))); 6if(Input.GetMouseButtonDown(0)){ 7 lastPos=p; 8 } 9 if(Input.GetMouseButton(0)){ 10 target.transform.position+=-(p-lastPos); 11 lastPos=p; 12 } 13 } 14}
投稿2019/02/11 03:51
編集2019/02/11 08:41総合スコア2050
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/11 04:07
2019/02/11 04:19
2019/02/11 05:07 編集
2019/02/11 08:39