質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

3027閲覧

Unityの2Dアクションゲームの攻撃の当たり判定仕様改善についての相談

cushionA

総合スコア90

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/11/03 15:58

編集2020/11/03 16:05

前提・実現したいこと

攻撃で一回の攻撃ごとの当たり判定検出回数を制限したい。
つまりは一回剣を振る攻撃なら一回だけ敵に当たり、二回素早く剣を振るような攻撃なら二回当たり判定が検出されるというように、誤検出なく当たり回数をコントロールしたい。
また、複数の敵に対しても正しく当たり判定を検出したい(一回の攻撃で一回だけ当たる。しかし二体の敵に当たれば二体に一回ずつというように)。

現状の仕様と改善策とそれらの問題点

現状ではモーションのデータ(モーション値、アーマー削りなど)のなかに『hitLimmit』というような整数の項目を用意し、当たるごとにその数値を減らすことで0になったら、すなわち上限まで当たったらこれ以上当たり判定を検出しないというようにしている。
問題点としては複数の敵が当たり判定内部にいると誤作動を起こすこと。(二回当たる攻撃のはずが二体に一回ずつになる)
それから二回きりつける動きの場合一回目で二度トリガーを検出して、二回目の斬撃に反応しなくなる可能性がある。
また、貫通弾が複数の敵を貫けない。

改善策1では当たり判定が敵と衝突したらそれ以上敵に当たらないようにして(レイヤー変更?)、ごく短い時間の後当たり判定を復活させる。
これにより連撃と貫通弾の問題は改善されるかもしれないが(密着してたらだめかもしれません)複数の敵への近接攻撃の誤作動はなおらなさそう。

改善策2は逆の発想で被弾した方のレイヤーを変えて複数当たり判定を検出してしまう誤作動を防ぐ。
貫通弾も複数への攻撃も連撃も問題は解消しそうだが、NPCの攻撃がすり抜けてしまうのではないかと懸念。
しかしプレイヤーもこうすると延々とひるませ続けられたりしないので逆に長所かもしれない。
現状最有力。

改善策3は敵ごとにHitLimitを設定すること。
当たった敵を検出してリストにして各キャラごとに何回当たっているというのを管理する。
しかし正直必要以上に重そうなのでできればやりたくない。

改善策4は3の派生。
例えば二回切りつけるなら一回の斬撃で当たり判定の中にいた敵に、当たり判定が消えた段階で当たった回数によらず一回だけダメージ計算してダメージを与える。
そして次の当たり判定が出たら同じことを繰り返す。
しかしこれも、とくに多段系だとものすごく重くなりそうです。

まとめ

これらの改善策から、あるいは回答者様の知見から最適な方法についてアドバイスしていただけたら嬉しいです。
何か足りない情報などあれば適宜補足するのでお手数ですがお知らせください。
どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

二回素早く剣を振るような攻撃のタイミングの判定条件が重要に思えます
ただ、質問者さんが実装したい具体的な機能によって違ったものになるので
とりあえず自分が思った案ですが参考にしてください。

2回攻撃を発動させる条件として

案1,プレイヤーの切るタイミング
プレイヤーが1回めから2回めの攻撃間隔が短ければ2回攻撃を実行
2回攻撃がすべての範囲の敵にあたる

案2,敵がダメージをうけるタイミング
敵が1回めから2回めの被ダメージ間隔が短ければ2回攻撃を実行
2回攻撃は条件を満たした敵のみあたる

別案,1回攻撃の実装と敵の無敵時間を設定
1回攻撃(普通の攻撃)を実装する
敵はダメージを受けたら一定時間後に一定時間の無敵時間を発生させる
ダメージをうけるごとにその無敵開始タイマーはリセットする
こうすれば自然と2回早く攻撃したときだけ2回めの攻撃が通る

最後の案は質問者さんの思い描いているものと少し違うかもしれませんが
簡単でそれに近いものが実現出来ると思います。

投稿2020/11/04 00:48

編集2020/11/04 00:53
newBee

総合スコア82

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cushionA

2020/11/04 01:37 編集

回答ありがとうございます。 2回攻撃の判定条件については、現在は単純に当たり判定を武器の動きに合わせてアニメーションして2回発生させることで一回一回の攻撃が当たれば(合計で)2回攻撃となるようにしています。 それから、頂いた案はどれも素晴らしいと思うのですが肝心のトリガー誤検出が防げないので一回の当たり判定で二回も三回も被弾・攻撃判定がなされてしまい、間隔で2回攻撃を感知したり一定期間後に無敵判定を出すという工夫がそもそも機能しないものと思われます。 しかしとてもいいアイデアだと思うので適宜参考にさせていただきます。 ありがとうございました。
guest

0

自己解決

2の応用で当たったらフラグ立てて0.3秒だけダメージ計算を行わないようにしました。
うまく行きました。
mewBeeさん、回答ありがとうございます。

投稿2020/11/08 00:56

cushionA

総合スコア90

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問