開発日記
5月18日(土)ジャンプ処理
教科書のJewelryHunterのバグらしき挙動と問題
- 連続二段ジャンプ
- ジャンプボタンを連打すると、連続二段ジャンプ現象(倍の高さのジャンプ)が発生することがある。
- 地面との接地チェックには
Physics2D.Linecastを使用しており、接地していればジャンプ動作が行われる仕組みになってる。この部分に誤動作の原因があり、接地チェック後にジャンプ動作が行われる際、早い段階で次のジャンプボタンが押されると、地面との距離が完全に離れていないため、接地していると判定され、ジャンプ中にもかかわらず、次のジャンプが発動してしまう。
- 先行入力による意図しない自動ジャンプ
- また、根本的な問題として、
Updateでジャンプ入力フラグが立ち(ジャンプ中もフラグが立ちます)、FixUpdateでフラグが立っていればジャンプ処理が行われる仕様となっているため、ジャンプ中にジャンプボタンを押すと、着地と同時に自動的にジャンプしてしまう。 - この問題は垂直ジャンプの際には見えづらいです。なぜなら、着地時に下方向にベクトルがかかっており、ジャンプのインパルスが打ち消されて、数ミリしかジャンプしないからです。
- この現象をよく観察したい場合は、ジャンプして高いところに登るように操作し、着地前にジャンプボタンを押します。着地すると自動的に2回目のジャンプが開始します。このとき、下方向へのベクトルが少ない状態で次のジャンプが行われるため、普段のジャンプよりは低いものの、明らかにジャンプするところを見ることがでる。
- また、根本的な問題として、
- ソースコードの確認
- ソースコードで原因を確認したい場合は、
PlayerControllerクラスの変数goJumpを追っていくと良いでしょう。
- ソースコードで原因を確認したい場合は、
スマブラについて
パクリ先のスマブラの事が良くわからないので調べてみた。
- A…攻撃
- B…必殺技
- R…スマッシュ攻撃
- 左右…移動
- 上orX…ジャンプ(2段ジャンプあり)
- Z…シールド
- LR…つかみ
HPではなくスマッシュゲージがある?0~999。高ければ高いほどふっ飛ばされる。
今まで作って思ったこと(所感)
- プレイヤーは、地上、空中、吹っ飛び中、ガード中など様々な状態を保持する必要がある
- Rigidbody2Dのリアルに準拠した物理演算だけではゲームを作れない。空中回避などは物理演算をリセットしたり、物理運動を考慮して%で減少させるなど工夫が必要。
- 摩擦、質量、などを使うか使わないか
- パラメーターの調整に苦心しそう
UnityのアクションゲームにおけるRigidbody2Dの研究
- 勝手にジャンプ問題
- コマンドってどうやって実現するの?
- 吹っ飛びどうしよう?
- 無敵時間どうしよう
- シールドの実装
smash smash smash smash
YES!!!
🤣🤣
Smash Smash Smash SmashSmash Smash Smash SmashSmash Smash Smash SmashSmash Smash Smash SmashSmash Smash Smash SmashSmash Smash Smash SmashSmash Smash Smash SmashSmash Smash Smash SmashSmash Smash Smash SmashSmash Smash Smash SmashSmash Smash Smash SmashSmash Smash Smash Smash