アイテムのドロップ確率を自由に決めるようにする【Unity】

アイテムをドロップさせる所まで進めていましたが、現状コインしかドロップしませんし、敵を倒したら必ずコインをドロップする仕様ですので少しテコ入れしようと思います。

具体的には、1つの敵がドロップするアイテムの種類を増やして、指定した確率でドロップさせるようにしたいと思います。

スポンサーリンク

アイテムのドロップ確率を自由に決めるようにする【Unity】

アイテムデータを追加する

アイテムが「コイン」しかないので、Itemフォルダーなどを作って右クリックし「Create」→「CreateItem」を選択します。

リンゴのアイテムデータ

Item Typeを「HP Recovery」にして「リンゴ」のアイテムデータを作ります。

CharacterDataスクリプトの作成

キャラクターが持つべきステータスをScriptableObjectを継承して作ります。

このスクリプトをプレイヤーと敵が継承して使うようにします。とりあえずプレイヤーと敵両方で共通して必要なものを記述しておきます。

EnemyDataスクリプトの作成

敵キャラクター用のステータスデータスクリプトを上で作ったCharacterDataを継承して作ります。

複数アイテムの管理にDictionaryを使う予定でしたが、ScriptableObjectにおいてDictionary型をシリアライズすることが出来ないので、ItemDictionaryを使用することにしました。

ItemDictionaryクラスの使い方に関しては、かめくめさんの記事が分かりやすいので参考にすると良いと思います。

敵が持っているアイテムや、ドロップ確率などを取得するようにします。

スクリプトを保存したら「EnemyList」など敵のリストをまとめておくフォルダーを作り右クリックして「Create」→「CreateEnemyData」を選択します。

敵のステータスデータ

シーン上に配置している「ゴースト」を例に敵データを作成しました。

Drop Item Dictionaryに持たせたいアイテムを設定して横にドロップ確率を入力します。

上の画像だとりんごを50%でドロップ、コインを90%でドロップしますね。

ItemManagerスクリプトを修正する

実際にアイテムをドロップさせる処理を記述するスクリプトですね。

foreach文を使って、敵の持っている各アイテムのドロップ率と、0~100までのランダムに生成された値を比較して、指定したドロップ率より小さい場合にそのアイテムを落とすようにします。

アイテムマネージャー

Item Managerのインスペクタからアイテム本体となるオブジェクトと敵データを設定するんですが、ここで1つ注意が必要になります。

アイテムプレハブは、Drop Item Dictionaryで設定したアイテムデータの順番と同じようにする必要があります。私の場合は、先に「リンゴ」のデータと設定しておいたのでアイテムプレハブも先に「applePrefab」から設定しています。

この順序が逆になると、正しいドロップ率が各アイテムに反映されないので気をつけましょう。