復習:戦利品テーブル
CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 18/50。
チャレンジ
簡単スペースキーを押すたびに、宝箱からアイテムが1つドロップします。LootChest.csを作成してください。シーンではインスペクターで戦利品テーブルを設定するため、名前は次のとおり一致させる必要があります。
Common、Rare、Epic、Legendaryの順に並ぶ、Rarity列挙型。- インスペクターに表示できる
LootEntryクラス。このクラスにはstring型のitemName、GameObject型のprefab、Rarity型のrarityを持たせます。また、宝箱にはtableという名前のpublicなList<LootEntry>を持たせます。シーンのテーブルには、AppleとBread(Common)、Silver Ring(Rare)、Dragon Egg(Epic)、Golden Crown(Legendary)をこの順に入れます。 public int WeightOf(Rarity rarity)は、レア度に応じてエントリーの重みを返します。Commonは10、Rareは4、Epicは2、Legendaryは1です。public int TotalWeight()は、テーブル全体の重みを合計します。public LootEntry Pick(int roll)は、0以上TotalWeight()未満のrollに対して、テーブルを順番に調べます。各エントリーは、その重みと同じ数のrollを受け持ちます。rollが0から9ならApple、10から19ならBread、20から23ならSilver Ringが選ばれ、以下同様です。- スペースキーを押すと
Random.Range(0, TotalWeight())を一度実行してrollを決め、そのエントリーを選び、宝箱の1.5単位上にそのprefabを生成し、レア度と名前をRare: Silver Ringのようにログに出力します。
Playを押し、宝箱を何度か開けてから、Checkを押してください。
自分で試してみよう
using System.Collections.Generic;
using UnityEngine;
public class LootChest : MonoBehaviour
{
}