前書き
今回は遠距離武器の「武器の作り方」について紹介していこうと思います。近距離武器と同様に
- モデルの作成
- 機能の実装
- Feedbacksの実装
を行えば大体の遠距離武器の作成ができます。ただし、遠距離武器の場合は「Aimをどうするのか?」、「レーザーサイトを実装するのか?」、「弾道はどの方向に発射するのか?」など近距離武器とはまた違った設定をする必要があります。それぞれオリジナルの武器を作りには欠かせない要素ですので一つずつ見ていきたいと思います。
また、第1回では遠距離武器はどのような構成なのか?を簡単に紹介した記事もあるのでこちらも参考にご確認ください。
では、前回同様にDemoの中から「武器」の作りを見ていきましょう。今回はDemoにある「MinimalSandbox2D」の中から以下の「黄色い武器(KoalaGunAmmoBased)」について見ていこうと思います。
KoalaGunAmmoBasedの作りについて
KoalaGunAmmoBasedの構成を見ると以下のようになっています。
- KoalaGunAmmoBasedの本体
- Model
- WeaponUsedMMFeedback
- WeaponReloadMMFeedback
- WeaponReloadNeededMMFeedback
それぞれの作りについて簡単に説明していきたいと思います。
KoalaGunAmmoBasedの本体
KoalaGunAmmoBasedの機能を司るオブジェクトです。このオブジェクトに「Projectile Weapon」や「MMSimpleObjectPooler」などの実際に遠距離武器としての機能を持ったコンポーネントを設定します。弾薬を設定したり、弾が発射する位置などを設定する場合もこのオブジェクトに設定されているコンポーネントから設定します。
Model
KoalaGunAmmoBasedのImageを設定するオブジェクトです。「Animator」や「SpriteRenderer」などのコンポーネントを設定します。遠距離武器の「見た目」を設定するオブジェクトになっているため見た目を変えたい場合はこのオブジェクトを差し替えるなどすればいいかと思います。
WeaponUsedMMFeedback
遠距離武器を「使った時」に実行されるFeedbackです。主に弾薬を発射した時の音だったりマズルフラッシュだったりを設定するのがいいかと思います。
WeaponReloadMMFeedback
遠距離武器の「リロード」をするときに実行されるFeedbackです。リロードするときの「カチャ」音などが設定されています。
WeaponReloadNeededMMFeedback
遠距離武器で「弾がなくなった」ときに実行されるFeedbackです。弾がなくなったときの「カスッ」音などが設定されています。
WeaponUsedMMFeedbackなどを設定している所はKoalaGunAmmoBasedにある「Projectile Weapon」で設定をしています。次はKoalaGunAmmoBasedで設定されているコンポーネントについて説明していこうと思います。
KoalaGunAmmoBasedに設定されているコンポーネントについて
KoalaGunAmmoBasedには以下のコンポーネントが設定されています。それぞれが遠距離武器を設定するためのコンポーネントになっていますが、必須となるコンポーネントと必須ではないコンポーネントがありそれぞれ簡単に説明していきたいと思います。
- Projectile Weapon(必須)
- MMSimpleObjectPooler(必須)
- Weapon Aim 2D(任意)
- Weapon Sprite Sorting Order Threshold(任意)
- Weapon Ammo(任意)
- Weapon Prevent Shooting when Close to Walls 2d(任意)
- Weapon Laser Sight(任意)
Projectile Weapon(必須)
「Projectile Weapon」は遠距離武器の根幹部分のコンポーネントになっています。簡単に言うと
- 遠距離武器の位置(キャラクターのWeaponAttachmentからどのくらいの位置に置くのか)
- アニメーション
- 発射物の向き、弾数など
を設定するコンポーネントになっています。
また、このコンポーネントはWeaponクラスを継承しています。キャラクターが武器を持つためにはWeaponクラスまたはWeaponクラスを継承したクラスが必要であるため、Projectile Weaponコンポーネントは必ず設定されている必要があるコンポーネントになります。
MMSimpleObjectPooler(必須)
遠距離武器に設定する弾薬を設定するコンポーネントになるため必須のコンポーネントになります。またこのコンポーネントは「ObjectPooler」がすでに実装されたコンポーネントになるため弾薬のON/OFFの処理についても最適化されているコンポーネントになっています。
実際に弾薬を設定するところは「Game Object To Pool」になります。ここに設定したオブジェクトが遠距離武器の発射物として発射される作りになっています。
遠距離武器を実行する場合は弾薬を画面上に何発も生成する必要があります。その場合処理が重たくなるのですが、TopDown Engineの場合はObjectPoolerを使って最適化して実行できるため、このコンポーネントを使うことで簡単に実装できます。
また、Projectile Weaponコンポーネントの中にもObjectPoolerクラスを使って弾薬を設定するように実装済みのため、遠距離武器を作成する場合はObjectPoolerクラスを使ったコンポーネントを使用して弾薬を設定することが必須になっています。
#以下のキャプチャでは「ObjectPooler」が”None”担っていますが、実行するとKoalaGunAmmoBasedにあるObjectPoolerクラスを探して自動で設定してくれるように実装されています。
#ObjectPoolerが何かについては検索していただけるとより理解が深まると思いますが、簡単に言うとオブジェクトの生成と破棄の処理を最適化された処理になります。
Weapon Aim 2D(任意)
遠距離武器の標準を設定するコンポーネントになります。Reticleに標準として設定したいオブジェクトを設定することで遠距離武器の標準を表示することができます。こちらのコンポーネントは必須ではないため、必要に応じて設定していただければ大丈夫です。
Weapon Sprite Sorting Order Threshold(任意)
武器の描画順を変更するコンポーネントになります。武器を回転させたときに角度に基づいてキャラクターの前後に描画順を変更することができます。
Weapon Ammo(任意)
遠距離武器と弾薬、インベントリの3種類を紐づけるコンポーネントになります。MMSimpleObjectPoolerコンポーネントと違うところはこのWeapon Ammoコンポーネントは「武器で使用する弾薬」と「インベントリで持っている武器の弾薬の数」を紐づけるために使います。Ammo IDに対応した弾薬をAmmo Inventory Nameに対応したインベントリの中から検索して遠距離武器が実行できるだけの弾薬がインベントリにあるかどうかをチェックしています。
そのため、インベントリに対応した弾薬がない場合は遠距離武器が実行できないようになります。逆に言うとWeapon Ammoコンポーネントが実装されてない遠距離武器は無限に弾を打てるようになります。武器によっては無限に撃てるような遠距離武器があってもいいと思うのでこちらのコンポーネントについても必要に応じて設定していただければいいかなと思います。
Weapon Prevent Shooting when Close to Walls 2d(任意)
遠距離武器が障害物(壁とか)と接触していると攻撃できないようになります。遠距離武器が壁を超えて攻撃できないようにしたときに設定するといいかと思います。
Weapon Laser Sight(任意)
武器の向いてる方向にレーザーサイトが出力されるようになります。Weapon Aim 2Dコンポーネントと同様に武器によって適宜設定していただければいいコンポーネントになっています。
各種Feedbackについて
現在実装されているFeedbackとしては以下3つ
- WeaponUsedMMFeedback
- WeaponReloadMMFeedback
- WeaponReloadNeededMMFeedback
になっていますがそれぞれProjectile WeaponコンポーネントのFeedbacksに設定することができます。実行されるタイミングとしては以下のキャプチャに記載のある通り、「Start」、「Use」、「Stop」、「Reload」、「Reload Needed」の場合にFeedbackが実行されます。それぞれ必要となるところでFeedbackを設定していただければいいかと思います。
新しく遠距離武器を作りたい場合、何からやればいい?
いろいろとパラメータについて説明させていただきましたが、「じゃあ新しい武器を作りたい場合、何からやればいいの?」ということになると以下のような手順で最低限の機能をまずは構築していただければいいかと思います。
- Projectile Weapon(必須コンポーネント)
→武器の発射する位置、発射する弾数、方向など基本的なパラメータを設定する - MMSimpleObjectPooler(必須コンポーネント)
→武器で発射する弾薬を設定する - 武器のImageなどを設定する。
まずは動くことを確認してそのあとにFeedbackを設定したり、弾薬の変更、インベントリとの紐づけなどやっていくのがいいかと思います。
まとめ
今回は遠距離武器の作り方~武器の作り方~について紹介しました。
だいぶ長くなりましたが、基本的な遠距離の武器の作り方は以上になります。初めて武器を作る場合はコンポーネントの構成を変えずに見た目や弾薬の変更、Projectile Weaponコンポーネントのパラメータを変えて何がどう影響しているのかを理解するところから始めるのがいいと思います。そのあとにオリジナルの武器を”0″から構築すると分かりやすいかと思います。
また、TopDown Engineのドキュメントを見るとほかにも使えそうなコンポーネントはたくさんあるので今回紹介したコンポーネント以外にも追加して自分なりにオリジナルの武器を作ってみるのも面白いかなと思います。
次は遠距離武器で使う「弾薬」について説明していこうと思います。
他の記事とかには書いてなかったのですが、何か質問や疑問点などあれば(答えられる範囲で)答えようと思うのでコメントなどいただけると回答できると思います。
コメント