前書き
TopDown EngineにはInventoryという機能が存在し、Inventory機能を用いることでドロップアイテムを作成することができます。この機能を使うことで「アイテムを拾う」、「アイテムを使用する」、「アイテムを装備する」といったことが可能になります。
ドロップアイテムについて正確に言うとTopDown Engineとしての機能ではなく、付属しているInventory Engineによって実装されているため、もし、Documentを見る場合はTopDown EngineではなくInventory EngineのDocumentを見ていただくのがいいと思います。
今回説明するのは武器になりますが、武器以外(弾薬や消費アイテム)も似たように作れるので、参考にしてみてください。
やりたいこと
以下の動画のように
- 武器アイテムを登場させる
- 武器アイテムを装備する
- インベントリに取得した武器を表示する
上記のことをやりたいと思います。
# 今回はインベントリに格納されるようなアイテムを実装していますが、
# インベントリに格納しない消費アイテム(HPの即時回復やコイン)も作ることができます。
武器アイテムを作る方法
TopDown Engineで武器アイテムを作る場合
- 武器のアイテム情報の作成
- フィールド上に表示するためオブジェクトの作成とプレイヤーがアイテムを拾う設定
の2つが必要になるため、それぞれについて説明していこうと思います。
武器のアイテム情報の作成
武器のアイテム情報はInventoryWeaponScriptで設定をします。
内容については項目名を見ればある程度分かると思うので、重要なところを抜き出して説明したいと思います。それぞれアイテムによって必要な設定があると思いますので、その時々で適した設定をしていただく必要があります。
- ItemID
アイテムを個々に判断するために使用します。同じIDを使用せず、
ユニークである必要があります。
- TargetInventoryName
アイテムを取得した時に格納するInventoryを指定します。
デフォルトだと「KoalaMainInventory」という名前でHierarchy上にオブジェクトが作成されているのでこちらを使用しています。
- Icon
Inventoryにアイテムが格納された場合に表示される画像になります。
- Prefab
フィールド上に表示されるオブジェクトになります。
- TargetEquipmentInventoryName
今回は武器のため設定が必要になる項目です。
画面右上に表示する武器Inventoryの名称を指定します。
デフォルトだと「KoalaWeaponInventory」という名前でHierarchy上にオブジェクトが作成されているのでこちらを使用しています。
- EquippableWeapon
武器を装備するときの武器コンポーネントを設定します。
具体的に言うと以前作成した近距離武器や、遠距離武器のPrefabを設定します。
設定したPrefabがプレイヤーの持つ武器になります。
- AutoEquipMode
武器アイテムを取得したときに自動で装備するかどうかを設定します。
武器を自動で設定せずにInventoryに格納することも可能です。
ざっと説明すると上記の項目を設定すれば問題ありません。
他にもアイテムを捨てる設定などなどがありますので、詳しくはDocumentやソースコードを見ていただくといいかと思います。
フィールド上に表示するためオブジェクトの作成とプレイヤーがアイテムを拾う設定
アイテムをプレイヤーが取得するために必要な設定は3つあります
- Colliderを付与する
- PickableItemが基底クラスとなっているPickableItem系のコンポーネントを付与する
- ItemPickerコンポーネントを付与する
簡単に2.3.について説明していきます。
PickableItemが基底クラスとなっているPickItem系のコンポーネントを付与する
プレイヤーがアイテムを取得するためには「アイテムがプレイヤーと接触するとアイテムはプレイヤーに取得される」という処理が必要になります。この処理をうまく実行してくれるのがPickableItemコンポーネントになります。
PickableItemコンポーネントを基底クラスとするコンポーネントは複数あり、
- PickableItem
- PickableWeapon
- Stimpack
などがあります。それぞれ必要に応じて使う必要がありますがとりあえず、プレイヤーがアイテムを取得したいだけならPickableItemで十分かなと思います。
ソースコードを見ると、PickableItem内部で「プレイヤーとアイテムが接触したかどうか」の判定処理を行っているため、現状は”プレイヤーと接触したか”という動きになるので、Enemyなどは反応しない作りになっています。
ItemPickerコンポーネントを付与する
取得するアイテム情報を設定するコンポーネントになります。先ほど作ったアイテム情報を設定します。この時に「取得するアイテムの量」、「Inventoryに空きがない場合は取得しない」など設定することも可能です。
まとめ
今回はドロップアイテム(武器)について説明をしました。
アイテムの基本情報はInventoryItemクラスやInventoryWeaponクラスでまとまっているため、そのままでも使いやすいかなと思います。また、自分なりに修正を加えたい場合もInventoryItemクラスなどを基底クラスとして継承をすれば今まで通りに使えるのでカスタマイズ性もよいと思います。
何はともあれ、まずはアイテムの作り方をやってみて理解を深めていけたらいいなと思います。
コメント