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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

2回答

7984閲覧

Unityで音ゲーを制作していてわからないことがあったので教えてください

minarin0116

総合スコア11

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2016/10/02 11:05

###前提・実現したいこと
現在チュウニズムっぽい音ゲーをUnityを使って製作しています

###発生している問題・エラーメッセージ
横幅があるノーツに対してそのノーツの対応するキーを二つ同時に押してしまうと
メソッドを本来は一回しか呼び出したくないのに二回呼び出してしまいます
どうすれば一回だけ実行するようにできるかアイデアを下さい

イメージ説明
(この状態でUとIとOを同時に押すと三回スコアが入って3コンボ加算されてしまうのを
一回だけ実行するようにしたい)

###ソースコード

void OnTriggerStay (Collider colider){ if (colider.gameObject.tag=="tap") { if (Input.GetKeyDown (KeyCode.Y) || Input.GetKeyDown (KeyCode.H) || Input.GetKeyDown(KeyCode.N)){ Destroy (colider.gameObject); Debug.Log ("tap!"); scoremanager.SendMessage("tap"); } }

これがそれぞれの場所に対応したキーを割り当ててアタッチしてある
(スクリプトはそれぞれが別々になっている)
そしてtapメソッドを呼び出してを呼び出す

void tap(){ score += tapscore; combo++; }

しかしこれをするとキーが同時に押された場合二回反応してしまう

###試したこと
音符側に呼び出す回数の制限を設ける

private int count; void tap(){ if(tap==0){ score += tapscore; combo++; tap=1; } }

初めての投稿なので分かりづらい部分があるかもしれませんが
回答お願いします<m(__)m>

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

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

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

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

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

guest

回答2

0

if (Input.GetKeyDown (KeyCode.Y) || Input.GetKeyDown (KeyCode.H) || Input.GetKeyDown(KeyCode.N)){}

この条件だと、Y,H,Nのいずれかのボタンが押されたら実行されてしまうので、同時に押すという判定にはならないのでは?
&&だとシビアすぎるかもしれないので、フラグでDown時にtrue、Up時にfalseとして、どのキーを押しているかを判定してみてはどうでしょうか?
あまりスマートな方法じゃないかもしれませんが、ご参考までに。

bool Y; bool H; bool N; bool tap; void Update () { if (Input.GetKeyDown (KeyCode.Y)) { Y = true; } if (Input.GetKeyUp (KeyCode.Y)) { Y = false; tap = false; } if (Input.GetKeyDown (KeyCode.H)) { H = true; } if (Input.GetKeyUp (KeyCode.H)) { H = false; tap = false; } if (Input.GetKeyDown (KeyCode.N)) { N = true; } if (Input.GetKeyUp (KeyCode.N)) { N = false; tap = false; } if (tap == false) { if (Y && H && N) { tap = true; Debug.Log ("tap"); } } }

投稿2016/10/04 08:32

nico29

総合スコア76

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

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

minarin0116

2016/10/05 07:37

すいません、説明不足でした 補足します スクリーンショット画像で見るとわかると思うのですが 画面下の横ラインの上に12個の判定用コライダーを並べておいてあり 左から順番にQWERTYUIO@[ のキーコードを割り振ってあります そしてキーボードを押すときに上記のキーのほかにその下のキー のキーコードも割り振ってあります 例)Qが割り当てられている縦ラインの音符にはQAZのいずれかのキーを押せば反応する そして複数の縦ラインにまたがった音符が降ってきたときにそのラインに対応するキーを 同時に押すと複数回反応してしまうというのが今回の問題です 説明不足でご迷惑をおかけしました 回答よろしくお願いします
minarin0116

2016/10/05 07:57

すいません、書き忘れたことがあったので付け足します 今考えているゲームだと音符を大量に配置することになるので 可能な限り音符側に書くスクリプトの量を減らしたいです その点もよろしくお願いします
guest

0

ベストアンサー

データ的に、タップ前のデータとタップ後のデータを区別できるようにすればよいと思います。
1度目のタップで、タップ後と状態を変化させておけば、2度目に弾けると思います。

投稿2016/10/03 02:48

mugicya

総合スコア1046

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

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

minarin0116

2016/10/03 07:28

状態の変化が適用されるのはボタンが押されたその次のフレームからなので同時押しに対応できないのですがどうすればいいでしょうか?
mugicya

2016/10/03 08:22

押されたボタンで同時押しを検出してみてはどうでしょう。
minarin0116

2016/10/03 11:46

単純に同時押しを検出するだけだと二つの音符が同時に振ってくる譜面に対応できなくなるので、その音符に対しての重複だけをなくすように書かなければいけないので…
mugicya

2016/10/05 21:40

うーん、ゲーム作成として、これは面白い所なので、是非自分で考えて処理を作って欲しいところです。 わからない?考えなさい。
minarin0116

2016/10/06 11:31

わかりました、自分で頑張ってみます 回答ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問