前回の記事で食料システムを実装し、行動するごとにお腹が減り、満腹度が0になると行動する度にダメージを受けるようになりました。
前回の記事:
今回の記事では、ローグライクRPGの戦略性を高めるアイテムとなる武器を作っていきます。
一言に武器と言っても色々ありますが、この講座では簡単にアイテムを拾うと攻撃力が上がる効果だけを実装します。
また、プレイヤーは武器を一つだけ装備できることとします。
ダンジョンを進むにつれて武器を獲得しながらより奥深くを目指す。そんなシンプルながらも面白いローグライクゲームを作ることができるようになります。
Scriptable Objectを用いて武器データを作る
それでは早速武器を表すデータを作成していきます。
新しく「Weapon.cs」というスクリプトを作成し、次の内容にしてください。
「Weapon」は「UnityEngine.ScriptableObject」にし、武器データをアセットとして管理するようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(menuName = "Weapon")] class Weapon : ScriptableObject { public string Name = ""; public int Attack = 1; public void Attach(MapObjectBase obj) { obj.Attack += Attack; } public void Detach(MapObjectBase obj) { obj.Attack -= Attack; } public Weapon Merge(Weapon other) { var newWeapon = ScriptableObject.CreateInstance<Weapon>(); newWeapon.Name = Name; newWeapon.Attack = Attack; if(other != null) newWeapon.Attack += other.Attack; return newWeapon; } public override string ToString() { return $"{Name} Ak+{Attack}"; } } |
この講座では武器はプレイヤーだけに持たせることを想定していますが、Playerではなく、「MapObjectBase」コンポーネントに装備している武器情報を持たせるようにします(改造すれば敵に武器を持たせることも可能になります)。
武器を装備したとき、「MapObjectBase」の「Attack」にWeaponアセットに設定したAttack値の分だけ足すようにします。
この辺りの実装には色々やり方が考えられます。今回みたいにPlayerの攻撃力に足さない方法もあります。
その際は「MapObjectBase」スクリプトにある「Attack」メソッドの攻撃対象の「Life」フィールドを減らす部分を修正する形になるでしょう。
いずれの形式でもOKですが、この講座ではAttack値を変更し、パラメータ表示などにも反映されるようにしていきます。
それでは、MapObjectBaseスクリプトを修正していきましょう。
まとめ
今回の記事ではUnity C#を用いてローグライクゲームにおける武器システムを作っていきました。
Scriptable Objectにまとめることでいろんな武器を作っていくことができます。
ぜひあなたも好きな武器を作ってみてくださいね。
まとめると以下のようになります。
- 武器用のScriptableObjectを作成
- 「MapObjectBase」コンポーネントに武器を設定できるようにした
- プレイヤーが装備中の武器を画面に表示するようにした。
それでは次の記事に行ってみましょう!
コメント