トップダウンエンジンを使ってキャラのセットアップが出来たら、次は攻撃手段の実装をしたいですよね。ここでは剣や斧、手に持った武器を実装する方法をご紹介したいと思います。
出来るもの確認
まずはここで実装するものの確認や、事前に知っておきたいことなどを確認しましょう。
今回作成するもの
下図のようなものを作成します。モーションとかがないのでドライな仕上がりですが、近接攻撃の基礎部分になります。
左側のシーンビューで赤いBoxが表示されている間ダメージ判定が行われるようになっていますよ
知っておきたいこと
当たり判定やアニメーションの連携を行うには次の要素を知っておくと何を実装するべきか、何が実現できるのかがわかりやすくなると思います。
- MeleeWeaponコンポーネントについて
- 近接武器の実装の主要コンポーネント。設計図のようなもの。
- パラメータについて
- どのレイヤーに攻撃を行うか
- 当たり判定の形・大きさ・位置のズレ
- どのぐらいダメージを与えるか(攻撃力みたいなもの)
- 武器の取り付け位置
- ノックバックを与える力、方向
- アニメーションのための命令・パラメータ
- WeaponAim3Dコンポーネントが必要
- アニメーションについて
- 剣を振ったりするモーション・アニメーター
- MeleeWeaponコンポーネントで指定されたBool型の変数を用意する必要がある
- MinimalScene3Dを使って作成します
- 今回はデフォルトで入っているサンプルシーンのMinimalScene3Dを使って作成します
コンボなどを行おうとするともう少し構成が変わりますが、まずは単体攻撃をするのが目標!
自作の近接攻撃を作る
では作成開始!ここで作成した攻撃処理(MyWeapon)を他のシーンで使うことで攻撃パターンを流用することが可能です。
シーンの準備
トップダウンエンジンをインポートするとついてくる、3Dの最小単位のシーンを使って実装を行います。
- シーンを開く
- Assets/TopDownEngine/Demos/Minimal3D/MinimalScene3D
- 叩く相手をセット
- キャラクター追加
- Assets/TopDownEngine/Demos/Loft3D/Prefabs/AI/LoftSuitRagdollAI
- Healthを増やす
- Initial Health:50
- Maximum Health:50
- Boxを追加
- Assets/TopDownEngine/Demos/Loft3D/Prefabs/AI/Loft3DBlueCubeをシーン内に配置
- MMHealthBarを追加
- Offset:Health Bar Offset:0,2.5,0
- キャラクター追加
シーンを直接変更するのが気になる場合はさらに下記の処理を行ってください。本記事では以下の名前を利用して書かれていることに注意してください。
- シーンの複製
- MinimalScene3Dを複製>名前をMinimalScene3D-meleetestに変更
- 複製後のシーンを開き直す
- プレイヤーのプレファブを複製
- Assets/TopDownEngine/Demos/Minimal3D/Prefabs/PlayableCharactersフォルダを開く
- MinimalCharacterを複製>名前をMinimalCharacter-meleetestに変更
- プレイヤープレファブの差し替え
- シーン内のManagers————>LevelManagerを選択
- LevelManagerコンポーネントにセットされているPlayerPrefabをMinimalCharacter-meleetestに変更
こちらの作業を行うことで、次にMinimalScene3Dを新鮮な状態で利用することが出来ます。
ノックバックの確認をするときに、Boxだけだと動いてくれないので敵キャラがいると確認しやすいです!
MyWeaponを作成
攻撃の基本となるオブジェクトを作成します。
- MyWeaponゲームオブジェクトを作成
- 空のゲームオブジェクトを作成
- リネーム:MyWeapon
- MeleeWeaponコンポーネントをアタッチ
- ID
- Weapon Name:MyWeapon
- Use
- Delay Before Use Release Interruption:チェックをはずす
- Time Between Uses:1
- Time Between Uses Release Interruption:チェックはずす
- Position
- Weapon Attachment Offset:-0.5,0,0
- Damage Area
- DamageAreaShape:Box
- AreaOffset:0,0,0
- AreaSize:1,1,1
- Damage Caused
- Target Layer Mask:Enemies
- Min:10
- Max:10
- Knockback:Add Force
- Knockback Force:0,0,10
- ID
- WeaponAim3Dコンポーネントをアタッチ
- Control Mode
- Aim Control:Primary Movement
- Control Mode
- プレファブ化を行う
- プロジェクトのプレファブを作成する場所にドラッグアンドドロップでプレファブ化を行う
- 完了したら削除
画像は一部だけです。他のパラメータは一旦据え置き
設定できることが多すぎる・・・
動きに対してアニメーションさせたいときもこのコンポーネント内で設定出来ますが、また別の機会に
セットして試運転
ここまで準備できたら近接攻撃のテストを行ってみましょう。
- MinimalCharacter-meleetestにMyWeaponをセット
- Character Handle Weapon
- Weapon>Initial Weapon:MyWeapon
- Character Handle Weapon
- ゲームを動かして確認
- オススメとしては、シーンビューとゲームビューが同時に見えるようにしてください
- 攻撃中のヒットボックスがシーンビューで可視化されるので確認がし易いです。
ゲームの動作確認項目
- 左クリックでプレイヤー正面に攻撃判定が発生
- 発生時間はおよそ1秒間
- 攻撃中はキャラクターが移動出来ない
- 敵の無敵時間は0.5秒のため、当たり方によっては2回ヒットする
- 敵キャラクターはノックバックが発生する
- 最後は思いっきり吹っ飛ぶ(Ragdollのため)
次回!アニメーション編!
とりあえずゲームの機能的に作成出来ましたが、ゲームでは使えないですね。ということで次回はアニメーションと連携させる方法をご紹介します。
アニメーションだけだとさっと終わってしまうのですが、アニメーションに合わせた攻撃判定などの調整も行う必要があるので、そのあたりも一緒にやってみたいと思います。
コメント