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

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

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

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

Unity3D

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

Unity

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

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

解決済

1回答

3955閲覧

UnityでUniRxを使いダブルクリックで1回ジャンプを行うようにしたい

shintenko

総合スコア31

C#

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

Unity3D

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

Unity

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

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

0クリップ

投稿2020/03/21 11:26

ダブルクリックで1回ジャンプを行うようにしたい

■UniRxでダブルクリック
https://qiita.com/miyaoka/items/6a643434a3f1548fb489
■UniRxでダブルクリック判定を3種類の方法で書いてみる
https://qiita.com/Yumuru/items/8a71545d3a21e956e81d

上記参考にさせて頂いたHP様になります。
UniRx初めて触らせて頂いたのですが、ネット上の資料が少なくまた、
自分がプログラム初心者でLINQを使うのが今回が初めてとなっております。
trueの時1度ジャンプさせたいのですが、もう一度クリックしないとDoubleTap()が動かないので、
ジャンプし続けるという動作になってしまっております。Update()内に入れても動きは変わりませんでした。
こちら、1度のダブルタップ後どこかしらで値をfalseにできれば正常に動くのではないかと思います。

該当のソースコード

// Start is called before the first frame update void Start() { DoubleTap (); } void DoubleTap(){ //UniRxでダブルクリック var click = Observable .EveryUpdate() .Where(_ => Input.GetMouseButtonDown(0)); //UniRxでダブルクリック判定を3種類の方法で書いてみる var dClick3 = click .Select (_ => false).Take (1) .Concat(click.Select(_ => true) .Take(TimeSpan.FromSeconds(0.2f)).Take(1)) .RepeatSafe(); var doubleClick = dClick3; doubleClick.Subscribe (b => Jump (b)); } public void Jump(bool bjump){ Debug.Log (bjump); if (bjump) { avspushJumpOnes = true; avspushJumpDown = true; bjump = false; } else { avspushJumpUp = true; } }

試したこと

↓※1 Trueになったあとにすぐfalseを入れて1度だけtrueを返すようにしようとしましたがfalseとしか返ってきませんでした。
また、bjump = false;でジャンプ後にジャンプしないように変更してもUniRxのtrueが効いており変わりませんでした。

var dClick3 = click .Select (_ => false).Take (1) .Concat(click.Select(_ => true) .Take(TimeSpan.FromSeconds(0.2f)).Take(1)) //↓※1      .Select (_ => false).Take (1) .RepeatSafe(); var doubleClick = dClick3; doubleClick.Subscribe (b => Jump (b));

お手数をお掛け致します。ご教授の程よろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

自己解決

UniRxは自分には早かったので「Unityの無料のTouchScript」を使用して解決しました。

【Unity】タッチジェスチャを簡単に実装できる「TouchScript」の基本的な使い方を紹介
http://baba-s.hatenablog.com/entry/2018/03/22/085900

・上記アセットをインポート
・私の場合全画面でダブルクリックを取りたかったので「FullscreenLayer」「TapGesture」を、
今回の場合は自分で作成した「空のオブジェクトに」スクリプト追加
・Generalsettingsを「Two」
・LimitTime(sec)にチェックを付ける
・「0.3」秒以内にタップを2回で判定 という具合になる。
ネットに中身に関する記述がなかったので適当に入れると正常に動いた。

イメージ説明

・UseSendMessageにチェックを入れその欄をクリックして開くと
中にオブジェクトを指定する所があるのでそこでこのスクリプトが入っている空のオブジェクトを指定

この後、入れたいスクリプトエリアにスクリプトを追加

//※忘れずに using TouchScript.Gestures; public class Exsample : MonoBehaviour { public TapGesture tapGesture; private void OnTap(Gesture gesture){ Debug.Log ("ダブルタップ"); } }

以上これで画面全体でダブルクリックが動きます。UniRxはまた今度勉強したいと思います。

投稿2020/03/22 09:10

shintenko

総合スコア31

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問