モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

スプラトゥーン3の当たり判定の話(ウルトラショットやスロッシャータイプが主体)

 当たり判定の話。

1. 前提知識

 50 DU = 5m = 1 Bar。1 Bar は試し打ちの 1 本分の意味。

 各種当たり判定

ブキ イカ 対物
シュータータイプ
スピナータイプ
ブラスタータイプ
0.20m 0.20m
竹除くチャージャータイプ 0.10m 0.02m
14式竹筒銃 0.20m 0.02m
スパッタリー
ケルビン525
0.25m 0.20m
スプラマニューバー (立ち状態)
デュアルスイーパー (立ち状態)
クアッドホッパー (立ち状態)
0.20m 0.20m
スプラマニューバー (スライド)
デュアルスイーパー (スライド)
クアッドホッパー (スライド)
0.25m 0.20m
パラシェルター (中央の弾)
キャンピングシェルター (中央の弾)
0.20m?*1 0.20m?
パラシェルター (それ以外の 6+4弾)
キャンピングシェルター (それ以外の 6+6弾)
0.10m 0.10m
スパイガジェット (中央の弾) 0.25m 0.25m
スパイガジェット (それ以外の 2+4弾) 0.16m 0.16m
ストリンガータイプ 0.18m 0.18m

※ ローラータイプ、スロッシャータイプ、フデタイプ、ワイパータイプは未掲載

2. スプラトゥーン3 から可変当たり判定が導入された

 これはスロッシャーの根本の弾を小さくするために導入されたと考える可変の当たり判定だ。

 例えば、バケットスロッシャーであれば、

  • グループ0
  • グループ1: 対イカは 8.5 DU、対物は 8 DU、このグループは 4 発発射され、1 発ごとに -1.8 DU 小さくなる
  • グループ2: 対イカは 4.5 DU、対物は 4 DU、このグループは 5 発発射され、1 発ごとに -0.5 DU 小さくなる

だったのが、スプラトゥーン3 では、

  • グループ0
  • グループ1: 対イカは 0.085m → 0.85m (5 フレームかけて変化)、対物は 0.08m → 0.8m (4 フレームかけて変化)、このグループは 4 発発射され、1 発ごとに -0.012m → -0.12m 小さくなる
  • グループ2: 対イカは 0.045m → 0.45m (5 フレームかけて変化)、対物は 0.04m → 0.4m (4 フレームかけて変化)、このグループは 5 発発射され、1 発ごとに -0.005m → -0.05m 小さくなる

となっている。表にすると、

経過時間 0 1 2 3 4 5
G1[0] 対イカ 0.085 0.238 0.391 0.544 0.697 0.85
G1[1] 対イカ 0.073 0.2044 0.3358 0.4672 0.5986 0.73
G1[2] 対イカ 0.061 0.1708 0.2806 0.3904 0.5002 0.61
G1[3] 対イカ 0.049 0.1372 0.2254 0.3136 0.4018 0.49
G2[0] 対イカ 0.045 0.126 0.207 0.288 0.369 0.45
G2[1] 対イカ 0.040 0.112 0.184 0.256 0.328 0.40
G2[2] 対イカ 0.035 0.098 0.161 0.224 0.287 0.35
G2[3] 対イカ 0.030 0.084 0.138 0.192 0.246 0.30
G2[4] 対イカ 0.025 0.07 0.115 0.16 0.205 0.25

leanny.github.io/WeaponSlosherStrong.game__GameParameterTable.json at master · Leanny/leanny.github.io · GitHub

 ヒッセンは、

  • グループ0: 対イカは 9 DU、対物は 7 DU、このグループは 4 発発射され、1 発ごとに -1 DU 小さくなる
  • グループ1: 対イカは 8 DU、対物は 7 DU、このグループは 3 発発射され、1 発ごとに -1 DU 小さくなる
  • グループ2: 対イカは 7 DU、対物は 5 DU (このグループは 1 発のみ発射)

だったのが、スプラトゥーン3 では、

  • グループ0: 対イカは 0.09m → 0.9m (5 フレームかけて変化)、対物は 0.07m → 0.7m (4 フレームかけて変化)、このグループは 4 発発射され、1 発ごとに -0.01m → -0.1m 小さくなる
  • グループ1: 対イカは 0.08m → 0.8m (5 フレームかけて変化)、対物は 0.07m → 0.7m (4 フレームかけて変化)、このグループは 3 発発射され、1 発ごとに -0.01m → -0.1m 小さくなる
  • グループ2: 対イカは 0.07m → 0.7m (5 フレームかけて変化)、対物は 0.05m → 0.5m (4 フレームかけて変化) (このグループは 1 発のみ発射)
  • グループ3: 対イカは 0.07m → 0.7m (5 フレームかけて変化)、対物は 0.05m → 0.5m (4 フレームかけて変化) (このグループは 1 発のみ発射)

となっている。スプラトゥーン2 までは First, Second, Third という固定変数による実装がされていたので、柔軟に弾を発射することができなかったが、今作からは再実装によって配列でデータを保持しているため、ヒッセンのように無限にグループを増やすことが可能になっている。

