見出し画像

パリィゲームを作る~つくってわかる「疑惑の判定」

前回の記事からだいぶ空きました。身の程に合わぬ建物のモデリングが難航して、数ヶ月書けることが何もありませんでした。(あんなでかいの二度と作るまいぞ…)
モデリングが落ち着いたのでゲームづくり再開します。
ダクソライク・SEKIROライクが好きで、パリィ・弾きのスキルを鍛えたい人(つまり私)のためのパリィトレーニング、パリトレだ。

ゲームエンジンはUnityです。

アセットの用意

まずは剣をぶんぶん振り回す敵を作るとこからはじめまして、
そして攻撃を受ける検証用のサンドバッグ+盾。

ちなみに手持ちにいい剣士モデルがなくて自作

モーションは昔セールで買ったのを使用




攻撃判定=コライダーは、キャラの前方にあらかじめ置いてあるコライダーのアクティブをモーションに合わせて切り替える…方法にするつもりでしたが、
エルデンリングでは武器にしっかり見た目通りの攻撃判定がついて、見た目通りのタイミングで攻撃が出てると聞いたので、
参考動画:
https://youtu.be/FoxMladuzVY?feature=shared



武器の形通りにコライダーを剣に取り付けます。
モーションの軌道や、攻撃判定を可視化するのに、トレイルのアセットや、パーティクルを使います。

攻撃にはHP以外にスタミナ、体幹などのパラメータがあり、サンドバッグ+盾はガードしなければHPが減り、ガードし続けると体幹0=ガードブレイクでスタッガーになる仕様です。


モーションと同期がずれる

最初の難題は、モーションと攻撃判定のタイミングがまるで合わないことでした。


特定のモーションが始まる瞬間を取得する方法はいくつかあり、そのタイミングからスタートしてコンマx秒後のコライダーをオン・オフ設定する…つもりでしたが。
アニメーションクリップをプレビューしたら、フレーム数と時間が出るのですが、

この数字は、実際のタイミングと全くかけ離れたものでした。
アニメーションコントローラ上でトランジョンを繋いで前のモーションとブレンドされてできたモーション、そのタイミングを把握してタイミングを合わせないといけないようでした。
しかも、どうも同じモーションでも前のモーションが変わると、「モーションが始まる瞬間」の判定も大きく変わってしまうようです。
他にもパラメータ切り替えによるステート移行、animator.CrossFadeInFixedTimeを使っての切り替えといったステート遷移方法の違いでもタイミングが変わるようで…

結論から言うと、アニメーションクリップにイベントキーをおいて、攻撃モーションの始まり、モーション名、コライダーオン・オフなどのメソッドを設定、それを当たり判定を管理するコンポーネントに渡すしか、解決策はありませんでした。

モーションが流用できなくなるからこれだけはしたくなかったのに…

判定がすり抜ける

次の問題は、攻撃がスカることがある。です。確定でなくて時々です。
モーション次第では、純粋にスカることもあろうですが、

前にせり出さないから届かない

早い攻撃だと、コライダーがすり抜けることがまま起こりました。

画像を説明しますと、赤いトレイルエフェクトは剣の軌道で、剣モデルと同じ位置・形に発生します。モーションが正確に可視化されます
黄色い点のパーティクルは、剣のコライダーが有効になってる間、剣の先端から発生するようになっていて、剣がターゲット(サンドバッグ+盾)に当たるとコライダーは無効になり、黄色い点が表示されなくなります。当たった箇所にはヒットマークのエフェクトが出ます。

黄色い点は毎フレーム出てます

攻撃が早いほど黄色い点の間隔は大きく空きます。最後の黄色い点とヒットマークの位置はかなり離れています。
物理的にはサンドバッグから見て盾の右端、剣の軌道と盾の衝突するとこにヒットマークができないといけないのに、盾の左上、剣と盾の離れ際にヒットマークが出てるのがやばい。
なおこの黄色点とヒットマークの発生位置は、同じモーションでも毎回異なります。つまりフレームレートは常に可変で、フレームごとのコライダーの位置も毎回変わるでしょう。60フレームでこれなら、45フレーム・30フレームに落ち込んだら更にすり抜けるのでは…
判定出っ放しの斬撃や突進技を、回避せずダッシュで突進したらフレームが追いつかずすり抜けれるなんて攻略法が通用してしまったら、クソゲー評価待ったなし。これを解決するには、どうしたら・・・

当たり判定を大きくする

コライダーが分厚くなれば、届かなかったりすりぬける確率は減るでしょう
しかしそうなると今度は、
「これ武器が当たる前にヒットマーク出てねえ?」
疑惑の判定になる恐れが出てきます。
2Dゲーだと気にならないけど3Dだと気になるやつ。

モーションを遅くする
どのみちプレイヤーが反応できる速度を超えたらゲームにならないんだから、遅くしてもいいのでは~?と思うんだけど、まあそれは最終手段ということで…

当たり判定の補間をする
RigidBodyの衝突判定をシビアにすれば、負荷は上がりますが、精度は上がるはずです。でもやっぱりすり抜けたり怪しいところにヒットマークが出るのでした。

どうしたらいいんだろう…

トレイルが隙間なくフレームごとのモーションをつなぐことがきてるんだから、コライダーもできんかなあー

今回の進捗動画がこちらです。

パリィゲームっても動画は弾きレギュになっててスタミナなし(無限)です
次回は弾き操作を実装するか、攻撃スカり対策で苦しむ予定です。

冒頭で述べた建物モデルはUnityアセットストアで販売中です。興味がありましたらよろしくお願いします。

私のモデリングとゲーム開発の最新情報は、Discoadを御覧ください。
https://discord.gg/Ur2pmF7ptw

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