ゲーム制作勉強中!あこがれだったプログラマーに今からなろう!

昔、あこがれていたプログラマー。今からでも勉強してみようと思い立ち、チャレンジ開始! 勉強メモや、悪戦苦闘な日々の記録です。

サイドビューアクションゲームを作ろう(5):壁蹴りジャンプ実装

10月になりました。

子供の頃に齧ったBASICと、Visual BASICくらいしかプログラミグを知らない状態で、Unityに飛び込んで、はや3ヶ月とちょっと。

 

多少なり知識も増え、できることが少しずつ増えてきたような気がします。

しかし、汲めども尽きぬ泉の如き、Unityの奥深さ。

まだまだ学ぶことが多いので、楽しくなってきます😄

 

サイドビューアクションゲームですが、今月中に以下の実装をしたいと思っています。

・二段ジャンプ・壁蹴りジャンプの実装。
・ローリング状態の実装。
・ダメージを数値で表示する機能の実装。
・音楽、効果音の選定
・移動床の実装。
・落ちる床の実装。
・アイテムの実装。
・ScriptableObjectによる敵ステータスの外出し。
・遠隔攻撃してくる敵の実装。
・ステージの作り込み
スマホで操作できるようにするコントローラ機能の実装。
・タイルマップをスクリプトで変更

 

最初の二段ジャンプ・壁蹴りジャンプについては、数日前から方法を考えていた案を実験して、実装してみました。

方法案はこんな感じです。

①ジャンプ中。

②足元から前方にLinecastを飛ばし、壁を検出する。

③velocity.xの値を反転させて、再代入し、ジャンプ力も追加する。

 

実験したところ、なかなか簡単にはいきませんでした😆

足元から壁検出用のLinecastを出すのは簡単ですが、どうしても壁にぶつかって、そのまま垂直ジャンプするだけになってしまう。

 Debug.Logで確認したところ、壁に当たった時点でどうしてもvelocity.xが最小化してしまい、それを反転させても、期待したほどの反転ジャンプになっていない様でした。

そこで、最初のジャンプ時点でvelocity.xを確保用の変数に確保しておき、壁蹴りジャンプ時に、この変数を反転して代入する事にしました。

 

しかし、それでも期待した動きにならない。

原因は、Updateで移動確認(Input.GetAxis("Horizontal"))し、velocity.xに毎フレーム代入させていたため、壁蹴りジャンプで代入した値がすぐに上書きされていたためでした。

移動確認を止めるため、ジャンプ中のフラグ(IsJump)を作り、ジャンプ中にtrueにする様にしました。

www.youtube.com

思ったより苦労したけど、期待通りの動きで実装できました。

 

スクリプトはこんな感じです。

例によって、今回の内容に関係ない箇所は省いています。