アイテムを生成しているスクリプトを修正します。今回のプロジェクトではEnemyControllerが該当します。
まず1つ目に、宣言フィールドにあるアイテムプレファブ用の配列の宣言を削除し、代わりに作成した汎用アイテムプレファブを登録できるようにします。
宣言する方法は色々ありますが、今回はItemDetailで宣言しておきます。こうすることでインスタンスと同時にクラスが取得できるので
GetComponentをせずにInitItemメソッドを実行できます。
つぎに、CreateDropItem()メソッド内を修正します。
こちらではまず、ランダムに選択された番号(index変数の値)と、GameDataにアサインされているItemDataのリスト(ItemList)のアイテム番号とを照合し、
合致した番号のアイテムデータを1つ取得します。
そしてそのItemDataをItemDetailクラスのInitItemメソッドの引数として渡すことで、アイテムの情報を生成された汎用アイテムに情報として渡しています。
EnemyControllerスクリプトを修正します。
EnemyController.cs
<= クリックすると開きます。
// 宣言フィールド
public ItemDetail itemDetailPrefab; // 配列のItemBaseを削除し、代わりにこちらを宣言。アサインするプレファブは同名のゲームオブジェクト。
(省略)
/// <summary>
/// アイテムの生成(メソッド内を変更)
/// </summary>
private void CreateDropItem() {
// TODO コンディション数にする
int index = Random.Range(0, (int)CONDITION_TYPE.COUNT); // 最大値は適宜変更してください。
// ItemDataを初期化して用意
GameData.ItemData itemData = new GameData.ItemData();
// ランダムで選ばれたindexとItemListに登録されているnoとを照合し、合致したデータをItemDataとして代入
itemData = GameData.instance.itemList.Find(x => x.no == index);
// 生成の高さを調整
Vector3 createPos = new Vector3(transform.position.x, transform.position.y + offset, transform.position.z);
// 生成の向きを調整
Quaternion createRot = new Quaternion(transform.rotation.x, 180, transform.rotation.z, 0);
// アイテム生成
ItemDetail itemDetail = Instantiate(itemDetailPrefab, createPos, createRot);
// アイテムの情報を設定
itemDetail.InitItem(itemData);
}
修正されるとインスペクターのアサイン情報が更新され、配列のアサイン情報の登録がなくなる代わりに、ItemDetailPrefab変数が表示されます。
ここにProject内にプレファブ化しておいたItemDetailPrefabゲームオブジェクトをアサインします。
ゲームを実行し、敵が落とす汎用アイテムのクローンが、ちゃんと回復アイテムや攻撃力アップのアイテムとして生成されていれば成功です。
参考動画です(ピンク色の汎用アイテムの画像が、ちゃんとブーツの画像になり、速度アップアイテムとして生成されていることが確認できます)
https://gyazo.com/de67fa182ae42ceb852b96d29b76a6fd