見出し画像

同じキーで単押しと長押し判定を分けて取得できるように奮闘!!【ゲーム制作記8】

はじめに

ご報告。バンタンゲームアカデミーの同じクラスの友達と制作しているゲームのプログラムを完成させることができました!!
(独学、まだまだ初心者の状態から、わからないことをたくさん検索して頑張りました!)

実際のゲームの内容などは、ゲーム紹介の練習にもしたいので別で記事にまとめようと思います。
今回はゲームを作っているとき、「作りたい機能があるけど、やり方がわからない!」となった時どんな行動をとったか、奮闘記録を残していきます。

動作環境は

  • Windows11

  • Unity 2021.3.0f1

です。
よろしくお願いします!


やりたいこと

同じキーで、
①単押しで「フェイント」できるようにする
②長押しで「攻撃」できるようにする

完成したものはこのような動きです。背景・キャラクターは友人が作成してくれました!
(ミヘイル X:@miheiruwaffle

①とりあえずわからないから別々にしてしまえ!

…最初に思いついたのはこの考えでした笑
何も作れないよりとりあえず何かできたほうがいいだろう、と。

一旦それぞれの入力を別々のキーで行うようにします。
フェイントは単押し、攻撃は長押しで行いたかったので、「GetKeyDown」で単押し判定を、「GetKey」「GetKeyUp」で長押し判定を得られるようにしました。
理由はわかっていないのですが、長押し判定は「GetKey」のみで書くとうまく取れなかったので、キーを押している間は立ち絵を表示して、「GetKeyUp」で「キーが上がった」という情報を取得したら立ち絵を消すという仕組みにしています。

これを友達に見せたところ、「立ち絵をアニメーション風につなげられるように書いたから、それを表現できないか?」と要望が。
…はい。やらせていただきます!勝手に逃げて申し訳ございませんでした!

②同じキーで、同じコードを試してみる

次は入力キーの指定だけ書き換えて、チャレンジしてみました。
ただ、同じキーだと判定の始まりが重なるだろうから、何かまずいことになりそう…という予感がしていました。(初手から逃げた理由です)

案の定、思ったような挙動はしてくれませんでした。予想が当たって「ほらやっぱり!」と喜ぶ反面、どうやればいいんだろうと頭を抱えました…笑

起きた問題は、フェイント状態の立ち絵と攻撃状態の立ち絵、2枚とも同時に表示されてしまうというもの。重なって表示されるのは本当に一瞬なので、アニメーション風に見えるっちゃ見えます。よく見ると2重だな、と気付く感じ。
「まだプログラムがわからないから…多少目をつぶってください」と甘えた考えも一瞬頭をよぎりましたが、ここで妥協したくなかったので別の案を探します。

③長押し判定の取り方を変える

じゃあどうしよう、と思って考えたのは、長押し判定の始まりのタイミングをずらせないか?ということです。始まりが揃ってしまっていて、なおかつ同じキーで入力しているから、当たり前のように②段階の問題が発生していると思っていたので…

いろいろと検索し、やりたいことができる記事を見つけました!
それがこちらのねこみみめいど。さんの記事です。こちらの記事がなければ絶対に完成できませんでした…!ありがとうございます!

キーを押している間変数「_duration」が増えていき、途中で離したらリセット、指定した数溜まったら長押し判定になるというコードが紹介されています。
(キー入力だけではなく、ボタン入力のパターンも紹介されているので、ボタン長押しで悩んでいる方もぜひ見てみてください!)

このコードでスムーズなアニメーションも作ることができ、全ての問題が解決しました!

最後に

最後まで見ていただき、ありがとうございました!
実際書いたコードもできたら紹介したかったのですが、あまりにごちゃごちゃしている&複数のスクリプトに分かれてしまっているので、どのように貼ればいいか悩んでいます。

いつかコードもゲームも公開出来たらいいなと考えていますので!良ければ気長に、少しだけ「どんな不器用なものを作ったんだ?笑」と期待して待っていていただけると嬉しいです!

それでは、また次回の記事でお会いしましょう!

この記事が気に入ったらサポートをしてみませんか?