経過時間 0 1 2 3 4 5
G0[0] 対イカ 0.09 0.252 0.414 0.576 0.738 0.9
G0[1] 対イカ 0.08 0.224 0.368 0.512 0.656 0.8
G0[2] 対イカ 0.07 0.196 0.322 0.448 0.574 0.7
G0[3] 対イカ 0.06 0.168 0.276 0.384 0.492 0.6
G1[0] 対イカ 0.08 0.224 0.368 0.512 0.656 0.8
G1[1] 対イカ 0.07 0.196 0.322 0.448 0.574 0.7
G1[2] 対イカ 0.06 0.168 0.276 0.384 0.492 0.6
G2[0] 対イカ 0.07 0.196 0.322 0.448 0.574 0.7
G3[0] 対イカ 0.07 0.196 0.322 0.448 0.574 0.7

leanny.github.io/WeaponSlosherDiffusion.game__GameParameterTable.json at master · Leanny/leanny.github.io · GitHub

 そして先日 1.1.1 のパッチノートに掲載された「オーバーフロッシャーの1振りで発射される3発目・4発目の弾の当たり判定が、極端に小さくなっている問題を修正しました。」という話。

 スプラトゥーン2 では、

  • グループ0: 対イカは 8 DU、対物は 7.5 DU (このグループは 1 発のみ発射)
  • グループ1: 対イカは 5.2 DU、対物は 5 DU、このグループは 3 発発射され、1 発ごとに -0.3 DU 小さくなる

だったのが、スプラトゥーン3 1.1.1 では、

  • グループ0: 対イカは 0.08m → 0.8m (5 フレームかけて変化)、対物は 0.075m → 0.75m (4 フレームかけて変化) (このグループは 1 発のみ発射)
  • グループ1: 対イカは 0.052m → 0.52m (5 フレームかけて変化)、対物は 0.05m → 0.5m (4 フレームかけて変化)、このグループは 3 発発射され、1 発ごとに -0.003m → -0.03m 小さくなる

である。そして、1.1.0 以前は、

  • グループ1: 対イカは 0.052m → 0.52m (5 フレームかけて変化)、対物は 0.05m → 0.5m (4 フレームかけて変化)、このグループは 3 発発射され、1 発ごとに -0.03m → -0.3m 小さくなる

となっていた。つまり、

経過時間 0 1 2 3 4 5
G0[0] 対イカ 0.08 0.224 0.368 0.512 0.656 0.8
G1[0] 対イカ 0.052 0.1456 0.2392 0.3328 0.4264 0.52
G1[1] 対イカ 0.022 0.0616 0.1012 0.1408 0.1804 0.22
G1[2] 対イカ 0 0 0 0 0 0

のような当たり判定になっていた。1.1.1 以降は正しく、

経過時間 0 1 2 3 4 5
G0[0] 対イカ 0.08 0.224 0.368 0.512 0.656 0.8
G1[0] 対イカ 0.052 0.1456 0.2392 0.3328 0.4264 0.52
G1[1] 対イカ 0.049 0.1372 0.2254 0.3136 0.4018 0.49
G1[2] 対イカ 0.046 0.1288 0.2116 0.2944 0.3772 0.46

となっており、発射後から 5 フレーム後は以前と同じ当たり判定になっていると考えられる(でもオーバーフロッシャーで発射直後の当たり判定小さくする必要はあるのか…?)

leanny.github.io/WeaponSlosherBathtub.game__GameParameterTable.json at master · Leanny/leanny.github.io · GitHub

3. ウルトラショットの当たり判定

 この機能を利用してウルトラショットの当たり判定も可変実装だ。

  • イカ: 0.01m → 0.75m (10 フレームかけて変化)
  • 対物: 0.01m → 0.3m (20 フレームかけて変化)
経過時間 [f] 当たり判定
0 0.01
1 0.084
2 0.158
3 0.232 (一般的なブキより少しでかい状態)
4 0.306
5 0.38
6 0.454
7 0.528
8 0.602
9 0.676
10 0.75

ウルトラショットの経過時間と当たり判定

となっている。つまり、0 距離射撃はとても小さい弾なので、当てづらいってことだ…

 ちなみに、弾速は 1.0 m/f (MoveParam.SpawnSpeed) なので、試し打ち 0.6 本分のところでようやく一般的な当たり判定の大きさになるわけである。そりゃ当たりませんって… といったところ。ウルトラショットは 0 距離射撃の当たり判定を 5 倍 (つまり 0.05) にすれば 0.4 本分のところで 0.19m になるので、それぐらいしたほうがいい気はする……

※これは意図的調整だと思います

 現状のウルトラショットはとにかく試し打ち 0.5 本以上の距離を開けて射撃することを意識しないとマジで当たらないと思う。

leanny.github.io/WeaponSpUltraShot.game__GameParameterTable.json at master · Leanny/leanny.github.io · GitHub

4. 最後に

 時間経過で変化する当たり判定について具体的に検討した。

 ここで検討している数字は、発射直後は CollisionParam.InitRadiusForField/Player で、そこから CollisionParam.ChangeFrameForField/Player かけて、目標となる大きさ CollisionParam.EndRadiusForField/Player になると仮定して計算した。そのため、変数名が ChangeFrame となっていることから、遷移にかかるフレーム数のみ定義されている可能性があるため、もう 1 フレーム遷移にかかる時間が長い可能性もある。この違いを検証する具体的な方法は思いつかないため、どちらが正しいのかは不明。

 少なくとも雰囲気こんな感じで変化しているというのを紹介したかったため、雑に紹介した。

*1:値が定義されていない