同じキーで単押しと長押し判定を分けて取得できるように奮闘!!【ゲーム制作記8】
はじめに
ご報告。バンタンゲームアカデミーの同じクラスの友達と制作しているゲームのプログラムを完成させることができました!!
(独学、まだまだ初心者の状態から、わからないことをたくさん検索して頑張りました!)
実際のゲームの内容などは、ゲーム紹介の練習にもしたいので別で記事にまとめようと思います。
今回はゲームを作っているとき、「作りたい機能があるけど、やり方がわからない!」となった時どんな行動をとったか、奮闘記録を残していきます。
動作環境は
Windows11
Unity 2021.3.0f1
です。
よろしくお願いします!
やりたいこと
同じキーで、
①単押しで「フェイント」できるようにする
②長押しで「攻撃」できるようにする
完成したものはこのような動きです。背景・キャラクターは友人が作成してくれました!
(ミヘイル X:@miheiruwaffle)
①とりあえずわからないから別々にしてしまえ!
…最初に思いついたのはこの考えでした笑
何も作れないよりとりあえず何かできたほうがいいだろう、と。
一旦それぞれの入力を別々のキーで行うようにします。
フェイントは単押し、攻撃は長押しで行いたかったので、「GetKeyDown」で単押し判定を、「GetKey」「GetKeyUp」で長押し判定を得られるようにしました。
理由はわかっていないのですが、長押し判定は「GetKey」のみで書くとうまく取れなかったので、キーを押している間は立ち絵を表示して、「GetKeyUp」で「キーが上がった」という情報を取得したら立ち絵を消すという仕組みにしています。
これを友達に見せたところ、「立ち絵をアニメーション風につなげられるように書いたから、それを表現できないか?」と要望が。
…はい。やらせていただきます!勝手に逃げて申し訳ございませんでした!
②同じキーで、同じコードを試してみる
次は入力キーの指定だけ書き換えて、チャレンジしてみました。
ただ、同じキーだと判定の始まりが重なるだろうから、何かまずいことになりそう…という予感がしていました。(初手から逃げた理由です)
案の定、思ったような挙動はしてくれませんでした。予想が当たって「ほらやっぱり!」と喜ぶ反面、どうやればいいんだろうと頭を抱えました…笑
起きた問題は、フェイント状態の立ち絵と攻撃状態の立ち絵、2枚とも同時に表示されてしまうというもの。重なって表示されるのは本当に一瞬なので、アニメーション風に見えるっちゃ見えます。よく見ると2重だな、と気付く感じ。
「まだプログラムがわからないから…多少目をつぶってください」と甘えた考えも一瞬頭をよぎりましたが、ここで妥協したくなかったので別の案を探します。
③長押し判定の取り方を変える
じゃあどうしよう、と思って考えたのは、長押し判定の始まりのタイミングをずらせないか?ということです。始まりが揃ってしまっていて、なおかつ同じキーで入力しているから、当たり前のように②段階の問題が発生していると思っていたので…
いろいろと検索し、やりたいことができる記事を見つけました!
それがこちらのねこみみめいど。さんの記事です。こちらの記事がなければ絶対に完成できませんでした…!ありがとうございます!
キーを押している間変数「_duration」が増えていき、途中で離したらリセット、指定した数溜まったら長押し判定になるというコードが紹介されています。
(キー入力だけではなく、ボタン入力のパターンも紹介されているので、ボタン長押しで悩んでいる方もぜひ見てみてください!)
このコードでスムーズなアニメーションも作ることができ、全ての問題が解決しました!
最後に
最後まで見ていただき、ありがとうございました!
実際書いたコードもできたら紹介したかったのですが、あまりにごちゃごちゃしている&複数のスクリプトに分かれてしまっているので、どのように貼ればいいか悩んでいます。
いつかコードもゲームも公開出来たらいいなと考えていますので!良ければ気長に、少しだけ「どんな不器用なものを作ったんだ?笑」と期待して待っていていただけると嬉しいです!
それでは、また次回の記事でお会いしましょう!
この記事が気に入ったらサポートをしてみませんか?