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

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

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

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

Q&A

解決済

2回答

4333閲覧

unity 2回押しでダッシュするスクリプトについて

yoshiteru21

総合スコア44

Unity

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

0グッド

0クリップ

投稿2019/09/03 02:28

編集2019/09/03 03:07

1回押すと歩く、二回瞬時に押すとダッシュするように作成したいのですが、どういう条件を与えればダッシュと認識してくれるのでしょうか?
ご教授お願いいたします。
スクリプトの一部を抜き取っています

float x = Input.GetAxisRaw("Horizontal"); //左か右を入力したら if (x != 0) { if (!push) { push = true; //入力方向へ移動 rigidbody2D.velocity = new Vector2(x * speed, rigidbody2D.velocity.y); //localScale.xを-1にすると画像が反転する Vector2 temp = transform.localScale; temp.x = x; transform.localScale = temp; //Wait→Dash anim.SetBool("Dash", true); // 最初に移動キーを押した時にその方向ベクトルを取得 direction = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); nowTime = 0f; } else { // 2回目に移動キーを押した時の方向ベクトルを取得 var nowDirection = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); // 確認の為、最初に押した方向と2回目に押した方向の角度をコンソールに出力 Debug.Log(Vector2.Angle(nowDirection, direction)); // 押した方向がリミットの角度を越えていない かつ 制限時間内に移動キーが押されていれば走る if (Vector2.Angle(nowDirection, direction) < limitAngle && nowTime <= nextButtonDownTime) { run = true; anim.SetBool("Jump", true); //入力方向へ移動 rigidbody2D.velocity = new Vector2(x * dashSpeed, rigidbody2D.velocity.y); } } //画面中央から左に4移動した位置をユニティちゃんが超えたら if (transform.position.x > mainCamera.transform.position.x - 4) { //カメラの位置を取得 Vector3 cameraPos = mainCamera.transform.position; //プレイヤーの位置から右に4移動した位置を画面中央にする cameraPos.x = transform.position.x + 4; mainCamera.transform.position = cameraPos; } //カメラ表示領域の左下をワールド座標に変換 Vector2 min = Camera.main.ViewportToWorldPoint(new Vector2(0, 0)); //カメラ表示領域の右上をワールド座標に変換 Vector2 max = Camera.main.ViewportToWorldPoint(new Vector2(1, 1)); //プレイヤーのポジションを取得 Vector2 pos = transform.position; //プレイヤーのx座標の移動範囲をClampメソッドで制限 pos.x = Mathf.Clamp(pos.x, min.x + 0.5f, max.x); transform.position = pos; } else { //横移動の速度を0にしてピタッと止まるようにする rigidbody2D.velocity = new Vector2(0, rigidbody2D.velocity.y); //Dash→Wait anim.SetBool("Dash", false); } コード

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

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

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

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

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

guest

回答2

0

ベストアンサー

unityの事はわかりませんが、
前回押したボタンと時間を覚えておき、
同じボタンかつ、前回の時間との差分が一定値以下だったらダッシュとみなせば良いのではないでしょうか。

投稿2019/09/03 02:39

takabosoft

総合スコア8356

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

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

yoshiteru21

2019/09/03 04:40

ありがとうございます。
guest

0

おそらくこのサイトを参考にされたのでしょうか。もし、そうであれば、あまり理解されてないように感じるので、改変して使うのであればどういう処理であるのかをまず理解して下さい。

考え方としては、2回入力したか判定(1回目の入力と同じか、また時間内であるか)をし、trueであれば通常の速度に加速分を掛けた値、falseであれば通常の移動速度で処理をすればいいと思います。

ちなみに○○したいのですがどうすればいいでしょうかだけでは、は丸投げの質問になりますので、なにを試したか、どこが問題なのかを明記することをお勧めします。

投稿2019/09/03 04:49

simapiko

総合スコア332

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

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

simapiko

2019/09/03 04:53

すでにBAついてましたね…すみません。
yoshiteru21

2019/09/03 05:13

ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問