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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Unity

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

Q&A

解決済

2回答

905閲覧

タップでモノを動かす時、タイムラグを設けたい

zombieCaffffe

総合スコア2

Unity

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

0グッド

0クリップ

投稿2021/06/28 11:40

Unityでスマホゲーを作ってます。
タップされた時指と同じ場所にアイテムを生成し自由に動かせるようにしました。

しかし、下記のスクリプトですと指に対して即座に反応し
せわしないので「初回タップでは反応しない 二回目から動く」ようにしたいです。

int TCount = 0; //タッチした回数 void Update() { if (Input.touchCount > 0) //タップされたなら { TouchCount++;//タッチ回数をカウント if (TouchCount > 1)//1以上なら { Touch touch = Input.GetTouch(0); Vector3 vec = touch.position; vec.z = 10f; transform.position = vec; TCount = 0;//カウントを0にする }

else return;

} }

こうしても、初回タッチから動いてしまいます。どう直せばいいでしょうか

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

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

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

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

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

guest

回答2

0

ベストアンサー

タッチパネルを扱う機種の開発を行ったことが無いので良くは知らないのですが、Update内で「今、タッチ数が0より大きいか」を見ているので、1度目ののタップでも処理が実行されてしまうのだと思われます。
人間が1タップしたつもりでも、機械側からすれば短時間の長押しですので、一度Updateがreturnされた後、指が離れる前にもう一度Updateが呼ばれてしまうためです。
そのため、2タップ目に処理を実行したいのであれば、一度指が離されるまで待機する必要があります。
押されたときにbool変数にtrueを格納、そのboolがtrueの間はUpdateでInput.TouchCountが0になるかを監視して、0になったらboolをfalseに戻し、2回目のタップを待つ、という感じでどうでしょう?

最後に、TCountとTouchCountの変数は見たところ同じものだと思うのですが……

投稿2021/06/28 14:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

zombieCaffffe

2021/07/01 12:07

ご回答ありがとうございます。 public bool flag = false; void OnDisable() { flag = false; } void Update() { Touch touchA = Input.GetTouch(0); if (touchA.phase == TouchPhase.Ended) { // 指を離した瞬間の処理 flag = true; } if (flag == true) { Necro(); } } void Necro() { if (Input.touchCount > 0) { Touch touchE = Input.GetTouch(0); Vector3 vec = touchE.position; vec.z = 10f; transform.position = vec; } ひとまずこのようにやってみたのですが、うまく動きませんでした ><泣
退会済みユーザー

退会済みユーザー

2021/07/01 13:52

Update()をこのようにしてはどうでしょうか? zombieCaffffeさんの返信にあるコードだと、指を離した瞬間にNecro()が呼ばれる気がします。 flag = true;した後にif (flag == true)の条件を満たしてしまうので。 以下のコードでは、1回目のタップと2回目のタップを分けて実装してみました。 こちらの環境で検証できないので上手く動くかどうかは謎ですが…… //タップされた回数を格納 int TCount = 0; //一度目のタップ中かを格納 bool flag = false; void Update() { //一度目のタップの処理 if (TCount == 0) { //1回目タップされたとき if (flag == false && Input.touchCount > 0) { flag = true; return; } //1回目のタップの指が離されたとき if (flag == true && Input.touchCount == 0) { flag = false; TCount = 1; } } //2回目のタップの処理 else { //2回目タップされたとき if (Input.touchCount > 0) { Necro(); TCount = 0; } } }
guest

0

TouchCount++;//タッチ回数をカウント

のところにブレークポイントを設定し、そこで実行を止めて、各変数の値をチェックしたり、ステップ実行させてどんな動作となるのか追いかけていってはどうでしょう

投稿2021/06/28 13:35

y_waiwai

総合スコア88042

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

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

zombieCaffffe

2021/07/01 12:08

ありがとうございます!試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問