【Unity】アイテムドロップ機能を実装してみた

FPSで大事な要素といえば、アイテムドロップ。

敵を倒した時にアイテムが出るように実装をしてみた。

やることは結構簡単で、

  1. 倒された瞬間にアイテムを生成(Instansiate)
  2. プレイヤーがアイテムを取ったら自ら消える(Destroy)

の2つです。

まずアイテムを生成する方法から。

ここではアイテムを2つ用意して、どちらかを同じ確率でドロップするようにしてみました。

Instantiateを使うとアイテムをコピーします。

Itemにセットするのは、アイテムですが、忘れてはいけないのが、Prefab化したアイテム(プロジェクトウィンドウ内にある)をセットすること。

もし、ヒエラルキーウインドウにあるアイテムをセットしてしまいDestroyされた後に、Instantiateをしてしまうと以下のエラーが出ます。

“MissingReferenceException: The object of type ‘GameObject’ has been destroyed but you are still trying to access it.”

Instantiateを使ってアイテムを生成(コピー)する場合には、Prefab化されたオブジェクトを使うようにしましょう。

あとは、アイテムと衝突する必要はないので、Colliderの「Is Trigger」はチェックしておきましょう。

Itemクラスは以下の通り。

OnTriggerEnterは、プレイヤーがアイテムを触った時に呼ばれ、Destroyを呼ぶことでアイテムを消去しています。

プレイヤーの処理は以下の通り。

取得したアイテムによって、HPを回復させたり、弾を増やしています。

プレイヤーが接触するコライダはアイテムだけではないので、最初の方で例外処理を記載することで、Null Pointerを回避するようにしています。

おわり。