Menu
CoddyTech

復習:戦利品テーブル

CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 18/50。

challenge icon

チャレンジ

簡単

スペースキーを押すたびに、宝箱からアイテムが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
{
}

Unityにおけるゲームアーキテクチャのすべてのレッスン