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

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

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

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

Unity3D

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

Unity

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

Q&A

1回答

235閲覧

タップ&スワイプでオブジェクトの向きを変更したい

_Beginner

総合スコア103

C#

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

Unity3D

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

Unity

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

0グッド

1クリップ

投稿2019/02/11 02:57

画面をタップした位置を基準として、そこからスワイプした方向の逆向きにオブジェクトを向かせたいです。
スワイプ
オブジェクト
タップダウン位置は Input.GetMouseButtonDown() で取得しました。
そこから ** Inpu.GetMouseButton()** でスワイプ中のタップ位置を取得したいのですが、
このあたりからよくわからなくなってきました。
スワイプ中のタップ位置は

c#

1Input.mousePosition

で取得できるのですが、
これをどうやってオブジェクトに反映させるのかわかりません。

どなたか回答お願いします。

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

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

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

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

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

guest

回答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
bochan2

総合スコア2050

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

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

_Beginner

2019/02/11 04:07

回答ありがとうございます! そちらのコードで試してみたところ 「CS1501 引数 3 を指定するメソッド 'ScreenToWorldPoint' のオーバーロードはありません。」 というエラーが出てしまいます。
bochan2

2019/02/11 04:19

間違えて平行移動のプログラムを書いてしまったので回転のプログラムも追記しておきます
_Beginner

2019/02/11 05:07 編集

返信ありがとうございます。 Quaternion.LookAt(dir); のLookAtのところでエラーが起きてしまいます... 僕の質問の場合だと「回転のプログラム」を参照すればいいのでしょうか? 理解ができていなくてすみません...
bochan2

2019/02/11 08:39

ごめんなさい Quaternion.LookRotationに書き換えてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問