もしも、あるいはそれ以外のこと

Unityを使ったゲーム作りや、ゲームについて考えたりしています。

Unity&Corgi Engineを使ったアクションゲーム作り ~アニメーションと当たり判定②~

前回はキャラクターのセットアップを行ってキャラクターを実際にCorgi Engineで使えるところまでやりました。
ちなみに前回マテリアルのシェーダー項目を変更したんですが描画順序がおかしくなることにあとで気が付きまして訂正しました……。 
そんな前回はこちら。 

blue-mist.hatenablog.jp

 
では今回は当たり判定周りを調整していきましょう。
とりあえず実際に動かしたらどうなるか、というテストをしてみます。
 

 
……なんでキャラクターが唐突に死亡したんですかね。最初は( ゚д゚)フェッ?って状態になりました。
とりあえず原因を探ります。
 
MeleeWeaponコンポーネントのDamageAreaで当たり判定のMaskを変更する箇所がありますが、ここのTarget Layer Maskが当たり判定を握っています。
ここにPlayerレイヤーが指定されており、Player自身の攻撃が当たる、という設定になっているようです。

これはもともと対人ゲームとかを想定した作りになっているせいですね。シューティングメインのエンジンですし。今回は一人用の想定なのでこのPlayerレイヤーから外して自殺判定をなくします。
初期設定からいろいろいじる予定なのでコピーして使っていきましょう。
Character Handle WeaponのInitial Weaponの項目をコピーしたものに変更して使っていきます。
ちなみにWeapon Attachmentを設定しておくと、攻撃範囲が設定した位置に合わせて動くので「剣を振った位置に攻撃判定を出す」想定なのでつけておきます。

この辺りがちょうど追従して動いてくれそうなので、設定します。

コピーしたWeaponプレハブのMeleeSampleをつけました。
 
当たり判定を視覚化するとこんなかんじになります

当たり判定はWeapon Attachmentの下に生成される「Weaponプレハブ名(Clone)DamageArea」という部分のBox Collider部分です。

 
攻撃アニメーションを1.5倍速にしていますので、発生時間的にはちょうどいいかんじかもしれませんね。
当たり判定をもうすこし調整しましょう。調整点は以下のような感じです。
 
  • Use
    • Delay Before Use…使用前の遅延
    • Time Between Use…使用時間
  • Position
    • Weapon Attachment Offset…実際の装着している部分のオフセット
  • Damage Area
    • Damage Area Shape…当たり判定の形状
    • Area Size…当たり判定の大きさ
    • Area Offset…当たり判定のオフセット値
  • Damage Area Timing
    • Initial Delay…判定が出るまでの遅延時間
    • Active Duration…攻撃判定の時間
  • Damage Caused
    • Target Layer Mask…当たり判定を持つレイヤー属性の設定
    • Damage Caused…ダメージ量
    • Knockback…ノックバックのセットの仕方
    • Knockback Force…ノックバックの力
    • Invincibility Duration…無敵時間
 
このあたりを攻撃判定の出現の時間や形状の大きさなど、一時停止させたりしながら見て調整します(もっといい方法がありそうですが……)。
とりあえず、私はこんなかんじに。

f:id:blazwel:20180704141312p:plain

Flip Weapon On Character Flipのチェックを外さないと逆側の判定がおかしくなります。

実際にどうなるか見てみます。

こんな感じです。
あとでエフェクトを付けたりすることを考えると、すこし大きめに判定を出しておいたほうが爽快感が出るような気がします。
 
◆Animationパラメータの設定
 
Animatorの遷移条件などに使用されるパラメータですが、現在はMeleeStartしか設定していないので遷移の設定をしづらくなってます。
ついでにやっておきましょう。
持たせた武器(MeleeSample)のAnimation Parameters Names欄にAnimatorに影響する部分があります。
ここにAnimator側で使用するパラメータのブール値を入力します。

同様にAnimator側でもパラメータを用意します。

こう設定しておくと
  1. MeleeIdle…武器の入力待機状態
  2. MeleeStart…武器の入力開始
  3. MeleeUse…武器の攻撃アニメーション中
  4. MeleeStop…武器の攻撃終了
というふうに遷移条件を組むことができます。
 
ところでReload~などの近接武器では使用しないパラメータとか項目が気になり始めますね?
今後改造していくことも考えるとそろそろ無駄な項目を排除して、シンプルにまとめることも必要かもしれません。
次回はスクリプト部分も改造してシンプルにまとめつつ、今後の拡張性も考えて組み立てる予定です。